Câu hỏi 'sudo su -' vs 'sudo -i' vs 'sudo / bin / bash' - khi nào nó được sử dụng, hay nó quan trọng?


Khi tôi đang làm một cái gì đó mà yêu cầu root được gõ vào hàng chục lần liên tiếp, tôi thích chuyển phiên của tôi sang một phiên gốc. Trong các hướng dẫn và hướng dẫn khác nhau mà tôi đã sử dụng trên Internet, tôi thấy sudo su, sudo su -, sudo -i và sudo /bin/bash đang được sử dụng để mở một phiên gốc, nhưng tôi không rõ ràng về sự khác biệt giữa các phiên này và khi nào hoặc nếu sự khác biệt đó có quan trọng hay không.

Ai đó có thể xóa nó cho tôi không?


196
2017-11-12 23:30


gốc


Bạn quên hỏi về sudo -s và sudo su. - Radu Rădeanu
Liên quan: Sự khác biệt giữa “su”, “sudo -s”, “sudo -i” - Radu Rădeanu
Liên quan: Sự khác nhau giữa lệnh 'sudo command' và 'sudo sh là gì? - Radu Rădeanu
Liên quan: Sự khác biệt chức năng giữa sudo su và sudo -i là gì? - Radu Rădeanu
@ RaduRădeanu Khi tôi gõ câu hỏi trong tôi xem xét các câu hỏi được đề xuất và không ai trong số những người thực sự giải quyết câu hỏi hoàn chỉnh của tôi. Điều này cũng đúng cho các câu hỏi bạn đã liên kết. Mặc dù chúng chứa rất nhiều thông tin mới cho tôi và cảm ơn bạn vì đã liên kết với chúng, tôi thấy chúng không hoàn chỉnh như sự hỗn loạn của người dùng trả lời dưới đây, điều này còn phù hợp hơn với những gì tôi đang tìm kiếm. - Paul


Các câu trả lời:


Để giải thích điều này, bạn cần phải biết những gì các chương trình làm:

su - Lệnh su được sử dụng để chuyển sang người dùng khác (S phù thủy bạn ser), nhưng bạn cũng có thể chuyển sang người dùng root bằng cách gọi lệnh không có tham số. su yêu cầu bạn nhập mật khẩu của người dùng để chuyển đổi, sau khi nhập mật khẩu bạn đã chuyển sang môi trường của người dùng.

sudo - - sudo có nghĩa là để chạy một lệnh duy nhất với quyền root. Nhưng không thích su nó sẽ nhắc bạn nhập mật khẩu của người dùng hiện tại. Người dùng này phải ở trong tệp sudoers (hoặc một nhóm nằm trong tệp sudoers). Theo mặc định, Ubuntu "nhớ" mật khẩu của bạn trong 15 phút, do đó bạn không phải nhập mật khẩu của mình mỗi lần.

bash - Giao diện văn bản để tương tác với máy tính. Điều quan trọng là phải hiểu sự khác biệt giữa vỏ đăng nhập, không đăng nhập, tương tác và không tương tác:

  • login shell: Một shell đăng nhập đăng nhập bạn vào hệ thống như một người dùng được chỉ định, cần thiết cho việc này là tên người dùng và mật khẩu. Khi bạn nhấn ctrl+alt+F1 để đăng nhập vào một thiết bị đầu cuối ảo bạn nhận được sau khi đăng nhập thành công một vỏ đăng nhập.
  • shell không đăng nhập: Một shell được thực hiện mà không cần đăng nhập, cần thiết cho điều này là một người dùng hiện đang đăng nhập. Khi bạn mở một thiết bị đầu cuối đồ họa trong gnome nó là một vỏ không đăng nhập.
  • tương tác shell: Một vỏ (đăng nhập hoặc không đăng nhập), nơi bạn có thể tương tác gõ hoặc ngắt lệnh. Ví dụ như một thiết bị đầu cuối gnome.
  • shell không tương tác: A (sub) shell có thể chạy từ một quá trình tự động. Bạn sẽ thấy cả đầu vào lẫn đầu ra.

