Sudo và su khác nhau như thế nào?

Sudo và su khác nhau như thế nào?

Trong một trong những bài viết trước, dangkyhosting.com đã thảo luận chi tiết về lệnh ‘sudo’. Ở phần cuối của hướng dẫn đó, có một đề cập đến một lệnh tương tự khác ‘su’ trong một ghi chú nhỏ. Và trong bài viết này, chúng ta sẽ thảo luận chi tiết về lệnh ‘su’ cũng như nó khác với lệnh ‘sudo’ như thế nào.

Nhưng trước khi chúng tôi làm điều đó, xin lưu ý rằng tất cả các hướng dẫn và ví dụ được đề cập trong hướng dẫn này đã được thử nghiệm trên Ubuntu 18.04 LTS và Debian 10.

Lệnh su trong Linux

Công việc chính của lệnh su là cho phép bạn chuyển sang một số người dùng khác trong phiên đăng nhập. Nói cách khác, công cụ cho phép bạn giả sử danh tính của một số người dùng khác mà không cần phải đăng xuất và sau đó đăng nhập (với tư cách là người dùng đó).

Lệnh su chủ yếu được sử dụng để chuyển sang tài khoản superuser / root (vì các đặc quyền gốc thường được yêu cầu khi làm việc trên dòng lệnh), nhưng – như đã đề cập – bạn có thể sử dụng nó để chuyển sang bất kỳ người dùng không phải root nào khác như tốt.

Đây là cách bạn có thể sử dụng lệnh này để chuyển sang người dùng root:

Các cmmand su không có tùy chọn dòng lệnh

Mật khẩu mà lệnh này yêu cầu cũng là của người dùng root. Vì vậy, nói chung, lệnh su yêu cầu bạn nhập mật khẩu của người dùng đích. Sau khi nhập đúng mật khẩu, công cụ sẽ bắt đầu một phiên con bên trong phiên hiện có trên thiết bị đầu cuối.

su –

Có một cách khác để chuyển sang người dùng root: chạy lệnh ‘su -‘:

Lệnh su

Bây giờ, sự khác biệt giữa ‘su’ và ‘su -‘ là gì? Chà, cái trước giữ môi trường của người dùng cũ / gốc ngay cả sau khi chuyển sang root đã được tạo, trong khi cái sau  tạo ra một môi trường mới ( như được quy định bởi ~ / .bashrc của người dùng root) , tương tự như trường hợp khi bạn đăng nhập rõ ràng với tư cách người dùng root từ màn hình đăng nhập.

QUAN TRỌNG cho người dùng Debian 10. Biến PATH của người dùng root khác với Debian 10 khi sử dụng ‘su’ so với ‘su -‘, các thư mục như / sbin bị thiếu khi chỉ sử dụng ‘su’, điều đó có nghĩa là bạn có thể gặp lỗi không tìm thấy lệnh ngay cả đối với quản trị hệ thống cơ bản các lệnh. Vì vậy, luôn luôn sử dụng ‘su -‘ trên Debian 10 để trở thành người dùng root.

Trang của ‘su’ cũng cho thấy rõ:

The optional argument - may be used to provide an environment similar to what the user would expect had the user logged in directly.

Vì vậy, bạn sẽ đồng ý rằng đăng nhập bằng ‘su -‘ có ý nghĩa hơn. Nhưng khi lệnh ‘su’ cũng tồn tại, người ta có thể tự hỏi khi nào nó hữu ích. Đoạn trích sau – được lấy từ trang web ArchLinux wiki  – đưa ra một ý tưởng hay về lợi ích và cạm bẫy của lệnh ‘su’:

  • Đôi khi, người quản trị hệ thống có thể sử dụng tài khoản shell của người dùng thông thường thay vì tài khoản của người dùng. Cụ thể, đôi khi cách hiệu quả nhất để giải quyết vấn đề của người dùng là đăng nhập vào tài khoản của người dùng đó để tái tạo hoặc gỡ lỗi sự cố.
  • Tuy nhiên, trong nhiều tình huống, điều đó là không mong muốn, hoặc thậm chí có thể nguy hiểm, đối với người dùng root được vận hành từ tài khoản shell của người dùng thông thường và với các biến môi trường của tài khoản đó thay vì từ chính nó. Mặc dù vô tình sử dụng tài khoản shell của người dùng thông thường, root có thể cài đặt chương trình hoặc thực hiện các thay đổi khác đối với hệ thống không có kết quả giống như khi chúng được tạo trong khi sử dụng tài khoản root. Chẳng hạn, một chương trình có thể được cài đặt có thể cung cấp sức mạnh cho người dùng thông thường để vô tình làm hỏng hệ thống hoặc có được quyền truy cập trái phép vào dữ liệu nhất định.

Lưu ý: Trong trường hợp bạn muốn truyền thêm đối số sau – trong ‘su -‘, thì bạn nên sử dụng tùy chọn dòng lệnh -l mà lệnh cung cấp (thay vì -). Đây là định nghĩa của – và tùy chọn dòng lệnh -l:

-, -l, --login
Provide an environment similar to what the user would expect had the user logged in directly.
When - is used, it must be specified as the last su option. The other forms (-l and --login) do not have this restriction.

su -c

Có một tùy chọn khác của lệnh ‘su’ đáng được đề cập: -c. Nó cho phép bạn cung cấp một lệnh mà bạn muốn chạy sau khi chuyển sang người dùng đích.

Trang nam của ‘su’ giải thích nó là:

-c, --command COMMAND
Specify a command that will be invoked by the shell using its -c.

The executed command will have no controlling terminal. This option cannot be used to execute interactive programs which need a controlling TTY.

Xem xét mẫu ví dụ sau:

su [target-user] -c [command-to-run]

