Làm cách nào để người dùng sudo -u $ sử dụng env của người dùng?


19

Có vẻ như khi sudosử dụng sudo -u $usermôi trường root vẫn đang được sử dụng. Làm thế nào tôi có thể sudosử dụng môi trường người dùng? như một lưu ý đặc biệt không phải tất cả người dùng mà tôi sẽ sử dụng này đều có shell đăng nhập.


Xác định "môi trường". # whoami => root # sudo -u user whoami => user
alex

1
@alex Tôi hình sudo -u userlà tương tự để su userchuyển env trong su bạn phải sử dụngsu - user
xenoterracide

Nhưng bạn có ý nghĩa gì với "môi trường người dùng" nếu người dùng không có vỏ đăng nhập?
Thomas Themel

Người dùng @Thomas có thể chạy các chương trình ngay cả khi họ không thể đăng nhập vào ... Tôi tin rằng -ucũng bỏ qua các nhóm ... Tôi đã thử một cái gì đó từ root (sử dụng sudo -u xuống) và nó đã hoạt động, dường như nó không dành cho người dùng. .. vì vậy tôi phải đảm bảo rằng tôi đang chạy các lệnh theo cách có tất cả các hạn chế và các vấn đề môi trường.
xenoterracide

Câu trả lời:


21

Thử sudo -i -u $user

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu

tiếc là không hoạt động nếu chúng không có vỏ trong /etc/passwd:( nhưng tôi đoán là ...
xenoterracide

Nhìn vào trang man, có vẻ như đó -Elà trang bảo vệ môi trường, tức là tất cả các biến môi trường, v.v., mặc dù nó vẫn không được đặt PATHLD_LIBRARY_PATHcho người dùng đang gọi.
Shahbaz

1
$SUDO_USERcó thể được sử dụng
Rahul Patil

4

man sudoerstrên Debian đề cập đến một khả năng khác. Không chắc chắn cách nào bạn muốn, nhưng câu hỏi của bạn có vẻ như bạn muốn có env_resettùy chọn từ/etc/sudoers - về cơ bản thì ngược lại là env_keepdanh sách. Để đặt đúng, HOMEbạn có thể sử dụng -Htùy chọn để sudotrực tiếp hoặc, một lần nữa sudoers, với always_set_hometùy chọn.

Hoặc bạn có thể sử dụng env_file để chỉ định một môi trường chính xác mà bạn muốn vượt qua. Tuy nhiên, tôi nghĩ là tốt nhất nếu bạn kiểm tra các env_*tùy chọn từ man sudoers, bởi vì /etc/sudoerskiểm soát tất cả và đó là điểm cần chuyển sang.

Đây là một phần của bối cảnh mà tôi sử dụng env_resetbên trongsudoers tệp :

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year

1

Khi các biến môi trường sudo ing không được bảo tồn.

Trong trường hợp của tôi, tôi sử dụng tài liệu ở đây .

Bạn đặt các hành động của mình như my_script.shbên trong TÀI LIỆU TẠI ĐÂY:

su -u some_user <<EOF
./my_script.sh
EOF

Bạn không nên đặt biến trực tiếp tại đây, vì chúng sẽ được hiểu từ người dùng hiện tại của bạn.

su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF

Nếu $MY_VARkhông được đặt cho người dùng đang chạy tập lệnh, nó sẽ không được đặt.

Biến của bạn phải được gọi trong tập lệnh của bạn hoặc bạn phải thoát chúng bằng \.

Ví dụ.

su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF

Ở đây, $MY_VARsẽ có some_usergiá trị theo ngữ cảnh.


Câu trả lời tốt. Một điều chỉnh nhỏ: Nó nên được su - some_userthay vì su -u some_user.
rudolfbyker
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.