sudo su Cuộc gọi sudo với lệnh su. Bash được gọi là shell 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 thư mục:

user@host:~$ sudo su
root@host:/home/user#

sudo su - Lần này nó là một vỏ đăng nhập, vì vậy /etc/profile, .profile và .bashrc được thực hiện 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 Nó gần giống như sudo su - Tùy chọn -i (mô phỏng đăng nhập ban đầu) chạy vỏ đượ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 như là 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 là .login sẽ được đọc và thực hiện bởi trình bao.

sudo /bin/bash Điều này có nghĩa là bạn gọi sudo với lệnh /bin/bash. /bin/bash được bắt đầu dưới dạng vỏ không đăng nhập để tất cả các tệp chấm không được thực thi, nhưng tự bash đọc .bashrc của người dùng đang 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 người chủ. Vì vậy, bạn là người chủ, nhưng trong môi trường của người sử dụng gọi điện thoại.

sudo -sđọc $SHELL biến và thực thi nội dung. Nếu $SHELL chứa đựng /bin/bash nó gọi sudo /bin/bash (xem ở trên).

Kiểm tra: Để kiểm tra xem bạn có đang ở trong shell đăng nhập hay không (chỉ hoạt động trong bash vì shopt là lệnh nội trang):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'

258
2017-11-13 09:43



Chỉ cần làm rõ: sudo cho phép người dùng được phép thực hiện lệnh làm superuser hoặc người dùng khác. Dù sao, 1 cho nỗ lực của bạn. - Radu Rădeanu
@chaos Cảm ơn bạn vì câu trả lời tuyệt vời này! Nó chủ yếu trả lời các câu hỏi của tôi, vì vậy tôi đã đi trước và đánh dấu câu hỏi được trả lời, nhưng tôi không hiểu khi nào nó muốn chạy một trình bao đặc biệt. Tôi thực sự chỉ sử dụng Ubuntu thông qua dòng lệnh và tôi tìm thấy cách sử dụng phổ biến nhất của tôi để mở một root phiên người dùng (so với sử dụng sudo) là khi tôi đang làm điều gì đó đòi hỏi phải sử dụng nhiều root đặc quyền, chẳng hạn như khi cài đặt một cái gì đó mới hoặc thực hiện một cấu hình lại chính. Tôi đã sử dụng sudo /bin/bash, nhưng hình như phương pháp đó có một đoạn rap tồi vì một lý do nào đó mà tôi không hiểu. - Paul
Ngoài ra, nó là "đúng" hơn để nói rằng su là viết tắt của người dùng chuyển đổi, chứ không phải là siêu người dùng. I E. chạy tập lệnh php: su www-data /usr/share/script.php hoặc chỉ su www-data cho trình tương tác. Nhưng su không có bất kỳ tên người dùng nào sẽ là tài khoản root (super user). - oblivian
Hỗn loạn - "shopt -q login_shell && echo 'Đăng nhập shell' || echo 'Không có đăng nhập shell'" Những loại gợi ý tôi thấy thường xuyên, nhưng tại sao làm cho nó quá lâu? Toán tử && có nghĩa là nếu mã thoát 0 thì "thực hiện lệnh tiếp theo" và các đường ống kép (||) có nghĩa là khác (nếu không phải 0) thì thực hiện lệnh này. Vì vậy, những gì nó về cơ bản là nói nếu exit code 0 thì echo "Login Shell", nếu exit code 1 (fail) thì echo "No login". Tại sao không chỉ là "shopt -q login_shell; echo $?" $? có nghĩa là mã kết quả / thoát của lệnh trước đó. Trong hầu hết mọi trường hợp, nếu không phải tất cả các chương trình 0 đều có nghĩa là thành công, 1 hoặc nhiều phương tiện bị lỗi. Vì vậy, nếu tiếng vang là 0 = thành công ... - oblivian
@Paul: sudo -i Được gợi ý. Đọc ở đây: ubuntuforums.org/showthread.php?t=1817402 và đây: unix.stackexchange.com/questions/98531/… - Marco Sulla