- 1 1. Giới thiệu: sudo là gì?
- 2 2. Cách 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à Thực hành tốt
- 6 6. Các lỗi thường gặp và Khắc phục
- 7 7. Câu hỏi thường gặp
- 7.1 Câu 1. Sự khác nhau giữa sudo và su là gì?
- 7.2 Câu 2. Mật khẩu root có cần thiết cho sudo không?
- 7.3 Câu 3. Các nhật ký sudo được lưu ở đâu?
- 7.4 Câu 4. Tôi đã làm hỏng tệp sudoers. Tôi nên làm gì?
- 7.5 Câu 5. Tôi có thể có quyền root mà không dùng sudo không?
- 7.6 Câu 6. Có an toàn khi chạy các ứng dụng GUI với sudo không?
- 8 8. Tóm tắt
1. Giới thiệu: sudo là gì?
Ý nghĩa cơ bản và vai trò của sudo
Trong các hệ thống Linux và Unix‑like, sudo là một trong những lệnh quan trọng nhất.
Thuật ngữ sudo viết tắt của “superuser do”, và nó là công cụ cho phép người dùng tạm thời thực thi các lệnh với đặc quyền quản trị (root).
Bình thường, người dùng thường không được phép thực hiện các thao tác ảnh hưởng tới toàn bộ hệ thống, chẳng hạn như cài đặt gói phần mềm hay thay đổi cài đặt hệ thống. Tuy nhiên, bằng cách sử dụng lệnh sudo, những thao tác có đặc quyền này có thể được thực hiện một cách kiểm soát và giới hạn.
Ví dụ, lệnh sau chạy apt với đặc quyền root:
sudo apt update
Như vậy, sudo đóng một vai trò then chốt như một cơ chế bảo mật để sử dụng đặc quyền quản trị, cân bằng giữa an ninh hệ thống và tính tiện dụng.
Sự khác nhau giữa sudo và su
Một lệnh có mục đích tương tự sudo là su, nhưng hai lệnh này có những điểm khác biệt rõ ràng.
suviết tắt “substitute user” và được dùng để chuyển hoàn toàn sang một người dùng khác (thường là root). Khi bạn dùngsu, bạn sẽ hoạt động dưới danh tính của người dùng đó trong suốt phiên làm việc.- Ngược lại,
sudocho phép bạn giữ nguyên người dùng hiện tại trong khi tạm thời vay mượn đặc quyền quản trị cho một lệnh duy nhất.
Tóm lại, su chuyển đổi người dùng ở mức phiên, trong khi sudo nâng đặc quyền ở mức lệnh. Từ góc độ bảo mật, sudo giúp dễ dàng theo dõi lịch sử lệnh, vì vậy nó đã trở thành cách tiếp cận tiêu chuẩn trong các bản phân phối Linux hiện đại.
Các bản phân phối Linux thường sử dụng sudo
Lệnh sudo được bật mặc định trên nhiều bản phân phối Linux, đặc biệt là các bản sau:
- Hệ thống dựa trên Ubuntu (Ubuntu, Linux Mint, …) → Tài khoản root bị vô hiệu hoá theo mặc định, và mọi tác vụ quản trị đều được thực hiện qua sudo.
- Hệ thống dựa trên Debian → sudo có thể cần được bật thủ công, nhưng thường được khuyến nghị như một thực hành bảo mật tốt.
- Hệ thống dựa trên Fedora, CentOS và Red Hat → Truy cập root trực tiếp vẫn khả thi, nhưng việc dùng sudo vẫn phổ biến.
Trong Ubuntu nói riêng, tài khoản root bị vô hiệu hoá theo mặc định, và mọi thao tác quản trị phải thực hiện bằng sudo. Vì vậy, hiểu sudo là điều thiết yếu đối với người dùng Ubuntu.
Tại sao mọi người lại tìm kiếm “sudo sudo”?
Từ khóa “sudo sudo” có vẻ dư thừa khi nhìn đầu tiên, nhưng nó thường được tìm kiếm vì các lý do sau:
- Người mới bắt đầu muốn nhấn mạnh hoặc hiểu rõ hơn về ý nghĩa và cách dùng
sudo - Người dùng gặp lỗi như
sudo: sudo: command not found - Sự nhầm lẫn khi thấy các ví dụ trong đó
sudobị lặp lại hai lần trong script hoặc pipeline
Với những mục đích tìm kiếm này, các phần sau sẽ giải thích chi tiết cách sử dụng đúng, cách cấu hình và các kỹ thuật khắc phục lỗi cho sudo.
2. Cách 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 [options] command
Ví dụ, để cập nhật thông tin gói của hệ thống:
sudo apt update
Điều này có nghĩa là lệnh apt update được thực thi với đặc quyền root.
Xác thực mật khẩu và bộ nhớ đệm thông tin đăng nhập
Khi bạn dùng sudo lần đầu, hoặc sau một khoảng thời gian nhất định, hệ thống sẽ yêu cầu bạn nhập mật khẩu người dùng. Cơ chế bảo mật này giúp ngăn ngừa việc sử dụng sai hoặc truy cập trái phép.
Sau khi nhập mật khẩu, thông tin sẽ được lưu trong bộ nhớ đệm trong một khoảng thời gian cố định (mặc định là 5 phút trên Ubuntu). Trong thời gian này, các lệnh sudo tiếp theo không cần nhập lại mật khẩu. Thời gian chờ này có thể được điều chỉnh trong tệp sudoers.
Các tùy chọn thường dùng
sudo cung cấp nhiều tùy chọn để làm cho các thao tác linh hoạt và tiện lợi hơn. Dưới đây là một số tùy chọn được sử dụng phổ biến nhất.
-u (Chạy dưới danh tính người dùng khác)
Mặc định, các lệnh được thực thi dưới quyền root, nhưng với tùy chọn -u, bạn có thể chạy một lệnh dưới quyền bất kỳ người dùng nào được chỉ định.
sudo -u www-data whoami
Kết quả sẽ là www-data, xác nhận rằng lệnh đã được thực thi dưới quyền người dùng www-data.
-s (Start a Shell)
Lệnh sau sẽ mở một shell tạm thời với quyền root:
sudo -s
Hãy cẩn thận khi làm việc trong một shell root.
-i (Simulate a Full Root Login)
Tùy chọn này tạo ra một môi trường root đầy đủ hơn. Các biến môi trường được chuyển sang của root, dẫn đến một phiên root tương tự như đăng nhập trực tiếp dưới quyền root.
sudo -i
-l (List Allowed Commands)
Bạn có thể kiểm tra những lệnh nào bạn được phép chạy bằng sudo:
sudo -l
Điều này hữu ích để xác minh cài đặt quyền và các hạn chế bảo mật.
Những điểm quan trọng cho người mới bắt đầu
- Bạn phải để một dấu cách sau
sudo. Ví dụ,sudoaptlà không đúng. - Khi chạy nhiều lệnh, bạn cần đặt toàn bộ lệnh trong dấu ngoặc kép hoặc tách chúng bằng dấu chấm phẩy.
- Khởi chạy các ứng dụng GUI bằng
sudocó thể làm hỏng các tệp cấu hình, vì vậy thường nên trá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 điều khiển hành vi của lệnh sudo là /etc/sudoers. Tệp này xác định ai có thể chạy lệnh nào bằng sudo.
Ví dụ, nó cho phép kiểm soát truy cập chi tiết như cho phép một người dùng chỉ chạy một số lệnh nhất định bằng sudo.
Sự linh hoạt này cho phép tuân thủ nguyên tắc tối thiểu quyền, chỉ cấp cho người dùng những quyền tối thiểu họ cần.
Chỉnh sửa an toàn với lệnh visudo
Bạn không bao giờ nên chỉnh sửa /etc/sudoers trực tiếp bằng trình soạn thảo văn bản.
Một lỗi cú pháp trong tệp này có thể vô hiệu hoá sudo hoàn toàn, khiến việc khôi phục hệ thống trở nên khó khăn. Vì lý do này, bạn nên chỉnh sửa nó bằng lệnh visudo.
sudo visudo
visudo thực hiện kiểm tra cú pháp trước khi lưu, cho phép thay đổi cấu hình một cách an toàn.
Cú pháp cơ bản và các ví dụ cấu hình
Cú pháp cơ bản của tệp sudoers như sau:
username hostname = (run-as user) allowed commands
Ví dụ:
alice ALL=(ALL:ALL) ALL
Cấu hình này cho phép người dùng alice chạy mọi lệnh dưới quyền bất kỳ người dùng nào trên mọi máy chủ.
Một ví dụ hạn chế hơn:
bob ALL=(ALL) /usr/bin/systemctl restart nginx
Điều này cho phép người dùng bob chỉ chạy lệnh khởi động lại nginx bằng sudo.
Kiểm soát dựa trên nhóm: Nhóm sudo
Trên nhiều bản phân phối như Ubuntu, người dùng thuộc nhóm sudo được phép sử dụng sudo.
%sudo ALL=(ALL:ALL) ALL
Sử dụng %sudo cho phép quản lý quyền dựa trên nhóm.
Để thêm người dùng vào nhóm sudo:
sudo usermod -aG sudo username
Tùy chọn NOPASSWD và các cân nhắc bảo mật
Nếu việc nhập mật khẩu mỗi lần là bất tiện, bạn có thể dùng tùy chọn NOPASSWD để bỏ qua xác thực mật khẩu.
alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
Điều này cho phép alice khởi động lại nginx mà không cần nhập mật khẩu.
Tuy nhiên, điều này làm tăng rủi ro bảo mật, vì vậy rất quan trọng để giới hạn việc sử dụng chỉ cho các lệnh cụ thể. Không nên sử dụng NOPASSWD với ALL.
4. Sử dụng sudo nâng cao
Chạy lệnh dưới quyền người dùng cụ thể
Mặc dù sudo thường chạy lệnh dưới quyền root, nó cũng có thể thực thi lệnh dưới quyền người dùng khác.
Ví dụ, để chạy một lệnh dưới quyền người dùng www-data:
sudo -u www-data whoami
Kết quả sẽ là www-data.
Điều này hữu ích để xác minh quyền và sự khác biệt môi trường giữa các người dùng.
Sử dụng sudo với chuyển hướng và pipe
Một điểm gây nhầm lẫn phổ biến cho người mới là kết hợp sudo với chuyển hướng (>) hoặc pipe (|).
Lệnh sau trông có vẻ đúng nhưng không hoạt động như mong đợi:
.
sudo echo "test" > /etc/test.conf
Trong khi echo chạy với sudo, việc chuyển hướng được xử lý bởi shell như một người dùng bình thường.
Cách tiếp cận đúng là sử dụng tee:
echo "test" | sudo tee /etc/test.conf
Sử dụng sudo trong Script
Khi script yêu cầu quyền quản trị, chỉ thêm sudo vào các lệnh cần thiết.
Ví dụ (install.sh):
#!/bin/bash
echo "Installing package..."
sudo apt install -y nginx
Một mẫu phổ biến khác là kiểm tra xem script có được chạy dưới quyền root hay không:
if [ "$EUID" -ne 0 ]; then
echo "This script must be run as root"
exit 1
fi
Các phím tắt hữu ích của sudo
sudo !!Chạy lại lệnh trước đó với sudo.apt update sudo !!
sudo -kXóa bộ nhớ đệm thông tin xác thực sudo.sudo -vGia hạn phiên sudo hiện tại.
5. Bảo mật và Thực hành tốt
Tuân thủ Nguyên tắc Quyền tối thiểu
Mục tiêu chính của việc sử dụng sudo là vận hành hệ thống với các quyền tối thiểu cần thiết.
- Chỉ cho phép các lệnh cụ thể qua sudo
- Hạn chế việc sử dụng
NOPASSWD - Quản lý các quản trị viên thông qua các nhóm
Ghi nhật ký và Kiểm toán
sudo ghi lại tất cả các lệnh đã thực thi.
/var/log/auth.log(Ubuntu/Debian)journalctl(hệ thống dựa trên systemd)grep 'sudo' /var/log/auth.logjournalctl _COMM=sudo

