- 1 1. Giới thiệu: sudo là gì?
- 2 2. Cách sử dụng cơ bản của lệnh sudo
- 3 3. Tệp sudoers và kiểm soát truy cập
- 4 4. Sử dụng sudo nâng cao
- 5 5. Bảo mật và các thực tiễn tốt nhất
- 6 6. Các lỗi phổ biến và cách khắc phục khi dùng sudo
- 7 7. Câu hỏi thường gặp về sudo (FAQ)
- 7.1 Q1. Sự khác biệt giữa sudo và su là gì?
- 7.2 Q2. Dùng sudo có cần nhập mật khẩu root không?
- 7.3 Q3. Lịch sử thao tác sudo được ghi ở đâu?
- 7.4 Q4. Nếu chỉnh sai file sudoers thì khắc phục thế nào?
- 7.5 Q5. Có thể lấy quyền root mà không cần sudo không?
- 7.6 Q6. Có nên dùng sudo để mở ứng dụng giao diện đồ họa (GUI) không?
- 8 8. Tổng kết
1. Giới thiệu: sudo là gì?
Ý nghĩa cơ bản và vai trò của sudo
Trong hệ thống Linux hoặc Unix, 「sudo」 là một trong những lệnh cực kỳ quan trọng.
「sudo」là viết tắt của “superuser do“, là công cụ cho phép bạn tạm thời mượn quyền quản trị (quyền root) để thực thi lệnh. Thông thường, người dùng thông thường không có quyền thao tác lên toàn bộ hệ thống (như cài đặt phần mềm hay thay đổi cấu hình hệ thống). Tuy nhiên, bằng cách sử dụng lệnh sudo
, bạn có thể thực hiện các thao tác đặc quyền một cách giới hạn.
Ví dụ, bạn có thể chạy lệnh dưới đây để thực thi lệnh apt với quyền root:
sudo apt update
Như vậy, sudo “giúp sử dụng quyền quản trị một cách an toàn”, đóng vai trò cân bằng giữa bảo mật và sự tiện lợi khi quản lý hệ thống.
Sự khác biệt giữa sudo và lệnh su
Có một lệnh tương tự sudo
là su
, nhưng hai lệnh này có sự khác biệt rõ ràng.
su
là viết tắt của “substitute user”, dùng để chuyển đổi hoàn toàn sang người dùng khác (thường là root). Khi dùngsu
, bạn thao tác dưới tư cách người dùng đã chỉ định.- Trong khi đó,
sudo
cho phép giữ nguyên tài khoản hiện tại, nhưng mượn quyền quản trị để chạy từng lệnh cụ thể.
Nói cách khác, su
chuyển đổi theo phiên đăng nhập, còn sudo
chỉ nâng quyền theo từng lệnh. Về mặt bảo mật, sudo
dễ quản lý lịch sử thao tác hơn nên gần đây được các bản phân phối Linux ưu tiên sử dụng.
Các bản phân phối Linux điển hình sử dụng sudo
Rất nhiều bản phân phối Linux mặc định sử dụng sudo
, đặc biệt là các bản dưới đây:
- Dòng Ubuntu (Ubuntu, Linux Mint, v.v.)
→ Mặc định không đăng nhập trực tiếp vào tài khoản root, mà quản lý qua sudo. - Dòng Debian
→ sudo có thể phải kích hoạt thêm, nhưng thường được khuyến khích vì lý do bảo mật. - Fedora, CentOS, Red Hat
→ Vẫn có thể dùng tài khoản root, nhưng việc sử dụng sudo cũng rất phổ biến.
Đặc biệt với Ubuntu, tài khoản root bị vô hiệu hóa mặc định nên mọi thao tác quản trị đều thực hiện qua sudo. Vì vậy, việc hiểu rõ sudo là bắt buộc đối với người dùng Ubuntu.
Tại sao lại có từ khóa “sudo sudo” được tìm kiếm?
“sudo sudo” thoạt nhìn có vẻ dư thừa, nhưng thực tế lại hay được tìm kiếm với các lý do như:
- Người mới muốn tìm hiểu ý nghĩa hoặc cách dùng sudo, nên nhập lặp lại từ này để nhấn mạnh khi tìm kiếm
- Gặp lỗi liên quan đến sudo (ví dụ:
sudo: sudo: command not found
) và tìm cách khắc phục - Thắc mắc khi thấy lệnh sudo lặp đôi trong script hoặc pipeline
Hiểu được ý đồ tìm kiếm này, các phần tiếp theo sẽ giải thích chi tiết cách sử dụng, cấu hình và xử lý sự cố với sudo.
2. Cách sử dụng cơ bản của lệnh sudo
Cú pháp cơ bản của sudo
Cú pháp cơ bản của sudo
rất đơn giản:
sudo [tùy chọn] lệnh
Ví dụ, để cập nhật thông tin gói hệ thống:
sudo apt update
Lệnh này nghĩa là “thực thi apt update với quyền root”.
Cơ chế xác thực mật khẩu và bộ nhớ cache
Khi bạn dùng sudo
lần đầu hoặc sau một khoảng thời gian, hệ thống sẽ yêu cầu nhập mật khẩu người dùng để tăng bảo mật, ngăn chặn thao tác nhầm hoặc bị lạm dụng. Sau khi nhập mật khẩu, quyền sudo được ghi nhớ trong một thời gian ngắn (mặc định Ubuntu là 5 phút) nên không cần nhập lại liên tục. Thời gian này có thể thay đổi bằng file sudoers
.
Các tùy chọn thường dùng
sudo
có rất nhiều tùy chọn giúp thao tác linh hoạt hơn. Dưới đây là một số tùy chọn phổ biến:
-u (chạy lệnh với tư cách người dùng khác)
Mặc định sudo dùng quyền root, nhưng với tùy chọn -u
, bạn có thể chạy lệnh với tư cách một người dùng khác.
sudo -u www-data whoami
Kết quả sẽ là www-data
, nghĩa là lệnh đã được chạy với tư cách người dùng www-data.
-s (mở shell tạm thời với quyền root)
Lệnh sau giúp mở shell tạm thời với quyền root:
sudo -s
Tuy nhiên, cần thao tác cẩn thận khi ở trạng thái root.
-i (đăng nhập hoàn toàn thành root)
Lệnh này sẽ tạo môi trường root hoàn chỉnh, các biến môi trường cũng đổi sang root.
sudo -i
-l (xem các lệnh được phép thực thi với sudo)
Bạn có thể kiểm tra mình được phép chạy lệnh nào với sudo:
sudo -l
Hữu ích cho kiểm tra hạn chế quyền hoặc test cấu hình.
Những lưu ý cho người mới bắt đầu
- Phải có dấu cách sau sudo. Ví dụ:
sudoapt
là sai. - Nếu chạy nhiều lệnh cùng lúc, hãy dùng dấu nháy (
"
hoặc'
) hoặc chấm phẩy để tách lệnh. - Không nên chạy ứng dụng GUI bằng sudo vì dễ làm hỏng file cấu hình (ví dụ:
sudo gedit
).
3. Tệp sudoers và kiểm soát truy cập
Tệp sudoers là gì?
Tệp cấu hình kiểm soát hoạt động của lệnh sudo
trên hệ thống là /etc/sudoers
. Trong file này, bạn có thể định nghĩa ai được phép chạy lệnh sudo nào, với quyền nào.
Ví dụ, bạn có thể giới hạn người dùng chỉ được chạy một số lệnh nhất định với sudo. Nhờ đó, nguyên tắc cấp quyền tối thiểu cho người dùng được đảm bảo để tăng bảo mật hệ thống.
Chỉnh sửa an toàn với lệnh visudo
KHÔNG được chỉnh sửa trực tiếp file /etc/sudoers
bằng các trình soạn thảo văn bản thông thường.
Lý do là nếu mắc lỗi cú pháp, sudo có thể không hoạt động và rất khó phục hồi. Do đó, hãy luôn chỉnh sửa với lệnh visudo
để được kiểm tra cú pháp khi lưu:
sudo visudo
Nhờ đó, bạn có thể chỉnh sửa an toàn mà không lo làm “gãy” sudo.
Cú pháp cơ bản và ví dụ cấu hình
Cú pháp trong tệp sudoers
cơ bản như sau:
tên_người_dùng tên_máy = (người_dùng_thực_thi) lệnh_được_phép
Ví dụ:
alice ALL=(ALL:ALL) ALL
Cho phép người dùng “alice” chạy mọi lệnh với mọi quyền trên mọi máy.
Nếu muốn giới hạn hơn:
bob ALL=(ALL) /usr/bin/systemctl restart nginx
Dòng này chỉ cho phép bob chạy lệnh khởi động lại nginx bằng sudo.
Kiểm soát theo nhóm: nhóm sudo
Trên Ubuntu và nhiều bản phân phối khác, thành viên nhóm sudo
được phép dùng sudo.
%sudo ALL=(ALL:ALL) ALL
Quản lý theo nhóm giúp kiểm soát quyền hiệu quả hơn.
Để thêm người dùng vào nhóm sudo:
sudo usermod -aG sudo tên_người_dùng
Tùy chọn NOPASSWD: bỏ qua xác thực mật khẩu
Nếu muốn bỏ qua yêu cầu nhập mật khẩu khi chạy sudo, hãy dùng tùy chọn NOPASSWD
:
alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
Lưu ý, điều này làm tăng rủi ro bảo mật nên chỉ áp dụng cho các lệnh thực sự cần thiết. Không nên dùng với ALL
.
4. Sử dụng sudo nâng cao
Thực thi lệnh với tư cách người dùng khác
Thông thường sudo
chạy với quyền root, nhưng bạn cũng có thể chạy lệnh với tư cách bất kỳ người dùng nào bằng tùy chọn:
sudo -u www-data whoami
Kết quả là www-data
. Cách này hữu ích khi cần kiểm tra môi trường hoặc quyền của user khác.
Kết hợp với chuyển hướng (redirect) hoặc pipe
Người mới thường gặp lỗi khi dùng sudo với chuyển hướng >
hoặc pipe |
.
Ví dụ dưới đây sẽ không hoạt động như mong muốn:
sudo echo "test" > /etc/test.conf
Lý do: echo
chạy với quyền sudo, nhưng chuyển hướng file vẫn dùng quyền người dùng thường nên sẽ bị lỗi.
Cách đúng là dùng tee
kết hợp sudo:
echo "test" | sudo tee /etc/test.conf
Như vậy, việc ghi file sẽ được thực hiện với quyền root.
Sử dụng sudo trong script
Khi viết script shell có các lệnh cần quyền quản trị, hãy thêm sudo vào trước các lệnh cần thiết, không nên chạy toàn bộ script với quyền root để tránh rủi ro.
Ví dụ (install.sh):
#!/bin/bash
echo "Installing package..."
sudo apt install -y nginx
Nhiều script cũng kiểm tra có phải đang chạy với quyền root không:
if [ "$EUID" -ne 0 ]; then
echo "Script này cần chạy với quyền root"
exit 1
fi
Cách này giúp đảm bảo an toàn khi triển khai script.
Một số lệnh sudo tiện lợi
sudo !!
→ Lặp lại lệnh trước đó với quyền sudo. Ví dụ:
apt update
sudo !!
Tương đương sudo apt update
.
sudo -k
→ Xóa bộ nhớ cache mật khẩu sudo.sudo -v
→ Gia hạn quyền sudo trong phiên hiện tại.
5. Bảo mật và các thực tiễn tốt nhất
Tuân thủ nguyên tắc cấp quyền tối thiểu
Mục tiêu lớn nhất khi sử dụng sudo
là vận hành hệ thống với quyền tối thiểu cần thiết.
Tức là “chỉ mượn quyền root khi thực sự cần thiết, trong phạm vi hẹp nhất”.
Những thiết lập nên áp dụng:
- Chỉ cho phép người dùng chạy một số lệnh sudo nhất định (ví dụ:
systemctl restart nginx
) - Hạn chế tối đa việc dùng NOPASSWD
- Quản lý người dùng có quyền sudo bằng nhóm (
sudo
)
Ghi log và kiểm tra lịch sử thao tác
sudo
ghi lại toàn bộ lệnh đã thực hiện vào log. Nhờ đó, có thể kiểm tra ai đã chạy lệnh gì, khi nào.
Các file log phổ biến (tùy bản phân phối):
/var/log/auth.log
(Ubuntu, Debian…)journalctl
(các bản Linux dùng systemd)
Ví dụ kiểm tra lịch sử sudo trên Ubuntu:
grep 'sudo' /var/log/auth.log
Hoặc:
journalctl _COMM=sudo
Nhờ vậy, nếu có thao tác sai hoặc bị truy cập trái phép, bạn hoàn toàn kiểm soát được lịch sử thao tác.

