Như bạn đã nêu trong câu hỏi của bạn, sự khác biệt chính là môi trường.
sudo su -
so với sudo -i
Trong trường hợp sudo su -
nó là một vỏ đăng nhập, vì vậy /etc/profile
, .profile
và .bashrc
được thực thi và bạn sẽ thấy mình trong thư mục gốc của root với môi trường của root.
sudo -i
là gần giống như sudo su -
Người -i
(mô phỏng đăng nhập ban đầu) tùy chọn chạy vỏ được xác định bởi sự xâm nhập cơ sở dữ liệu mật khẩu của người dùng mục tiêu như một vỏ đă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
, .bashrc
hoặc .login
sẽ được đọc và thực thi bởi trình bao.
sudo su
so với sudo -s
sudo su
gọi sudo
bằng lệnh su
. Bash được gọi là vỏ không đăng nhập tương tác. Vì vậy, bash
chỉ thực hiện .bashrc
. Bạn có thể thấy rằng sau khi chuyển sang root, bạn vẫn ở trong cùng một thư mục:
user@host:~$ sudo su
root@host:/home/user#
sudo -s
đọc $SHELL
biến và thực hiện nội dung. Nếu $SHELL
chứa /bin/bash
nó gọi sudo /bin/bash
, có nghĩa /bin/bash
là được bắt đầu như là vỏ không đăng nhập, vì vậy tất cả các tệp chấm không được thực thi, nhưng bash
chính nó đọc. bashrc
của người dùng gọi. Môi trường của bạn vẫn như cũ. Nhà của bạn sẽ không phải là nhà của root. Vì vậy, bạn đã root, nhưng trong môi trường của người dùng gọi.
Phần kết luận
Các -i
lá cờ đã được thêm vào sudo
trong năm 2004 , để cung cấp một chức năng tương tự như sudo su -
, vì vậy sudo su -
là khuôn mẫu để sudo -i
và có nghĩa là để làm việc như nó. Tôi nghĩ việc bạn sử dụng thực sự không quan trọng, trừ khi môi trường không quan trọng.
Thêm vào
Một điểm cơ bản phải được đề cập ở đây là sudo
được thiết kế để chỉ chạy một lệnh duy nhất với các đặc quyền cao hơn và sau đó thả các đặc quyền đó về các lệnh gốc. Nó không bao giờ có nghĩa là thực sự chuyển đổi người dùng và để lại một vỏ gốc. Theo thời gian, sudo
đã được mở rộng với các cơ chế như vậy, bởi vì mọi người đã khó chịu về lý do tại sao phải sử dụng sudo
trước mỗi lệnh.
Vì vậy, ý nghĩa của sudo
đã bị lạm dụng. sudo
là để khuyến khích người dùng giảm thiểu việc sử dụng các đặc quyền gốc.
Những gì chúng ta có bây giờ, sudo
ngày càng trở nên phổ biến. Nó được tích hợp trong gần như mọi bản phân phối linux nổi tiếng. Công cụ ban đầu để chuyển sang tài khoản người dùng khác là su
. Đối với một trường học cũ * nix kỳ cựu như vậy sudo
có vẻ như không cần thiết. Nó thêm vào sự phức tạp và hành xử nhiều khả năng đối với các cơ chế mà chúng ta biết từ gia đình os của microsofts, và do đó trái ngược với triết lý đơn giản của các hệ thống * nix.
Tôi không thực sự là một cựu chiến binh, nhưng theo tôi, sudo
luôn là một cái gai bên cạnh tôi, từ lúc được giới thiệu và tôi luôn làm việc xung quanh việc sử dụng sudo
, nếu có thể. Tôi miễn cưỡng nhất để sử dụng sudo
. Trên tất cả các hệ thống của tôi, tài khoản root được kích hoạt. Nhưng mọi thứ thay đổi, có thể thời gian sẽ đến, khi nào su
sẽ bị phản đối và sudo
thay thế su
hoàn toàn.
Do đó, tôi nghĩ rằng, sẽ tốt nhất khi sử dụng sudo
các cơ chế bên trong ( -s
, -i
) thay vì dựa vào một công cụ cũ như su
.
ubuntu
ngăn người dùng tiêu chuẩnsu -
. Họ đã tạo ra vấn đề và bây giờ có những cuộc thảo luận bất tận về cách giải quyết nó.