Sudo là một lệnh trong các hệ điều hành tương tự Unix, cho phép người dùng thực thi lệnh với quyền của người dùng khác mà không cần phải đăng nhập vào tài khoản quản trị. Trong bài viết này, mình sẽ giải thích một cách đơn giản về lệnh sudo, ưu điểm so với lệnh su và cách bạn sử dụng lệnh trong công việc hàng ngày.
Những điểm chính
- Khái niệm Sudo: Hiểu rõ Sudo là gì, mục đích và tại sao nó là một công cụ quản trị hệ thống thiết yếu và an toàn.
- Cú pháp và tùy chọn: Nắm vững cú pháp cơ bản và các tùy chọn phổ biến để sử dụng lệnh Sudo một cách linh hoạt và hiệu quả.
- Nguyên lý hoạt động: Biết được quy trình Sudo xác thực và cấp quyền tạm thời cho người dùng một cách an toàn như thế nào.
- So sánh Sudo và su: Phân biệt rõ ràng ưu và nhược điểm giữa Sudo và su, giúp bạn lựa chọn công cụ phù hợp và bảo mật hơn.
- Ưu điểm của Sudo: Nhận thức rõ các lợi ích vượt trội về bảo mật, khả năng kiểm soát chi tiết và giám sát mà Sudo mang lại.
- Cài đặt Sudo: Nắm được cách kiểm tra và cài đặt Sudo trên các bản phân phối Linux phổ biến một cách dễ dàng.
- Cấu hình Sudo: Học cách cấp phát quyền hạn chi tiết cho từng người dùng hoặc nhóm người dùng một cách an toàn qua lệnh visudo.
- Ví dụ sử dụng chi tiết: Vận dụng Sudo hiệu quả vào các tác vụ quản trị hàng ngày thông qua các ví dụ thực tế, dễ hiểu.
- Lưu ý bảo mật: Nắm vững các nguyên tắc cốt lõi để cấu hình Sudo an toàn, tránh các rủi ro tiềm ẩn cho hệ thống.
- Giải đáp thắc mắc (FAQ): Tìm được câu trả lời nhanh chóng cho các câu hỏi thường gặp về Sudo, giúp giải quyết vấn đề hiệu quả.
Sudo là gì?
Sudo là một tiện ích dòng lệnh thiết yếu trong các hệ điều hành tương tự Unix (như Linux), cho phép người dùng thông thường thực thi các lệnh với quyền hạn bảo mật của một người dùng khác, phổ biến nhất là người dùng quản trị tối cao (root). Về cơ bản, sudo cung cấp một cơ chế an toàn để nâng cao đặc quyền một cách tạm thời cho các tác vụ cụ thể, mà không cần phải đăng nhập hoàn toàn bằng tài khoản root.
Tên gọi sudo bắt nguồn từ hai cách diễn giải:
- Super User Do: “Thực hiện với quyền của siêu người dùng” – đây là cách hiểu phổ biến và đúng nhất trong hầu hết các trường hợp.
- Substitute User Do: “Thực hiện với quyền của người dùng thay thế” – vì
sudocũng có thể cho phép bạn chạy lệnh với quyền của bất kỳ người dùng nào khác, không chỉ riêngroot.

