Có bao giờ một lý do tốt để chạy sudo su?


78

Để khởi chạy shell root trên các máy có tài khoản root bị vô hiệu hóa, bạn có thể chạy một trong:

  • sudo -i: chạy shell đăng nhập tương tác (đọc /root/.bashrc/root/.profile)
  • sudo -s: chạy shell tương tác không đăng nhập (đọc /root/.bashrc)

Trong thế giới Ubuntu, tôi thường thấy được sudo suđề xuất như một cách để có được một vỏ gốc. Tại sao chạy hai lệnh riêng biệt khi một sẽ làm? Theo như tôi có thể nói, sudo -itương đương sudo su -sudo -sgiống như sudo su.

Sự khác biệt duy nhất dường như là (so sánh sudo -ibên trái và sudo su -bên phải):

ảnh chụp màn hình của meld so sánh 'sudo -i' và 'sudo su -'

Và so sánh sudo -s(trái) và sudo su(phải):

ảnh chụp màn hình của meld so sánh 'sudo -s' và 'sudo su'

Sự khác biệt chính (bỏ qua các SUDO_foobiến và LS_COLORS) dường như là các XDG_foobiến hệ thống trong các sudo suphiên bản.

Có trường hợp nào mà sự khác biệt đó đảm bảo sử dụng khá không phù hợp sudo su? Tôi có thể nói với mọi người một cách an toàn (như tôi thường có) rằng không bao giờ có bất kỳ điểm nào trong việc chạy sudo suhoặc tôi đang thiếu thứ gì đó?


8
Tôi chưa bao giờ hiểu những hệ thống ưa thích như thế ubuntungăn người dùng tiêu chuẩn su -. 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ó.
jimmij 24/07/2015

16
@jimmij Bạn không cần biết mật khẩu root với su -? Bạn không nghĩ rằng đặt ra một lỗ hổng bảo mật trong môi trường nhiều người dùng, nơi mà nhiều người cần có quyền truy cập root?
Erathiel

4
@Christopher Vấn đề không phải là một trong những người dùng có đặc quyền sudo hoặc mật khẩu gốc để hack hệ thống. Vấn đề là về an toàn mật khẩu. Khi bạn thay đổi mật khẩu root, bạn cần cho tất cả người dùng cần biết, điều này có thể khó khăn. Với sudo, bạn không gặp khó khăn này.
Huygens

4
Công cụ tìm khác biệt là gì?
Josh The Geek

5
@jimmij Làm thế nào để Ubuntu ngăn chặn việc sử dụng su -? Có, người ta sẽ phải đặt mật khẩu gốc, nhưng điều đó không quan trọng.
Phizes 24/07/2015

Câu trả lời:


62

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.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 -ilà 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, .bashrchoặc .loginsẽ được đọc và thực thi bởi trình bao.

sudo su so với sudo -s

sudo sugọi sudobằng lệnh su. Bash được gọi là vỏ không đăng nhập tương tác. Vì vậy, bashchỉ 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 $SHELLbiến và thực hiện nội dung. Nếu $SHELLchứa /bin/bashnó gọi sudo /bin/bash, có nghĩa /bin/bashlà đượ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 bashchính nó đọc. bashrccủ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 -ilá cờ đã được thêm vào sudotrong 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 -ivà 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 sudotrước mỗi lệnh.

Vì vậy, ý nghĩa của sudođã bị lạm dụng. sudolà để 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ờ, sudongà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 sudocó 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, sudoluô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 susẽ bị phản đối và sudothay thế suhoàn toàn.

Do đó, tôi nghĩ rằng, sẽ tốt nhất khi sử dụng sudocác cơ chế bên trong ( -s, -i) thay vì dựa vào một công cụ cũ như su.


4
À, vậy trước năm 2004 có thực sự có lý do để chạy sudo sukhông? Tại thời điểm đó tôi đang sử dụng các bản phân phối không có tài khoản root và sudo nên tôi không biết. Điều đó có thể giải thích sự phổ biến của meme sudo su trong thế giới Ubuntu.
terdon

8
Tôi chưa bao giờ biết về sudo -ihoặc sudo -strước đây - Tôi đã chạy UNIX các loại khác nhau kể từ năm 1991 và đối với tôi sudo su -chỉ là một thói quen ăn sâu vào thời điểm này.
lông mịn

2
sudo -sgiống như sudo $SHELLsau đó không?
Phường Samuel Edwin

3
(Đồng ý với @chaos) Lý do nên sử dụng sudo su -là 1) rằng nó hoạt động và bạn biết chính xác những gì nó làm và 2) bạn không phải nhớ một tùy chọn khác sudo(khi bạn đã biết su -) và 3) bạn không ' Tôi phải nhớ phiên bản sudonào bạn đang làm việc cùng lúc này. Tại sao phải nhớ thêm một mẩu chuyện nhỏ khi những gì bạn đã có hoạt động tốt? Có bất cứ điều gì su -itốt hơn ngoài việc tránh một mục nhật ký? Tôi không sử dụng sudo su -đủ để lo lắng về điều đó.
jrw32982

3
Tôi chỉ thấy bản cập nhật, rất đẹp! Đối với hồ sơ, hãy để tôi nói rằng tôi cũng cắt răng * nix của mình trên các hệ thống không có sudovà rất quen thuộc su. Đó là sự kết hợp của hai thứ làm tôi khó chịu.
terdon

16

Để trả lời câu hỏi của bạn trực tiếp: không, không có lý do chính đáng để làm điều này. Ngoài ra, sudo su tạo ra hai mục nhật ký khi một mục sẽ đủ.

Tôi đã thấy nhiều người làm điều này và khi tôi hỏi tại sao họ không chạy sudo -s, câu trả lời là họ không biết về -scờ để sudo, và nói chung họ chuyển đổi sau khi tôi chỉ ra.

Tuy nhiên, vào danh sách của bạn sudo -ssudo -i, tôi muốn thêm một tùy chọn nữa sudo -sE, đó là một loại thay thế cho su -m. sudo -sEbảo vệ môi trường của bạn bao gồm cả thư mục nhà. Điều này có rủi ro nếu thư mục nhà của bạn không an toàn (trên NFS). Nhưng trong một môi trường mà nhiều người sử dụng root, nó giúp bạn không phải đồng ý về nội dung của .bashrctập tin gốc . Của tôi .bashrcchứa nhiều chuyên môn cho root, vì vậy tôi không nhận được chính xác môi trường giống như root, nhưng ít nhất tôi có được chính xác môi trường tôi muốn.


4
Nếu nó bảo vệ môi trường của bạn, bao gồm $HOME, điều đó có nghĩa là tất cả các tệp mới được tạo trong thư mục gốc đều thuộc quyền sở hữu của bạn chứ không phải của bạn. Tôi đã có điều này gây ra nhiều khó khăn để chẩn đoán lỗi cho phép.
Eris

sudo -sEvà sau đó echo $HOMEcung cấp cho /rootCentOS 7, bash 4.2. -sEkhông xuất hiện để bảo vệ thư mục nhà như bạn đã nêu.
jeremysprofile
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.