Vì vậy, trong trường hợp này, ‘lệnh chạy’ sẽ được thực thi như sau:

 -c [command-to-run]

Trong đó ‘shell’ sẽ được thay thế bằng shell ‘user-user’ được xác định trong  tệp / etc / passwd .

Sudo vs Su

Bây giờ vì chúng ta cũng đã thảo luận về những điều cơ bản của lệnh ‘su’, nên đã đến lúc chúng ta thảo luận về sự khác biệt giữa các lệnh ‘sudo’ và ‘su’.

Mật khẩu

Sự khác biệt chính giữa hai loại này là mật khẩu họ yêu cầu: trong khi ‘sudo’ yêu cầu mật khẩu người dùng hiện tại, ‘su’ yêu cầu bạn nhập mật khẩu người dùng root.

Rõ ràng, ‘sudo’ là một sự thay thế tốt hơn giữa hai bên liên quan đến an ninh. Ví dụ, hãy xem xét trường hợp máy tính được sử dụng bởi nhiều người dùng cũng yêu cầu quyền truy cập root. Sử dụng ‘su’ trong kịch bản như vậy có nghĩa là chia sẻ mật khẩu gốc với tất cả chúng, đây không phải là một cách làm tốt.

Ngoài ra, trong trường hợp bạn muốn thu hồi siêu người dùng / quyền truy cập root của một người dùng cụ thể, cách duy nhất là thay đổi mật khẩu gốc và sau đó phân phối lại mật khẩu root mới trong số tất cả những người dùng khác.

Mặt khác, với Sudo, bạn có thể xử lý cả hai tình huống này một cách dễ dàng. Cho rằng ‘sudo’ yêu cầu người dùng nhập mật khẩu của riêng họ, bạn không cần chia sẻ mật khẩu gốc cho tất cả người dùng ở nơi đầu tiên. Và để ngăn người dùng cụ thể truy cập các đặc quyền gốc, tất cả những gì bạn phải làm là điều chỉnh mục tương ứng trong tệp ‘sudoers’.

Hành vi mặc định

Sự khác biệt khác giữa hai lệnh là trong hành vi mặc định của chúng. Mặc dù ‘sudo’ chỉ cho phép bạn chạy một lệnh với các đặc quyền nâng cao, lệnh ‘su’ sẽ khởi chạy một lớp vỏ mới, cho phép bạn chạy bao nhiêu lệnh như bạn muốn với quyền root cho đến khi bạn thoát khỏi lệnh bán đó.

Vì vậy, hành vi mặc định của lệnh ‘su’ có khả năng gây nguy hiểm cho khả năng người dùng có thể quên thực tế rằng họ đang làm việc với quyền root và có thể vô tình thực hiện một số thay đổi không thể phục hồi (chẳng hạn như chạy sai lệnh ‘rm -rf’ danh mục). Để thảo luận chi tiết về lý do tại sao nó không được khuyến khích để luôn luôn hoạt động như root, hãy vào đây .

Ghi nhật ký

Mặc dù các lệnh chạy qua ‘sudo’ được thực thi như người dùng đích (theo mặc định là ‘root’), chúng được gắn thẻ với tên người dùng của sudoer. Nhưng trong trường hợp ‘su’, không thể theo dõi trực tiếp những gì người dùng đã làm sau khi họ muốn vào tài khoản root.

Linh hoạt

Lệnh ‘sudo’ linh hoạt hơn nhiều ở chỗ bạn thậm chí có thể giới hạn các lệnh mà bạn muốn sudo-ers có quyền truy cập. Nói cách khác, người dùng có quyền truy cập vào ‘sudo’ chỉ có thể được cấp quyền truy cập vào các lệnh được yêu cầu cho công việc của họ. Tuy nhiên, với ‘su’ điều đó là không thể – bạn có đặc quyền làm mọi thứ hoặc không có gì.

Sudo su

Có lẽ do các rủi ro tiềm ẩn liên quan đến việc sử dụng ‘su’ hoặc đăng nhập trực tiếp dưới quyền root, một số bản phân phối Linux – như Ubuntu – vô hiệu hóa  tài khoản người dùng root theo mặc định. Người dùng được khuyến khích sử dụng ‘sudo’ bất cứ khi nào họ cần quyền root.

Tuy nhiên, bạn vẫn có thể thực hiện ‘su’ thành công, tức là không cần nhập mật khẩu gốc. Tất cả bạn cần làm là chạy lệnh sau:

sudo su

Vì bạn đang chạy lệnh với ‘sudo’, bạn sẽ chỉ được yêu cầu nhập mật khẩu của mình. Vì vậy, một khi đã xong, lệnh ‘su’ sẽ được chạy dưới quyền root, nghĩa là nó sẽ không yêu cầu bất kỳ mật khẩu nào.

PS : Trong trường hợp bạn muốn kích hoạt tài khoản root trên hệ thống của mình (mặc dù điều đó không được khuyến khích vì bạn luôn có thể sử dụng ‘sudo’ hoặc ‘sudo su’), bạn sẽ phải đặt mật khẩu gốc theo cách thủ công, bạn có thể làm điều đó sử dụng lệnh sau:

sudo passwd root

Phần kết luận

Cả điều này cũng như hướng dẫn trước đây của chúng tôi (tập trung vào ‘sudo’) sẽ cho bạn ý tưởng tốt về các công cụ có sẵn cho phép bạn thực hiện các tác vụ yêu cầu đặc quyền leo thang (hoặc một bộ hoàn toàn khác). Trong trường hợp bạn có điều gì đó để chia sẻ về ‘su’ hoặc ‘sudo’ hoặc muốn chia sẻ kinh nghiệm của riêng bạn, bạn có thể làm điều đó trong các bình luận bên dưới.

Author Image
Hoàng Tùng

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *