Với su, bạn trở thành một người dùng khác - root theo mặc định, nhưng có khả năng là một người dùng khác. Nếu bạn nói su -, môi trường của bạn cũng được thay thế bằng môi trường đăng nhập của người dùng đó, do đó những gì bạn thấy không thể phân biệt được khi đăng nhập với tư cách người dùng đó. Không có cách nào hệ thống có thể cho biết bạn làm gì trong khi suvới người dùng khác từ hành động của người dùng đó khi họ đăng nhập.
Mọi thứ rất khác với sudo:
Các lệnh bạn chạy qua sudo thực thi với tư cách là người dùng đích - theo mặc định, nhưng có thể thay đổi bằng -u- nhưng nó ghi nhật ký các lệnh bạn chạy qua nó, gắn thẻ chúng với tên người dùng của bạn để có thể gán lỗi sau đó. :)
sudorất linh hoạt. Ví dụ, bạn có thể giới hạn các lệnh mà một người dùng hoặc nhóm người dùng nhất định được phép chạy. Với su, đó là tất cả hoặc không có gì.
Tính năng này thường được sử dụng để xác định vai trò. Chẳng hạn, bạn có thể định nghĩa một nhóm "sao lưu" được phép chạy dumpvà tarmỗi nhóm cần truy cập root để sao lưu đúng cách vào đĩa hệ thống.
Tôi đề cập đến điều này ở đây bởi vì nó có nghĩa là bạn có thể cho ai đó sudođặc quyền mà không cần cho họ sudo -shoặc sudo bashkhả năng. Họ chỉ có quyền mà họ cần để thực hiện công việc của mình, trong khi đó suhọ đã chạy toàn bộ hệ thống. Tuy nhiên, bạn phải cẩn thận với điều này: nếu bạn cho ai đó khả năng nói sudo vi, chẳng hạn, họ có thể thoát ra vivà có sức mạnh tương tự như với sudo -s.
Bởi vì nó lấy mật khẩu của sudoer thay vì mật khẩu gốc, sudocô lập quyền giữa nhiều sudoers.
Điều này giải quyết một vấn đề hành chính su, đó là khi mật khẩu gốc thay đổi, tất cả những người phải biết sử dụng nó suđều phải nói. sudocho phép mật khẩu của sudoers thay đổi độc lập. Trên thực tế, thông thường khóa mật khẩu tài khoản người dùng root trên một hệ thống sudođể buộc tất cả các tác vụ sysadmin phải được thực hiện thông qua sudo. Trong một tổ chức lớn có nhiều sudoers đáng tin cậy, điều này có nghĩa là khi một trong những sysadins rời đi, bạn không phải thay đổi mật khẩu gốc và phân phối nó cho những quản trị viên còn lại.
Sự khác biệt chính giữa sudo bashvà sudo -slà -sngắn hơn và cho phép bạn truyền lệnh để thực thi trong trình bao mặc định của người dùng theo một số cách:
Bạn có thể nói sudo -s some-commandcái nào chạy some-commanddưới vỏ của bạn. Về cơ bản nó là tốc ký sudo $SHELL -c some-command.
Thay vào đó, bạn có thể chuyển các lệnh đến đầu vào tiêu chuẩn của shell sudo -s < my-shell-script. Bạn có thể sử dụng điều này với một di sản để gửi một số lệnh cho một sudocuộc gọi, tránh việc phải gõ sudoliên tục.
Cả hai hành vi đó là tùy chọn. Thông thường hơn, bạn cung cấp -smột mình, do đó, nó chỉ chạy vỏ người dùng của bạn một cách tương tác. Trong chế độ đó, nó khác với sudo bashở chỗ nó có thể chạy một lớp vỏ khác so với bash, vì nó trông đầu tiên trong SHELLbiến môi trường, và sau đó nếu không được đặt, ở cài đặt vỏ đăng nhập của người dùng, thường là trong /etc/passwd.
Shell chạy bằng sudo -skế thừa môi trường người dùng hiện tại của bạn. Nếu những gì bạn thực sự muốn là một môi trường sạch sẽ, như bạn nhận được ngay sau khi đăng nhập, thì điều bạn muốn thay vào đó là sudo -i, một sự bổ sung tương đối gần đây sudo. Nói đại khái, sudo -ilà sudo -snhư su -là su: nó reset tất cả ngoại trừ một vài biến môi trường trọng điểm và gửi cho bạn trở lại thư mục chính của người dùng. Nếu bạn cũng không cung cấp cho nó lệnh chạy dưới lớp vỏ đó thông qua đầu vào tiêu chuẩn hoặc sudo -i some-command, nó sẽ chạy lớp vỏ đó như một vỏ đăng nhập tương tác, vì vậy các tập lệnh khởi động trình bao của người dùng của bạn (ví dụ .bash_profile) sẽ được chạy lại.
Tất cả điều này làm cho sudo -ian toàn hơn đáng kể hơn sudo -s. Tại sao? Bởi vì nếu ai đó có thể sửa đổi môi trường của bạn trước đó sudo -s, họ có thể khiến các lệnh ngoài ý muốn được thực thi. Trường hợp rõ ràng nhất là sửa đổi SHELL, nhưng nó cũng có thể xảy ra ít trực tiếp hơn, chẳng hạn như thông qua PAGERnếu bạn nói man footrong khi bên dưới sudo -s.
Bạn có thể nói: "Nếu họ có thể sửa đổi PAGER, họ có thể sửa đổi PATH, và sau đó họ chỉ có thể thay thế một sudochương trình tà ác ", nhưng ai đó đủ hoang tưởng có thể nói /usr/bin/sudo /bin/bashđể tránh cái bẫy đó. Có lẽ bạn không hoang tưởng đến mức bạn cũng tránh được bẫy trong tất cả các biến môi trường dễ bị ảnh hưởng khác . Bạn có nhớ kiểm tra EDITOR, ví dụ, trước khi chạy bất kỳ lệnh VCS nào không? Như vậy sudo -i.
Vì sudo -icũng thay đổi thư mục làm việc của bạn thành thư mục chính của người dùng, bạn vẫn có thể muốn sử dụng sudo -scho những tình huống mà bạn biết bạn muốn ở lại cùng thư mục mà bạn đã cdvào khi bạn chạy sudo. Dù vậy, nó vẫn an toàn hơn sudo -ivà cdtrở lại nơi bạn đang ở.
sudo su -theo cách này bạn không cần mật khẩu gốc và-đảm bảo thư mục chính được đặt đúng.