Ví dụ về lỗ hổng sudo (CVE-2021-3156)
sudo
là một công cụ rất đáng tin cậy nhưng từng có lỗ hổng nghiêm trọng được công bố.
Tiêu biểu là CVE-2021-3156 (Baron Samedit) phát hiện năm 2021, cho phép người dùng thường chiếm quyền root trong một số điều kiện đặc biệt.
Lỗi này đã được vá, nhưng bài học là:
- Luôn cập nhật sudo và các gói quan trọng lên bản mới nhất
- Thường xuyên kiểm tra website chính thức và cơ sở dữ liệu lỗ hổng bảo mật
Giới thiệu doas – giải pháp thay thế sudo
Một số môi trường Linux tối giản hoặc người dùng yêu cầu bảo mật cao cũng dùng lệnh doas thay cho sudo.
doas
xuất phát từ OpenBSD, có cấu hình đơn giản, dễ dùng và được đánh giá bảo mật cao hơn sudo.
Ví dụ:
doas apt update
Cấu hình file /etc/doas.conf
đơn giản, ví dụ:
permit nopass :wheel
Nhưng không phải mọi bản Linux đều cài sẵn doas, cần cài đặt và cấu hình thủ công.
Chọn dùng sudo hay doas tùy vào nhu cầu quản lý và chính sách bảo mật hệ thống của bạn.
6. Các lỗi phổ biến và cách khắc phục khi dùng sudo
Lỗi “Người dùng không có trong file sudoers”
Tên_người_dùng is not in the sudoers file. This incident will be reported.
Lỗi này xảy ra khi tài khoản hiện tại không có quyền sử dụng sudo. Thường gặp khi người dùng mới tạo chưa được thêm vào nhóm sudo.
Cách xử lý:
- Đăng nhập bằng tài khoản có quyền root hoặc quản trị khác
- Thêm người dùng vào nhóm sudo
sudo usermod -aG sudo tên_người_dùng
Đăng xuất và đăng nhập lại để quyền sudo có hiệu lực.
Lỗi “Permission denied” khi chuyển hướng (redirect) hoặc dùng pipe
Permission denied
Lỗi này xảy ra do chuyển hướng >
hoặc pipe |
không thực hiện với quyền sudo, dù lệnh chính có sudo.
Ví dụ sai:
sudo echo "test" > /etc/test.conf
Ở đây, echo
chạy với sudo nhưng ghi file vẫn là quyền người dùng thường nên bị từ chối.
Cách đúng:
echo "test" | sudo tee /etc/test.conf
Hoặc ghi nhiều dòng:
sudo bash -c 'echo "line1" > /etc/test.conf'
Lỗi cấu hình file sudoers làm mất quyền sudo
Nếu chỉnh sửa file sudoers
trực tiếp mà sai cú pháp, sudo có thể không hoạt động – rất nguy hiểm.
Cách xử lý:
- Đăng nhập bằng tài khoản root (lưu ý: Ubuntu mặc định tắt tài khoản root)
- Sửa file bằng lệnh sau:
pkexec visudo
Nếu pkexec
không dùng được, hãy khởi động ở chế độ khôi phục (recovery mode) để sửa /etc/sudoers
.
Để tránh lỗi, luôn dùng lệnh sau để chỉnh sửa:
sudo visudo
Lỗi “sudo: command not found”
sudo: command not found
Lỗi này xảy ra khi hệ thống sudo
chưa được cài hoặc biến môi trường PATH
chưa đúng.
Cách xử lý:
- Đăng nhập với quyền root rồi cài lại sudo:
apt update
apt install sudo
- Hoặc chạy bằng đường dẫn đầy đủ:
/usr/bin/sudo ls
7. Câu hỏi thường gặp về sudo (FAQ)
Q1. Sự khác biệt giữa sudo và su là gì?
Trả lời:sudo
dùng để “nâng quyền quản trị tạm thời cho từng lệnh”, còn su
dùng để “chuyển đổi hoàn toàn sang tài khoản khác (thường là root)”.
sudo
: vẫn là tài khoản hiện tại, chỉ nâng quyền cho lệnh cần thiếtsu
: chuyển hẳn sang tài khoản khác
Gần đây sudo được ưu tiên hơn vì lý do bảo mật và quản lý lịch sử thao tác.
Q2. Dùng sudo có cần nhập mật khẩu root không?
Trả lời:
Không, bạn chỉ cần nhập mật khẩu của chính tài khoản đang đăng nhập chứ không cần mật khẩu root.
Điều này giúp giảm nguy cơ lộ mật khẩu root và dễ kiểm soát thao tác từng người dùng.
Q3. Lịch sử thao tác sudo được ghi ở đâu?
Trả lời:
Trên hầu hết các hệ Linux, lịch sử lệnh sudo được ghi ở một trong các vị trí sau:
- Ubuntu/Debian:
/var/log/auth.log
- RHEL/CentOS:
/var/log/secure
- Linux dùng systemd:
journalctl _COMM=sudo
Nhờ đó, luôn có thể kiểm tra lại thao tác quản trị.
Q4. Nếu chỉnh sai file sudoers thì khắc phục thế nào?
Trả lời:
Luôn dùng sudo visudo
khi chỉnh sửa. Nếu lỡ làm sai, có thể:
- Đăng nhập bằng root rồi sửa bằng
visudo
- Với Ubuntu, khởi động vào chế độ recovery để sửa
- Dùng
pkexec visudo
(nếu polkit có sẵn)
Nhớ kiểm tra lại sau khi sửa để đảm bảo không còn lỗi cú pháp.
Q5. Có thể lấy quyền root mà không cần sudo không?
Trả lời:
Có thể, nhưng rất nguy hiểm về bảo mật và không được khuyến nghị.
Một số cách:
- Dùng
su
để chuyển sang root (cần biết mật khẩu root) - Đăng nhập trực tiếp vào tài khoản root (Ubuntu mặc định tắt tài khoản root)
Đa số hệ Linux hiện đại đều khuyên dùng sudo để an toàn hơn.
Q6. Có nên dùng sudo để mở ứng dụng giao diện đồ họa (GUI) không?
Trả lời:
Không nên. Ví dụ chạy sudo gedit
có thể làm hỏng quyền truy cập file cấu hình GUI của người dùng.
Nếu thật sự cần chạy ứng dụng GUI với quyền quản trị, nên dùng gksudo
hoặc pkexec
(tùy môi trường):
pkexec gedit
8. Tổng kết
Hiểu đúng vai trò của sudo
Bài viết đã giải thích ý nghĩa, cách sử dụng, cấu hình, mẹo nâng cao, bảo mật, các lỗi phổ biến và câu hỏi thường gặp về lệnh sudo trong Linux/Unix.
sudo
không chỉ là lệnh tiện dụng, mà còn là cơ chế kiểm soát truy cập quan trọng giúp bảo vệ hệ thống.
Dùng sudo đúng cách để tránh sự cố
Để sử dụng sudo an toàn, hãy luôn ghi nhớ các điểm sau:
- Chỉ thao tác với quyền tối thiểu cần thiết (nguyên tắc cấp quyền tối thiểu)
- Quản lý cấu hình bằng
visudo
để tránh lỗi - Theo dõi lịch sử thao tác qua log
- Cẩn trọng khi kết hợp với chuyển hướng hoặc pipe
- Không dùng sudo với ứng dụng GUI trừ khi thật sự cần thiết
Nếu không nắm rõ, bạn dễ gặp lỗi như “file hỏng”, “không sửa lại được cấu hình” hoặc “không thể dùng sudo”.
Chọn cách quản trị phù hợp hệ thống của bạn
Linux rất linh hoạt. Bạn có thể dùng sudo
hoặc doas
tuỳ vào nhu cầu, chính sách bảo mật và phong cách vận hành.
Lời kết
Hiểu đúng về sudo
là bước đầu tiên để sử dụng Linux thành thạo.
Đừng xem nhẹ lệnh này – hãy coi sudo như “chìa khóa” bảo vệ cả hệ thống của bạn!
Mong rằng sau bài viết này, bạn sẽ tự tin hơn khi thao tác Linux – nhất là khi dùng các lệnh quan trọng!