Nó hoàn toàn phụ thuộc vào cách bạn gọi chương trình của bạn với sudo
hoặc su
.
Ví dụ, trên hệ thống mà tôi đang ở thời điểm này:
.bashrc
COMMAND $HOME $USER Env. $PATH
1. sudo -i (root) root root [1]
2. sudo -s (USER) root USER /home/${USER}/bin:[1]
3. sudo /bin/bash (USER) root USER /home/${USER}/bin:[1]
4. sudo su (root) root USER [1]:/usr/games:/usr/local/games
5. sudo su - (root) root root [1]
Trong đó [1] = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
Env = Biến môi trường được đặt lại cho 1 và 5, được lấy từ $ USER trong 2,3,4.
Vì vậy, một kịch bản, hoặc một chương trình được tung ra với một lựa chọn khác nhau có thể nhìn thấy nhau $PATH
, $HOME
, vỏ của nó có thể đọc khác nhau .bashrc
, .profile
và các biến môi trường. Nó đọc các tập tin liên quan với $HOME
. Mỗi người dùng có thể sửa đổi môi trường của mình theo một cách khác nhau (biến $PATH
, .bashrc, .profile, .bash_profile, bí danh ...). Cụ thể, một người dùng có thể có một thứ tự khác nhau của các thư mục trong đó $PATH
và do đó, một tập lệnh có thể thực thi một lệnh, ví dụ /home/$USER/bin
thay vào đó là một thư mục trong đường dẫn được mong đợi từ root.
Bạn có thể chạy chương trình theo sudo -i
như bạn đã đăng nhập bằng root su -
, nhưng bạn có thể có hành vi khác nếu bạn chạy nó với sudo MyCommand
hoặc với su -c MyCommand
.
Từ man su
:
Trong phần mô tả:
Môi trường hiện tại được chuyển sang shell mới . Giá trị của $ PATH được đặt lại thành / bin: / usr / bin cho người dùng bình thường hoặc / sbin: / bin: / usr / sbin: / usr / bin cho siêu người dùng
...
Trong phần tùy chọn:
- , -l , --login
Cung cấp một môi trường tương tự như những gì người dùng mong đợi nếu người dùng đăng nhập trực tiếp .
Từ người đàn ông sudo
-i , --login
Chạy shell được chỉ định bởi mục nhập cơ sở dữ liệu mật khẩu của người dùng đích làm shell đăng nhập. Đ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 thông qua tùy chọn -c của shell. Nếu không có lệnh nào được chỉ định, shell 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. Lệnh được chạy với môi trường tương tự như môi trường mà người dùng sẽ nhận được khi đăng nhập . Phần Môi trường lệnh trong tài liệu thủ công sudoers (5) làm thế nào tùy chọn -i ảnh hưởng đến môi trường mà lệnh được chạy khi sử dụng chính sách sudoers.