Hiểu sự khác biệt giữa lệnh sudo và su trên Linux

theanh

Administrator
Nhân viên
Trong một trong những bài viết trước, chúng tôi đã thảo luận chi tiết về lệnh 'sudo'. Gần cuối hướng dẫn đó, có đề cập đến một lệnh tương tự khác là 'su' trong một ghi chú nhỏ. Vâng, trong bài viết này, chúng tôi sẽ thảo luận chi tiết về lệnh 'su' cũng như cách nó khác với lệnh 'sudo'.

Nhưng trước khi thực hiện, vui lòng 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 Ubuntu18.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ác công cụ này cho phép bạn giả định danh tính của một số người dùng khác mà không cần phải đăng xuất rồi đă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 siêu người dùng/root (vì thường yêu cầu quyền root khi làm việc trên dòng lệnh), nhưng - như đã đề cập - bạn cũng có thể sử dụng lệnh này để chuyển sang bất kỳ người dùng nào khác không phải root.

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



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 mục tiêu. Sau khi nhập đúng mật khẩu, công cụ sẽ bắt đầu một phiên phụ 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 -':



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

QUAN TRỌNG đối với người dùng Debian 10. Biến PATH của người dùng root khác nhau trên 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 lệnh không tìm thấy ngay cả đối với các lệnh quản trị hệ thống cơ bản. Vì vậy, hãy luôn sử dụng 'su -' trên Debian 10 để trở thành người dùng root.

Trang hướng dẫn của 'su' cũng nêu rõ:
Mã:
Đối số tùy chọn - có thể được sử dụng để cung cấp một môi trường tương tự như những gì người dùng mong đợi nếu người dùng đăng nhập trực tiếp.
Vì vậy, bạn sẽ đồng ý rằng việc đăng nhập bằng 'su -' có ý nghĩa hơn. Nhưng vì lệnh 'su' cũng tồn tại, người ta có thể tự hỏi khi nào thì điều đó hữu ích. Đoạn trích sau đây - được trích từ trang web wiki ArchLinux - cung cấp một ý tưởng hay về lợi ích và cạm bẫy của lệnh 'su':
  • Đôi khi, quản trị viên hệ thống có thể có lợi khi 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 chính mình. Đặc biệt, đô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 vấn đề.
  • Tuy nhiên, trong nhiều trường hợp, việc người dùng root 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ừ tài khoản của chính mình là không mong muốn hoặc thậm chí có thể nguy hiểm. Trong khi 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 mà sẽ không có cùng kết quả như khi chúng được thực hiện khi sử dụng tài khoản root. Ví dụ, một chương trình có thể được cài đặt để trao cho người dùng thông thường khả năng vô tình làm hỏng hệ thống hoặc truy cập trái phép vào một số 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ì -). Sau đây là định nghĩa của - và tùy chọn dòng lệnh -l:
Mã:
[B]-, -l, --login
[/b]Cung cấp một môi trường tương tự như những gì người dùng mong đợi nếu người dùng đăng nhập trực tiếp.

Khi sử dụng -, nó phải được chỉ định là tùy chọn su cuối cùng. Các dạng khác (-l và --login) không có hạn chế này.

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 mục tiêu.

Trang hướng dẫn của 'su' giải thích như sau:
Mã:
[B]-c, --command COMMAND[/b]
 Chỉ định một lệnh sẽ được shell gọi bằng cách sử dụng -c của nó.

Lệnh được thực thi sẽ không có thiết bị đầu cuối điều khiển. Không thể sử dụng tùy chọn này để thực thi các chương trình tương tác cần TTY điều khiển.
Xem xét mẫu ví dụ sau:
Mã:
su [target-user] -c [command-to-run]
Vì vậy, trong trường hợp này, 'command-to-run' sẽ được thực thi như sau:
Mã:
[shell]-c[command-to-run]
Trong đó 'shell' sẽ được thay thế bằng shell 'target-user' được định nghĩa trong tệp /etc/passwd.

Sudo so với Su​

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

Mật khẩu​

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

Rõ ràng là 'sudo' là lựa chọn thay thế tốt hơn giữa hai lệnh này xét về mặt bảo mật. Ví dụ, hãy xem xét trường hợp máy tính được nhiều người dùng sử dụng và họ cũng cần quyền truy cập root. Sử dụng 'su' trong trường hợp như vậy có nghĩa là chia sẻ mật khẩu root với tất cả những người dùng đó, đây không phải là cách làm tốt nói chung.

Hơn nữa, trong trường hợp bạn muốn thu hồi quyền truy cập superuser/root của một người dùng cụ thể, cách duy nhất là thay đổi mật khẩu root rồi phân phối lại mật khẩu root mới cho 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 trường hợp này một cách dễ dàng. Vì 'sudo' yêu cầu người dùng nhập mật khẩu của riêng họ, nên ngay từ đầu bạn không cần phải chia sẻ mật khẩu root cho tất cả người dùng. Và để ngăn một người dùng cụ thể truy cập các đặc quyền root, tất cả những gì bạn phải làm là chỉnh sửa mục tương ứng trong tệp 'sudoers'.

Hành vi mặc định​

Điểm khác biệt giữa hai lệnh này nằm ở hành vi mặc định của chúng. Trong khi 'sudo' chỉ cho phép bạn chạy một lệnh duy nhất với các đặc quyền nâng cao, lệnh 'su' khởi chạy một shell mới, cho phép bạn chạy nhiều lệnh tùy thích với các đặc quyền root cho đến khi bạn thoát khỏi lệnh đó một cách rõ ràng.

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

Ghi nhật ký​

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

Tính 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-er 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ần thiết cho công việc của họ. Tuy nhiên, với 'su' thì điều đó là không thể - bạn có đặc quyền làm mọi thứ hoặc không làm gì cả.

Sudo su​

Có lẽ do những rủi ro tiềm ẩn liên quan đến việc sử dụng 'su' hoặc ghi nhật ký trực tiếp dưới dạng 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 đặc 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 root. Tất cả những gì bạn cần làm là chạy lệnh sau:
Mã:
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, sau khi hoàn tất, lệnh 'su' sẽ được chạy dưới dạng 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 root theo cách thủ công, bạn có thể thực hiện việc này bằng lệnh sau:
Mã:
sudo passwd root

Kết luận​

Cả hướng dẫn này cũng như hướng dẫn trước đó của chúng tôi (tập trung vào 'sudo') sẽ cung cấp cho bạn ý tưởng hay 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 quyền nâng cao (hoặc một tập hợp hoàn toàn khác). Trong trường hợp bạn có điều gì muốn chia sẻ về 'su' hoặc 'sudo', hoặc muốn chia sẻ kinh nghiệm của riêng mình, bạn có thể bình luận bên dưới.
 
Back
Bên trên