Môi trường nào tôi có được với sudo?


14

Khi tôi chạy sudo, chính xác điều gì sẽ xảy ra với môi trường của tôi?

Khi tôi chạy sudo command, dường như không thấy môi trường của tôi hoặc gốc. Ví dụ: đường dẫn của tôi cho cả hai bao gồm /usr/local/bin, nhưng nếu tôi cố chạy một trong các chương trình mà không có đường dẫn đầy đủ, nó sẽ thất bại.

Tôi nghĩ rằng sudo chạy như root, và do đó có môi trường root. Có một cách khác mà bash thực thi theo sudo so với root hoặc người dùng bình thường của tôi không?

BIÊN TẬP:

Tôi đã sử dụng sudo -igần đây, nhưng gần đây nó đã gây ra sự cố vì thư mục làm việc hiện tại của tôi được đặt thành /root. Điều này đúng như mong đợi (sorta), nhưng tôi vẫn không hiểu tại sao sudo không nhận ra các tệp thực thi của tôi /usr/local/bin.

BIÊN TẬP:

Tôi đang chạy Fedora 15.


Bạn đang sử dụng hệ điều hành nào (nếu Linux, phân phối gì)? Có rất nhiều cách để cấu hình PATH, và đôi khi không dễ để tìm ra ai ghi đè lên nó. Nó có thể là một số cài đặt hệ thống (ví dụ như trong PAM), chính sudo hoặc tập lệnh hồ sơ tiếp theo.
Gilles 'SO- ngừng trở nên xấu xa'

@ Gilles- Điểm tốt. Tôi đã thêm hệ điều hành của tôi. Tôi chỉ thực sự nhận thấy điều này trên Fedora (tôi đã từng sử dụng Ubuntu), nhưng tôi nghĩ đó là vì họ đã không thêm nhiều thiết lập tiện lợi.
beatgammit

Câu trả lời:


6

Tôi không biết về các mặc định trên Fedora, nhưng trên Debian sudomặc định sử dụng secure_pathtùy chọn có giá trị mặc định là /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin.

Điều này có nghĩa là đường dẫn được thay đổi thành giá trị đó mỗi khi bạn sử dụng sudo; nhưng khi bạn sử dụng sudo -i, đường dẫn sẽ bị thay đổi bởi các tệp RC của người dùng gốc.


Tôi không biết về secure_pathlựa chọn này. Mặc định không bao gồm /usr/local/bintrong cài đặt của tôi. Cảm ơn, điều này thực sự đã giúp công cụ rõ ràng lên!
beatgammit

3

Bạn có thể kiểm tra điều này khá dễ dàng với những thứ như

So sánh đầu ra từ

sudo env 
env

Và những thứ như

sudo whoami 
whoami

Bằng cách đó bạn có thể cố gắng tìm ra những gì còn thiếu trong thiết lập của mình.


Thật tuyệt, không biết về điều đó. Dù sao, /usr/local/binkhông phải trong sudo env của tôi, nhưng nó là trong env gốc và env người dùng của tôi. Tại sao lại thế này?
beatgammit

sudo whoami trở lại root, như mong đợi. Điều gì có thể khiến sudo env của tôi khác với env gốc của tôi?
beatgammit

Không biết, nhưng phải có một số thiết lập bị thiếu ở đâu đó, / usr / local / bin thường được bao gồm. Có lẽ bạn đã xóa env $ PATH do nhầm lẫn trong một số configfile?
Johan

Có nguồn sudo /root/.bashrc không? Đó là nơi tôi thêm /usr/local/binvào đường dẫn của root (tôi không may phải làm điều này bằng tay)?
beatgammit

Tôi nghĩ bạn nên sửa đổi cấu hình toàn cầu shell của mình và xem điều gì sẽ xảy ra. Nếu bạn đang chạy bash, nó sẽ giống như /etc/bash.bashrc
Johan

2

Các sudo -ilệnh mô phỏng đăng nhập ban đầu. Trên hệ thống Debian của tôi, nó cũng nói rằng:

Điều này có nghĩa là các tệp tài nguyên dành riêng cho đăng nhập như .profile hoặc .login sẽ được đọc bởi trình bao. Nếu một lệnh được chỉ định, nó được chuyển đến shell để thực thi. Mặt khác, một vỏ tương tác được thực thi. sudo cố gắng thay đổi thư mục chính của người dùng đó trước khi chạy shell. Nó cũng khởi tạo môi trường, giữ nguyên HIỂN THỊ và HẠN, đặt HOME, MAIL, SHELL, USER, LOGNAME và PATH, cũng như nội dung của / etc / môi trường trên các hệ thống Linux và AIX. Tất cả các biến môi trường khác được loại bỏ.


0

Bạn có thể điều chỉnh sudo's env_keeptham số để bao gồm PATH, mặc dù bạn nên lưu ý các vấn đề bảo mật của làm điều đó.

visudo

... sẽ khởi chạy $EDITOR, sau đó bạn có thể thay đổi Defaults env_keep =... phù hợp.

Ngoài ra, bạn có thể thêm / usr / local / bin vào đường dẫn của hệ thống bằng cách thêm tệp vào /etc/profile.d.

ví dụ:

cat <<EOF > /etc/profile.d/tjameson.sh
export PATH=$PATH:/usr/local/bin
EOF

sudocó xử lý đặc biệt PATHvì vậy bạn không nên làm điều này.
Arrowmaster
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.