Lỗ hổng sudo trong thực tế (CVE-2021-3156)
Mặc dù sudo rất đáng tin cậy, nhưng đã có những lỗ hổng nghiêm trọng được phát hiện trong quá khứ.
Một ví dụ đáng chú ý là CVE-2021-3156 (Baron Samedit), cho phép người dùng cục bộ có được quyền root trong một số điều kiện nhất định.
- Giữ sudo luôn được cập nhật
- Theo dõi các thông báo bảo mật
Thay thế sudo: doas
Một số môi trường tập trung vào bảo mật sử dụng doas như một lựa chọn thay thế đơn giản hơn cho sudo.
doas apt update
Ví dụ cấu hình:
permit nopass :wheel
6. Các lỗi thường gặp và Khắc phục
Người dùng không có trong tệp sudoers
username is not in the sudoers file. This incident will be reported.
Điều này có nghĩa là người dùng không có quyền sudo.
sudo usermod -aG sudo username
Từ chối quyền với chuyển hướng
echo "test" | sudo tee /etc/test.conf
Tệp sudoers bị hỏng
pkexec visudo
sudo: không tìm thấy lệnh
apt update
apt install sudo
7. Câu hỏi thường gặp
Câu 1. Sự khác nhau giữa sudo và su là gì?
A: sudo nâng quyền các lệnh riêng lẻ, trong khi su chuyển đổi toàn bộ người dùng.
Câu 2. Mật khẩu root có cần thiết cho sudo không?
A: Không. Bạn nhập mật khẩu người dùng của mình.
Câu 3. Các nhật ký sudo được lưu ở đâu?
/var/log/auth.log/var/log/securejournalctl _COMM=sudo
Câu 4. Tôi đã làm hỏng tệp sudoers. Tôi nên làm gì?
Sử dụng chế độ khôi phục hoặc pkexec visudo.
Câu 5. Tôi có thể có quyền root mà không dùng sudo không?
Có, nhưng không được khuyến nghị.
Câu 6. Có an toàn khi chạy các ứng dụng GUI với sudo không?
Không. Hãy dùng pkexec thay thế.
8. Tóm tắt
Hiểu đúng sudo
sudo là một cơ chế kiểm soát truy cập quan trọng, không chỉ là một lệnh tiện lợi.
Sử dụng đúng ngăn ngừa vấn đề
- Sử dụng quyền tối thiểu
- Chỉnh sửa bằng
visudo - Xem lại nhật ký
Chọn phong cách vận hành phù hợp
Chọn các công cụ như sudo hoặc doas dựa trên chính sách bảo mật của bạn.
Lưu ý cuối cùng
Hiểu sudo là một bước nền tảng để thành thạo quản trị hệ thống Linux.



