Câu trả lời:
Trong thực tế, cả hai sẽ làm cho bạn trở thành siêu người dùng. Tuy nhiên, họ làm những việc hơi khác nhau, theo những cách hơi khác nhau.
Đầu tiên, su -
chuyển bạn sang một vỏ đăng nhập, trong khi sudo -s
không. Trên thực tế, điều này thường có nghĩa rằng các biến môi trường của bạn sẽ không được chuyển sang root
's cho sudo -s
. Lưu ý rằng bạn có thể chạy chỉ su
để không nhận được vỏ đăng nhập hoặc sudo -i
để có được vỏ đăng nhập [không có trong tất cả các phiên bản].
Thứ hai, su
và su -
chuyển sang một người dùng mới bằng cách yêu cầu bạn xác thực là người dùng mới. sudo -s
và sudo -i
(và chỉ thường xuyên sudo foo
) cho phép bạn chạy một lệnh mà bạn được ủy quyền trước [xem /etc/sudoers
], có thể bằng cách yêu cầu bạn xác nhận ID hiện tại của mình .
Nếu bạn muốn thực sự dễ thương, bạn cũng có thể chạy sudo su -
, nó sẽ yêu cầu đăng nhập với quyền root ( su -
) do người dùng root ( sudo
phần) điều hành.
Nếu người dùng root bị khóa (chẳng hạn như trên Ubuntu), bạn sẽ không thể đăng nhập bằng root bằng cách sử dụng su
. Trong trường hợp này, bạn sẽ cần sử dụng sudo -s
hoặcsudo -i
su -s
Sẽ chuyển sang người dùng (trong trường hợp này là root) và khởi chạy shell mà bạn chỉ định hoặc một trong vài phương pháp xác định shell khác. Điều này rất hữu ích nếu bạn muốn sử dụng zsh hoặc shell khác làm root thực sự nhanh chóng ... và vì một số lý do bạn không sử dụng sudo.
sudo -s
Chỉ cần thực thi một shell bằng sudo, nó sẽ cung cấp cho bạn một shell root. Bạn có thể vượt qua một cái vỏ cho nó là tốt.
su -s cũ hơn, già hơn nhiều so với lệnh sudo -s. Tôi đoán là nhà phát triển đang cố gắng làm cho nó dễ dàng nhất có thể để chuyển sang sử dụng sudo.
su là một lệnh để thay đổi người dùng khác, để chạy shell hoặc thực thi một lệnh cụ thể. Bạn phải xác thực là người dùng khác. Nếu bạn muốn su để root, bạn cần mật khẩu root.
sudo là một lệnh để thực thi một lệnh khác (tùy chọn shell) là một người dùng khác. Bạn phải xác thực là người dùng của riêng bạn . Quyền sử dụng sudo (và những điều cụ thể bạn có thể làm với nó) được chỉ định bởi quản trị viên trong tệp sudoers.
Nếu bạn cấp cho ai đó quyền truy cập vào su (ví dụ: bằng cách cung cấp cho họ mật khẩu gốc), thì họ có thể làm bất cứ điều gì với nó - chạy các lệnh khác, mở shell, thay đổi mật khẩu, đăng nhập từ xa qua ssh, v.v. Về cơ bản, bạn cho phép họ truy cập vào tài khoản khác, với 'su' chỉ là một điều họ có thể làm với tài khoản đó.
sudo là hạt mịn hơn nhiều. Bạn có thể cấp đặc quyền cho người dùng hoặc cho một nhóm. Bạn có thể cho phép người dùng hoặc nhóm sudo trong một khung thời gian nhất định (ví dụ: Thứ Hai đến Thứ Sáu, 9 giờ sáng đến 5 giờ chiều). Bạn có thể chỉ định một danh sách cụ thể các lệnh mà họ được phép chạy (ví dụ: chỉ / usr / local / bin / run_backup) hoặc bạn có thể chỉ định một người dùng cụ thể mà họ được phép chạy các lệnh như (ví dụ: www, sao lưu, nhân viên, v.v. ).
Bên cạnh tính linh hoạt của nó, sudo là một giải pháp tốt hơn trong mọi trường hợp, bởi vì nó không yêu cầu quyền truy cập vào bất cứ thứ gì mà người dùng không có. Nếu bạn cấp cho ai đó quyền truy cập sudo, bạn có thể thu hồi nó bằng cách xóa dòng của họ trong tệp sudoers hoặc xóa họ khỏi nhóm sudoers. Nếu bạn xóa tài khoản của họ, quyền truy cập của họ sẽ biến mất.
Nếu bạn cung cấp cho họ mật khẩu gốc, thậm chí giả sử họ không làm gì khó chịu với nó, thì họ sẽ biết nó mãi mãi. Nếu bạn có nhiều người cần quyền truy cập root cho các tác vụ quản trị, điều này có nghĩa là thay đổi tất cả mật khẩu gốc bất cứ khi nào ai đó rời đi hoặc cho rằng họ có quyền truy cập đầy đủ vào hệ thống của bạn sau khi bạn rời khỏi.
Từ Wikipedia :
su (viết tắt của người dùng thay thế hoặc người dùng chuyển đổi) là một lệnh Unix được sử dụng để chạy shell của người dùng khác mà không cần đăng xuất.
Một lệnh có liên quan được gọi là sudo thực thi một lệnh như một người dùng khác nhưng quan sát một tập các ràng buộc về việc người dùng nào có thể thực thi lệnh nào mà người dùng khác (thường trong tệp cấu hình có tên / etc / sudoers, có thể chỉnh sửa tốt nhất bằng lệnh visudo). Không giống như su, sudo xác thực người dùng bằng mật khẩu của chính họ thay vì mật khẩu của người dùng đích (để cho phép ủy quyền các lệnh cụ thể cho người dùng cụ thể trên các máy chủ cụ thể mà không chia sẻ mật khẩu giữa họ và trong khi giảm thiểu rủi ro của bất kỳ thiết bị đầu cuối không giám sát nào).
Một điều không được nói đầy đủ là đây: cái nào bạn có thể sử dụng thường phụ thuộc vào phân phối bạn đang sử dụng và ai điều hành nó. Một hoặc khác ( su
hoặc sudo
) có thể không được thiết lập để sử dụng đầy đủ theo mặc định. Vì vậy, ví dụ, như một số người đã đề cập, OS X và Ubuntu vô hiệu hóa tài khoản root ( su
) theo mặc định. Tương tự, Debian không cung cấp cho người dùng thông thường bất kỳ đặc quyền mặc định nào sudo
. (Trên tất cả các hệ thống này, bạn có thể thay đổi các mặc định này, nhưng chỉ khi bạn có một số loại đặc quyền quản trị để bắt đầu. Tôi cho rằng chúng ta đang nói về một tình huống không phải máy chủ và bạn quản trị máy vì chúng tôi đang sử dụng SU hơn SF, nhưng chỉ trong trường hợp.)
Cuối cùng, nếu bạn muốn sử dụng sudo
theo cách chi tiết hơn, bạn nên xem man sudoers
cách chỉnh sửa tệp / etc / sudoers . Tuy nhiên, bạn không bao giờ nên chỉnh sửa nó bằng tay. Sử dụng chương trình visudo - nó sẽ ngăn bạn lưu các chỉnh sửa của bạn trừ khi chúng ít nhất là lành mạnh. Đó là một biện pháp bảo vệ tuyệt vời chống lại các lỗi đơn giản có thể khóa bạn khỏi các đặc quyền quản trị viên của hệ thống của riêng bạn.
Trên các hệ thống mà tài khoản superuser bị vô hiệu hóa, chẳng hạn như Mac OS X, su
sẽ không hoạt động; sudo -s
sẽ.
Ngoài ra, nó xuất hiện không su -s
có sẵn, ít nhất là trên máy của tôi.
sudo
(thậm chí không được cài đặt).
Giới thiệu này có thể giúp bạn. su
là viết tắt su root
và bạn giữ quyền của mình với tư cách là người dùng khác vô thời hạn. Nguy hiểm hơn, nhưng cũng thuận tiện hơn nếu bạn đang thực hiện nhiều lệnh truy cập root trong một khoảng thời gian.
su về cơ bản sẽ tạo một vỏ đăng nhập mới với một đặc quyền người dùng (đăng nhập) khác, sudo sẽ tạm thời cho phép bạn thực thi lệnh bằng cách sử dụng người dùng mà bạn đã chỉ định. Trên một số UNIX như FreeBDS, không có tùy chọn '-s'.
sudo
không có đặc quyền mặc định cho người dùng thông thường. Trên các hệ thống đó,su
là lựa chọn duy nhất.