Sự khác biệt về chức năng giữa sudo su và sudo -i là gì?


19

Tại sao một cái được ưa thích hơn cái kia trong ví dụ này?

sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit

Vui lòng cung cấp các liên kết đến tài liệu Ubuntu.


Vui lòng xem xét lại lựa chọn của bạn về câu trả lời "được chấp nhận". Người được bình chọn thấp nhất thực sự là người duy nhất đúng.
Kyle Strand

Câu trả lời:


15

Các sudo sulệnh viết tắt của "người sử dụng chuyển đổi", và cho phép bạn trở thành một người dùng khác. Nó cho phép người dùng được phép thực thi một lệnh như siêu người dùng hoặc người dùng khác, như được chỉ định trong tệp sudoers.

Tùy chọn ‑i (mô phỏng đăng nhập ban đầu) 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 dưới dạng 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.

Nguồn: ManPage


1
"Sử dụng su tạo ra vấn đề bảo mật, và về cơ bản là nguy hiểm." Gì?
Ngừng làm hại Monica

1
Nếu bạn chạy, sudo subạn được yêu cầu nhập mật khẩu, không phải mật khẩu gốc. Người dùng root thậm chí không cần phải có mật khẩu. Bất kể, nếu quản trị viên đang sử dụng mật khẩu gốc, điều đó không có nghĩa là tất cả người dùng thông thường đều biết.
Ngừng làm hại Monica

2
Không nó sẽ không như vậy. sudochạy sudưới dạng root và root có thể sucho bất kỳ người dùng nào mà không biết mật khẩu của họ. Những hiểu lầm cơ bản về cách thức hoạt động của hệ thống xứng đáng với một IMO downvote.
Ngừng làm hại Monica

3
Và xóa bình luận của bạn chỉ làm tăng thêm sự nhầm lẫn.
Ngừng làm hại Monica

1
Bạn không làm cho nó tốt hơn nhiều. sudo -iSẽ không hỏi mật khẩu của root, vì vậy nó không liên quan đến câu hỏi.
Ngừng làm hại Monica

14

sudo suchỉ thay đổi người dùng hiện tại để root. Cài đặt môi trường (như PATH) vẫn giữ nguyên.

sudo -i tạo ra một môi trường trong lành như thể root vừa đăng nhập.

Sự khác biệt là đáng chú ý hơn nếu bạn sử dụng người dùng khác. Sau sudo su bobbạn sẽ là bob, nhưng ở cùng một nơi. Sau khi sudo -i -u bobbạn sẽ là bob, trong thư mục chính của bob, với vỏ mặc định của bob và với bob .profilevà bất kỳ tập lệnh đăng nhập nào khác đã được chạy.

Xem man sudođể biết thêm chi tiết về những gì -ikhông. Thật không may, man sulà ánh sáng trên các chi tiết.


Đã tìm thấy phiên bản man su(từ đăng nhập-1: 4.1.4.2 + svn3283-3ubfox5.1) có nội dung như sau:

Đặt lại $ PATH theo các tùy chọn /etc/login.defs ENV_PATH hoặc ENV_SUPATH (xem bên dưới);

$ IFS đặt lại thành tên <không gian> <tab> <newline>, nếu được đặt.

Lưu ý rằng hành vi mặc định cho môi trường là như sau:

Các biến môi trường $ HOME, $ SHELL, $ USER, $ LOGNAME, $ PATH và $ IFS được đặt lại.

Nếu --login không được sử dụng, môi trường được sao chép, ngoại trừ các biến ở trên.

Nếu --login được sử dụng, các biến môi trường $ TERM, $ COLORTERM, $ HIỂN THỊ và $ XAUTHORITY sẽ được sao chép nếu chúng được đặt.

Các môi trường khác có thể được thiết lập bởi các mô-đun PAM.

Vì vậy, liệu và mức độ sudo suthay đổi môi trường phụ thuộc vào phân phối và thiết lập của bạn. Do đó sudo -ivề mặt lý thuyết là di động hơn.


su không thay đổi cài đặt môi trường và có thể được sử dụng để mô phỏng thông tin đăng nhập bằng cách sử dụng -hoặc -l. Ngay cả khi không có -l, $PATH được thay đổi. Kiểm tra những tuyên bố này trước khi thực hiện chúng! (Ý của bạn là PWDvẫn giữ nguyên?)
Kyle Strand

Câu hỏi thực sự là, có sự khác biệt giữa sudo su -sudo -i?
Kyle Strand

1
Rõ ràng bạn đang suy nghĩ một chút về vấn đề này và thực sự đang thực hiện một số thử nghiệm trong vỏ, vì vậy tôi xin lỗi vì nhận xét "kiểm tra những tuyên bố" nhanh chóng này của tôi. Điều đó nói rằng, trên hệ thống của tôi, tôi quan sát thấy rằng $PATHnó đã thay đổi khi tôi sử dụng sumà không có sudo(sử dụng mật khẩu gốc). Theo info su(có thể là một điều tốt hơn để liên kết đến trong câu trả lời của bạn), suthực sự có đọc mục nhập mật khẩu cho người dùng mà bạn đang trở thành. Có thể $PATHthay đổi tôi đang quan sát là phụ thuộc vào hệ thống (Tôi đang sử dụng Debian 7).
Kyle Strand

1
Hừm. Của tôi man su(dài hơn so với cái bạn liên kết) nói rằng đó là một phần của shadow-utils 4.1.5.1. manTrang của tôi cũng nói rằng $PATHđược đặt ngay cả khi --preserve-environmentđược sử dụng. Vì vậy, tôi đoán nó thực sự chỉ là một sự khác biệt giữa các phiên bản khác nhau su.
Kyle Strand

1
Hành vi cũng bị ảnh hưởng bởi cấu hình PAM của bạn. /etc/pam.d/sudo/etc/pam.d/sucó thể được thiết lập để làm những việc hoàn toàn khác nhau hoặc chính xác.
Ngừng làm hại Monica

7

Vấn đề chính là một trong những thiết lập môi trường lành mạnh (không phải vậy).

Sử dụng sudo sushell mới nhận được môi trường của nó từ người dùng phát lệnh - có thể có vấn đề.

Với sudo -ibạn có được một vỏ gốc sạch.

Xem ghi chú đặc biệt về sudo và shell

Vẫn còn để quan sát rằng hiếm khi cần thiết để tạo một vỏ gốc.


"Ghi chú đặc biệt" mà bạn liên kết để nói sudo -ilà tương tự sudo su -, thực tế không nhận được môi trường từ người dùng ban hành lệnh.
Kyle Strand

@KyleStrand thx vì đã chỉ ra này - đó là một lỗi đánh máy, câu hỏi thực sự là về sudo suvs sudo -i.
guntbert
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.