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.
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.
Câu trả lời:
Các sudo su
lệ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
sudo su
bạ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.
sudo
chạy su
dưới dạng root và root có thể su
cho 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.
sudo -i
Sẽ 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.
sudo su
chỉ 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 bob
bạn sẽ là bob, nhưng ở cùng một nơi. Sau khi sudo -i -u bob
bạ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 .profile
và 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ì -i
không. Thật không may, man su
là á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 su
thay đổ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 -i
về 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à PWD
vẫn giữ nguyên?)
sudo su -
và sudo -i
?
$PATH
nó đã thay đổi khi tôi sử dụng su
mà 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), su
thự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ể $PATH
thay đổi tôi đang quan sát là phụ thuộc vào hệ thống (Tôi đang sử dụng Debian 7).
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
. man
Trang 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
.
/etc/pam.d/sudo
và /etc/pam.d/su
có 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.
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 su
shell 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 -i
bạ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.
sudo -i
là 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.
sudo su
vs sudo -i
.