Cú pháp và các tùy chọn phổ biến của lệnh sudo
Lệnh sudo có cú pháp như sau:
sudo [tùy chọn] lệnh [đối số]Trong đó:
- [tùy chọn]: Các tham số tùy chọn để thay đổi hành vi của sudo.
- lệnh: Lệnh mà bạn muốn chạy với quyền hạn cao hơn.
- [đối số]: Các tham số của lệnh bạn muốn chạy.
Khi chạy lệnh sudo lần đầu tiên, hệ thống sẽ yêu cầu bạn nhập mật khẩu của chính bạn (không phải mật khẩu root) để xác minh danh tính.
Các tùy chọn phổ biến của sudo
| Tùy chọn | Chức năng | Ví dụ sử dụng |
|---|---|---|
| -l, –list | Kiểm tra và liệt kê danh sách các lệnh mà người dùng hiện tại được phép thực thi thông qua sudo theo cấu hình trong tệp /etc/sudoers. | sudo -l |
| -u , –user= | Thực thi lệnh với các đặc quyền của một người dùng cụ thể khác thay vì root. Rất hữu ích khi cần thao tác với quyền của tài khoản dịch vụ. | sudo -u www-data touch file.txt |
| -k, –reset-timestamp | Vô hiệu hóa ngay lập tức phiên xác thực sudo hiện tại. Lần thực thi sudo tiếp theo sẽ yêu cầu nhập lại mật khẩu. | sudo -k |
| -e, –edit | Chỉnh sửa một tệp tin hệ thống một cách an toàn. sudo sẽ tạo một bản sao tạm thời, mở trình soạn thảo mặc định và sau đó ghi đè lại tệp gốc. | sudo -e /etc/fstab |
| -D <thư_mục>, –chdir=<thư_mục> | Thực thi lệnh trong một thư mục làm việc được chỉ định, thay vì thư mục hiện tại của bạn. | sudo -D /var/log/apache2 ls -l |
| -v, –validate | Xác thực lại người dùng để làm mới thời gian chờ của phiên sudo mà không cần thực thi bất kỳ lệnh nào. | sudo -v |
| -h, –help | Hiển thị thông báo trợ giúp ngắn gọn, liệt kê tất cả các tùy chọn có sẵn và thoát. | sudo -h |
| -i, –login | Chạy shell đăng nhập như root hoặc người dùng khác. Shell này sẽ tải các tệp cấu hình môi trường của người dùng đó (như .bashrc, .profile). | sudo -i |
| -v, –validate | Cập nhật thời gian xác thực (timestamp) của người dùng hiện tại mà không thực thi lệnh, giúp gia hạn thời gian miễn nhập mật khẩu sudo. | sudo -v |
| -s, –shell | Chạy shell được chỉ định bởi biến môi trường SHELL với quyền hạn của người dùng tiêu (thường là root). | sudo -s |
Cách sudo hoạt động
Quy trình hoạt động của sudo rất đơn giản và an toàn:
- Thực thi lệnh: Người dùng gõ sudo trước một lệnh cần quyền quản trị (ví dụ:
sudo apt update). - Xác thực: Hệ thống yêu cầu người dùng nhập mật khẩu của chính tài khoản của họ, không phải mật khẩu của root.
- Kiểm tra quyền: Hệ thống kiểm tra tệp cấu hình /etc/sudoers để xác định xem người dùng hiện tại có được phép chạy lệnh đó hay không.
- Thực thi: Nếu xác thực thành công và được cho phép, lệnh sẽ được thực thi với quyền hạn của root (hoặc người dùng được chỉ định khác).
- Ghi nhật ký: Mọi lệnh được thực thi qua sudo đều được ghi lại trong nhật ký hệ thống (thường là /var/log/auth.log), bao gồm thông tin về người thực hiện, thời gian và lệnh đã chạy.

So sánh lệnh sudo và su
| Tiêu chí | su | sudo |
|---|---|---|
| Mục đích | Chuyển đổi hoàn toàn sang người dùng khác (thường là root) trong một phiên làm việc mới. | Thực thi một hoặc vài lệnh cụ thể với quyền root. |
| Mật khẩu yêu cầu | Mật khẩu của tài khoản đích. | Mật khẩu của chính tài khoản người dùng hiện tại. |
| Phạm vi quyền hạn | Cấp quyền cho cả một phiên làm việc mới. | Chỉ cấp quyền cho một lệnh duy nhất. |
| Khả năng kiểm soát | Cung cấp toàn bộ quyền lực của root, khó kiểm soát chi tiết. | Quản trị viên có thể thiết lập quy tắc chi tiết trong /etc/sudoers (Ai được chạy lệnh nào). |
| Ghi nhật ký | Hạn chế, chỉ ghi lại việc chuyển đổi người dùng. | Chi tiết, ghi lại mọi lệnh đã được thực thi. |
| Bảo mật | Rủi ro cao hơn do phải chia sẻ mật khẩu root. | An toàn hơn, không cần chia sẻ mật khẩu root. |
| Sử dụng mặc định | Phổ biến ở các bản phân phối cũ hơn. | Mặc định ở các bản phân phối hiện đại (Ubuntu, Mint). |
Ưu điểm của việc sử dụng sudo
- Tăng cường bảo mật: Sử dụng sudo giúp loại bỏ hoàn toàn nhu cầu chia sẻ mật khẩu
root. Mỗi quản trị viên sử dụng mật khẩu cá nhân của riêng mình, giúp giảm thiểu rủi ro và dễ dàng thu hồi quyền khi cần. - Kiểm soát quyền hạn chi tiết: Cho phép cấp quyền thực thi các lệnh cụ thể cho từng người dùng hoặc nhóm người dùng.
- Cung cấp khả năng giám sát rõ ràng: Mọi lệnh được thực thi qua
sudođều được ghi lại chi tiết trong nhật ký hệ thống, tạo ra một dấu vết kiểm toán minh bạch. - Giảm thiểu rủi ro sai sót: Quyền hạn chỉ được nâng cao cho một lệnh duy nhất tại một thời điểm, tránh được các lỗi nguy hiểm có thể xảy ra trong một phiên làm việc
rootliên tục. - Tăng cường an toàn cho truy cập từ xa: Cho phép vô hiệu hóa đăng nhập
roottrực tiếp qua SSH, một trong những yêu cầu bảo mật quan trọng và cơ bản nhất trong quản trị máy chủ.

