Giới thiệu về lệnh sudo trên Linux và hướng dẫn cách sử dụng


Đây là bài viết về quyền truy cập root, lệnh sudo, cách chạy lệnh bằng sudo và sự khác biệt giữa quyền sudo và root bằng tiếng Việt:

Root là gì?

Root là tài khoản siêu người dùng trong các hệ thống tương tự Unix như Linux. Đây là tài khoản đặc quyền có quyền truy cập cao nhất trên hệ thống, được sử dụng cho quản trị hệ thống. Tài khoản root/siêu người dùng này có id người dùng (UID) bằng 0, bất kể tên tài khoản là gì.

Tài khoản root có toàn quyền đối với toàn bộ hệ thống. Nó có thể thực hiện các thao tác như sửa đổi các phần cốt lõi của hệ thống, nâng cấp hệ thống, thay đổi cấu hình hệ thống, khởi động, dừng và khởi động lại tất cả các dịch vụ đang chạy trên hệ thống.

Khi đăng nhập với tài khoản root, ký hiệu nhắc lệnh terminal sẽ thay đổi từ $ sang #. Ví dụ:

$ echo 'Đây là shell của người dùng bình thường'

echo ‘Đây là shell của root’

Sudo là gì?

Lệnh sudo (viết tắt của superuser do) là lệnh cho phép người dùng thực thi các lệnh với quyền root hoặc người dùng khác. Nó cung cấp một cách hiệu quả để cấp một số quyền người dùng nhất định sử dụng các lệnh hệ thống cụ thể hoặc chạy các script với quyền root.

Mặc dù hơi giống với lệnh su, sudo yêu cầu mật khẩu của người dùng đã đăng nhập để xác thực, thay vì mật khẩu của người dùng mục tiêu mà su yêu cầu. Sudo cũng không tạo ra root shell như su; thay vào đó, nó chạy chương trình hoặc lệnh với đặc quyền nâng cao.

Với sudo, quản trị viên có thể thực hiện các hành động sau:

  • Cấp cho người dùng hoặc nhóm người dùng khả năng chạy một số lệnh nhất định với đặc quyền nâng cao hoặc root.
  • Xem nhật ký ID người dùng của mỗi người dùng sử dụng sudo.
  • Kiểm soát lệnh nào mà người dùng có thể sử dụng trên hệ thống máy chủ.
  • Sudo lưu lại tất cả các lệnh và đối số được thực thi trong tệp /var/log/auth.log, có thể phân tích trong trường hợp có sự cố xảy ra.

Chạy lệnh với sudo

Để chạy lệnh với sudo, thêm sudo vào phía trước lệnh:

sudo [command]

Nó sẽ yêu cầu nhập mật khẩu, nhập mật khẩu tài khoản của bạn và nhấn Enter. Sau đó, lệnh sẽ được chạy với quyền nâng cao.

Sudo so với Root

Nguyên tắc đặc quyền tối thiểu là một khái niệm bảo mật thông tin và máy tính cho rằng cần cấp cho các chương trình và người dùng đặc quyền tối thiểu cần thiết để thực hiện một tác vụ.

Khi đăng nhập với tài khoản root, mọi lệnh nhập vào terminal đều chạy với đặc quyền cao nhất trên hệ thống, vi phạm nguyên tắc đặc quyền tối thiểu. Một lệnh đơn giản như rm có thể được sử dụng để xóa các thư mục hoặc tệp gốc quan trọng mà không cảnh báo người dùng khi không cố ý.

Ví dụ, nếu bạn cố gắng xóa thư mục gốc /etc bằng:

rm -rf /etc

Bạn sẽ bị từ chối quyền vì bạn đăng nhập với tài khoản người dùng bình thường. Nhưng khi đăng nhập với root, sẽ không có thông báo nào, và toàn bộ thư mục sẽ bị xóa – điều này có thể làm hỏng hệ thống vì các tệp cấu hình cần thiết để chạy hệ thống được lưu trữ trong /etc. Bạn cũng có thể vô tình định dạng sai ổ đĩa, và hệ thống sẽ không cảnh báo bạn.

Lỗi này cũng mở rộng sang việc chạy mã hoặc ứng dụng với tư cách root; một lỗi nhỏ trong ứng dụng có thể xóa một số tệp hệ thống vì ứng dụng đang chạy với đặc quyền cao nhất.

Sudo cung cấp quyền kiểm soát chi tiết. Nó chỉ cấp quyền nâng cao cho một chương trình cụ thể yêu cầu nó. Bạn biết chương trình nào đang chạy với đặc quyền nâng cao, thay vì làm việc với root shell (chạy mọi lệnh với đặc quyền root). Sudo cũng có thể được cấu hình để chạy lệnh với tư cách người dùng khác, chỉ định người dùng và nhóm nào được phép chạy lệnh bằng sudo, hoặc đặt thời gian chờ cho việc chạy chương trình với đặc quyền root bằng cách chỉnh sửa tệp sudoers của bạn.

Do đó, không khuyến khích chạy lệnh với root shell vì cơ hội làm hỏng hệ thống của bạn cao hơn nhiều. Nếu bạn cần đặc quyền cao hơn hoặc root để chạy một lệnh, hãy sử dụng sudo để chắc chắn chỉ có lệnh đó đang chạy với đặc quyền root. Để biết thêm thông tin, hãy xem trang chủ sudo.

Tạo người dùng sudo trên các hệ điều hành

Tạo người dùng sudo trên Ubuntu/Debian

  • Cài đặt sudo nếu chưa có:
apt install sudo
  • Tạo user mới:
adduser [tên user]
  • Thêm user vào nhóm sudo:
adduser [tên user] sudo

Tạo người dùng sudo trên CentOS/RHEL/Fedora

  • Tạo user mới:
adduser [tên user]
  • Thêm user vào nhóm wheel:
usermod -aG wheel [tên user]
  • Mở file /etc/sudoers và bỏ comment dòng %wheel ALL=(ALL) ALL

Tạo người dùng sudo trên Arch Linux

  • Cài đặt sudo:
pacman -S sudo
  • Tạo user mới:
useradd -m [tên user]
  • Thêm user vào nhóm wheel:
usermod -aG wheel [tên user]
  • Mở file /etc/sudoers và bỏ comment dòng %wheel ALL=(ALL) ALL

Tìm hiểu thêm về tệp sudoers

Sudo sử dụng chính sách bảo mật sudo mặc định và lưu cấu hình đặc biệt trong tệp /etc/sudoers. Tệp này có thể được sử dụng để kiểm soát quyền truy cập và thời gian chờ nhắc mật khẩu.

Lưu ý: Bạn phải có đặc quyền nâng cao để xem tệp sudoers

Mở tệp /etc/sudoers, nó sẽ trông như sau:

# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/
sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "@include" directives:

@includedir /etc/sudoers.d

Các quy tắc cấu hình sudoers

Tóm lại, sudo cung cấp cách quản lý đặc quyền người dùng một cách linh hoạt và an toàn hơn so với sử dụng trực tiếp tài khoản root. Hy vọng bài viết giúp ích cho bạn trong việc hiểu rõ hơn về sudo!