Hướng dẫn cài Sudo trong Linux
Bước 1: Kiểm tra sudo đã được cài đặt chưa
Trước khi tiến hành cài đặt, bạn cần xác minh xem sudo đã tồn tại trên hệ thống của mình hay chưa bằng cách chạy lệnh sau trên terminal.
command -v sudo- Nếu
sudođã được cài đặt: Lệnh trên sẽ trả về đường dẫn đến tệp thực thi, ví dụ:/usr/bin/sudo. - Nếu
sudochưa được cài đặt: Lệnh sẽ không trả về kết quả nào cả.

Bước 2: Cài đặt sudo
Nếu hệ thống chưa có sudo, bạn không thể dùng chính lệnh sudo để cài đặt nó. Thay vào đó, bạn phải chuyển sang người dùng quản trị cao nhất (root) để thực hiện việc này.
Bạn mở terminal và gõ lệnh sau, sau đó nhập mật khẩu của root.
su -Tùy thuộc vào bản phân phối Linux bạn đang sử dụng, bạn hãy dùng lệnh quản lý gói tương ứng.
- Đối với các hệ thống dựa trên Debian/Ubuntu:
apt update
apt install sudo- Đối với các hệ thống dựa trên RHEL/CentOS/Fedora:
yum install sudo- Đối với các phiên bản mới hơn:
dnf install sudoCách cấu hình Sudo
Việc cấu hình sudo được thực hiện thông qua tệp /etc/sudoers. Tuy nhiên, bạn không nên chỉnh sửa tệp này trực tiếp. Thay vào đó, hãy luôn sử dụng lệnh visudo:
sudo visudoLệnh này sẽ mở trình soạn thảo và kiểm tra cú pháp của tệp trước khi lưu, giúp ngăn ngừa các lỗi cấu hình có thể khiến bạn mất quyền truy cập.
- Cấp quyền
poweroffkhông cần mật khẩu: Quy tắc này cho phép người dùng tên user có thể chạy lệnh sudo poweroff mà không cần nhập mật khẩu.
user localhost = NOPASSWD: /sbin/poweroff- Cấp quyền
shutdownkhông cần mật khẩu: Tương tự, quy tắc này cho phép người dùng user chạy lệnh sudo shutdown mà không cần xác thực bằng mật khẩu.
user localhost = NOPASSWD: /sbin/shutdown- Cấp quyền chạy mọi lệnh trong một thư mục: Quy tắc này cho phép người dùng user thực thi bất kỳ tệp lệnh nào nằm trong thư mục /usr/bin khi đang ở trên máy chủ tên là linux01.
user linux01 = /usr/bin/*- Cấp quyền chạy nhiều lệnh cụ thể với quyền
root: Quy tắc này cho phép người dùng user chạy chính xác ba lệnh (shutdown,kill,httpd) với các đặc quyền của root.
user ALL = (root) /sbin/shutdown, /bin/kill, /etc/init.d/httpdKiểm tra quyền của user vừa cấu hình
sudo -l -U user
Cách sử dụng lệnh sudo chi tiết
- Ví dụ 1: Cập nhật hệ thống phần mềm
- Ví dụ 2: Thêm một người dùng vào nhóm sudo
- Ví dụ 3: Thực thi lệnh với quyền hạn của người dùng root
- Ví dụ 4: Chuyển đổi sang môi trường làm việc của người dùng root
- Ví dụ 5: Thực thi lệnh với tư cách một người dùng khác
- Ví dụ 6: Liệt kê các quyền hạn sudo của người dùng hiện tại
- Ví dụ 7: Thực thi một chuỗi nhiều lệnh
- Ví dụ 8: Điều chỉnh thời gian chờ xác thực mật khẩu
Ví dụ 1: Cập nhật hệ thống phần mềm
Bước 1: Đồng bộ hóa danh sách gói phần mềm: Lệnh dưới đây sẽ tải về thông tin mới nhất về các gói phần mềm từ những kho lưu trữ đã được cấu hình, giúp hệ thống nhận biết được các phiên bản mới và các bản vá bảo mật có sẵn.
sudo apt updateBước 2: Cài đặt các bản nâng cấp: Sau khi danh sách đã được đồng bộ, lệnh sau sẽ tiến hành tải về và cài đặt các bản nâng cấp cho những phần mềm hiện có trên hệ thống.
sudo apt upgradeVí dụ 2: Thêm một người dùng vào nhóm sudo
Để cấp quyền quản trị cho một tài khoản người dùng, phương pháp tiêu chuẩn là thêm tài khoản đó vào nhóm sudo. Lệnh sau đây sẽ thêm người dùng có tên user vào nhóm sudo mà không ảnh hưởng đến các nhóm khác mà người dùng này đang là thành viên.
sudo usermod -aG sudo userĐể kiểm tra lại, bạn có thể sử dụng lệnh groups user để xem danh sách các nhóm mà người dùng này thuộc về.
Ví dụ 3: Thực thi lệnh với quyền hạn của người dùng root
Một số tác vụ yêu cầu quyền truy cập vào các tập tin hoặc thư mục bị hạn chế. Lệnh sudo cho phép thực thi một lệnh duy nhất với đặc quyền của người dùng root (Ví dụ, thư mục /root chỉ cho phép người dùng root truy cập). Lệnh sau sẽ giúp liệt kê nội dung của thư mục này thành công.
sudo ls /rootNếu không có sudo, hệ thống sẽ trả về một thông báo lỗi từ chối quyền truy cập.
Ví dụ 4: Chuyển đổi sang môi trường làm việc của người dùng root
Khi cần thực hiện nhiều tác vụ quản trị liên tiếp, việc chuyển đổi hoàn toàn sang một phiên làm việc của người dùng root sẽ hiệu quả hơn. Lệnh dưới đây không chỉ thay đổi người dùng thành root mà còn tải toàn bộ môi trường làm việc, bao gồm các biến môi trường và đường dẫn hệ thống:
sudo -iSau khi thực thi, dấu nhắc lệnh trong cửa sổ terminal thường sẽ thay đổi từ $ sang #, biểu thị rằng bạn đang hoạt động với quyền hạn cao nhất.
Ví dụ 5: Thực thi lệnh với tư cách một người dùng khác
Lệnh sudo cũng có khả năng thực thi một lệnh dưới danh nghĩa của bất kỳ người dùng nào khác trong hệ thống, không chỉ riêng root. Để chạy lệnh whoami với tư cách của người dùng tên user1, bạn có thể sử dụng cú pháp sau.
sudo -u user1 whoamiKết quả của lệnh whoami sẽ hiển thị user1, thay vì tên của người dùng đang thực thi lệnh sudo.
Ví dụ 6: Liệt kê các quyền hạn sudo của người dùng hiện tại
Để kiểm tra những quyền hạn cụ thể mà tài khoản của bạn đã được cấu hình để sử dụng với sudo, bạn có thể sử dụng tùy chọn -l. Lệnh dưới đây sẽ hiển thị một danh sách chi tiết các quy tắc được áp dụng cho người dùng hiện tại từ tập tin cấu hình /etc/sudoers.
sudo -lThông tin này rất hữu ích để xác minh các quyền được cấp phép.
Ví dụ 7: Thực thi một chuỗi nhiều lệnh
Khi cần chạy nhiều lệnh liên tiếp với quyền sudo, việc gộp chúng lại trong một shell con là cần thiết để đảm bảo tất cả đều được thực thi với đặc quyền nâng cao. Lệnh sau sẽ cập nhật danh sách gói và ngay lập tức nâng cấp hệ thống mà không cần hỏi xác nhận.
sudo sh -c "apt update && apt upgrade -y"Cách này đảm bảo toàn bộ chuỗi lệnh bên trong dấu ngoặc kép được thực thi bởi một tiến trình shell đã được cấp quyền sudo.
Ví dụ 8: Điều chỉnh thời gian chờ xác thực mật khẩu
Theo mặc định, sudo sẽ ghi nhớ mật khẩu của bạn trong 15 phút. Để thay đổi khoảng thời gian này, bạn phải chỉnh sửa tập tin cấu hình sudoers một cách an toàn bằng công cụ visudo.
sudo visudoLệnh này sẽ mở trình soạn thảo văn bản. Bạn cần tìm dòng chứa Defaults env_reset (hoặc tạo mới nếu không có) và thêm hoặc chỉnh sửa thành:
Defaults env_reset,timestamp_timeout=45
Lưu ý
env_reset thường đã có. Bạn chỉ cần thêm ,timestamp_timeout=45 vào dòng đó. Đặt giá trị bằng 0 sẽ yêu cầu mật khẩu cho mỗi lần dùng sudo. Lưu và thoát khỏi trình soạn thảo để áp dụng thay đổi.
Các lưu ý quan trọng về bảo mật khi cấu hình sudo
- Nguyên tắc quyền hạn tối thiểu: Luôn chỉ cấp những quyền thực sự cần thiết. Nếu một người dùng chỉ cần quản lý máy chủ web, bạn không nên cấp cho họ quyền
ALL. - Hạn chế
NOPASSWD: Bạn chỉ nên sử dụng NOPASSWD khi thật sự cần thiết, ví dụ cho các tài khoản dịch vụ hoặc các tác vụ tự động hóa được kiểm soát chặt chẽ. - Ưu tiên cấp quyền cho nhóm: Việc quản lý quyền theo nhóm (
%tên_nhóm) sẽ dễ dàng và ít sai sót hơn nhiều so với việc cấu hình cho từng người dùng riêng lẻ.

Câu hỏi thường gặp
Khi nào nên dùng sudo và khi nào dùng su?
Sử dụng sudo cho các tác vụ quản trị đơn lẻ, hàng ngày. Sử dụng su – (hoặc sudo -i) chỉ khi bạn cần thực hiện một chuỗi dài các lệnh quản trị và việc gõ sudo liên tục trở nên phiền toái.
Thời gian chờ mật khẩu của sudo là bao lâu?
Mặc định là 15 phút. Sau 15 phút không hoạt động, bạn sẽ phải nhập lại mật khẩu cho lệnh sudo tiếp theo.
Làm sao để biết một người dùng có quyền sudo hay không?
Cách nhanh nhất là chạy lệnh id <tên_người_dùng> và xem họ có trong nhóm sudo hoặc wheel không. Cách chính xác nhất là chạy sudo -l -U <tên_người_dùng> (với quyền sudo) để xem chi tiết các quyền được cấp.
Nếu quên mật khẩu của tài khoản có quyền sudo thì phải làm sao?
Bạn cần khởi động vào recovery mode của Linux. Chế độ này sẽ cung cấp cho bạn một shell root để bạn có thể dùng lệnh passwd <tên_người_dùng> và đặt lại mật khẩu mới.
Hy vọng qua bài viết này, bạn đã nắm vững Sudo là gì và cách dùng các lệnh Sudo cơ bản trong Linux. Việc hiểu và sử dụng Sudo chính xác là kỹ năng quan trọng giúp bạn thực thi các tác vụ quản trị một cách an toàn và hiệu quả mà không cần đăng nhập trực tiếp bằng tài khoản root. Để nâng cao kiến thức quản trị hệ thống Linux, bạn có thể xem thêm một số bài viết dưới đây của mình:




