Cách khắc phục lỗi 'User is not in the sudoers file' trên Linux

beginner🐧 Linux2026-04-04| Các bản phân phối Linux (Ubuntu, Debian, CentOS, RHEL, Fedora, Arch Linux)

Error Message

User is not in the sudoers file. This incident will be reported.
#linux#sudo#quản trị hệ thống#ubuntu#centos

Rào cản lúc 2 giờ sáng

Bạn đang mải mê cấu hình máy chủ, có lẽ là đang cố gắng vá một lỗ hổng bảo mật hoặc cài đặt một Docker container mới. Bạn nhập sudo apt update, nhấn enter và cung cấp mật khẩu của mình. Thay vì danh sách các mirror như thường lệ, bạn nhận được một lời từ chối thẳng thừng:

User is not in the sudoers file. This incident will be reported.

Mặc dù cách diễn đạt có vẻ nghiêm trọng, nhưng không có cảnh sát nào đến gõ cửa nhà bạn đâu. "Sự cố" này đơn giản chỉ là một dòng log 2KB được ghi vào /var/log/auth.log (trên Debian/Ubuntu) hoặc /var/log/secure (trên RHEL/CentOS). Vấn đề thực sự là tài khoản người dùng của bạn thiếu "chìa khóa vạn năng" cụ thể cần thiết để chạy các lệnh dưới quyền root.

Cách khắc phục trong 30 giây

Nếu bạn có mật khẩu root hoặc quyền truy cập vào một tài khoản admin khác, bạn có thể giải quyết vấn đề này trong vài giây. Chạy các lệnh sau để cấp cho người dùng của bạn các quyền cần thiết:

  • Nâng quyền lên root: su -
  • Dành cho Ubuntu/Debian/Arch: usermod -aG sudo username
  • Dành cho CentOS/RHEL/Fedora: usermod -aG wheel username
  • Đăng xuất và đăng nhập lại để cập nhật tư cách thành viên nhóm của bạn.

Tại sao Linux chặn bạn

Linux dựa vào tiện ích sudo (superuser do) để duy trì nguyên tắc đặc quyền tối thiểu. Thay vì mọi người đều đăng nhập bằng root—một rủi ro bảo mật khổng lồ—người dùng được cấp quyền quản trị tạm thời. Tệp /etc/sudoers đóng vai trò là người gác cổng cho các quyền này.

Lỗi của bạn xảy ra vì tên người dùng của bạn không được liệt kê trong tệp đó và bạn không thuộc nhóm nào được cấp quyền truy cập. Hầu hết các hệ thống mặc định sử dụng nhóm sudo hoặc wheel để quản lý việc này. Nếu bạn không ở trong các nhóm đó, hệ thống sẽ coi bạn là một người dùng tiêu chuẩn bị hạn chế quyền.

Các phương pháp khôi phục quyền truy cập

Phương pháp 1: Sử dụng tư cách thành viên nhóm

Thêm người dùng vào một nhóm quản trị được định nghĩa trước là giải pháp gọn gàng nhất. Nó giúp tệp sudoers ngăn nắp và dễ dàng kiểm tra (audit).

Trên Ubuntu và Debian:

su -
usermod -aG sudo your_username

Trên CentOS, Fedora, and RHEL:

su -
usermod -aG wheel your_username

Cảnh báo quan trọng: Luôn sử dụng cờ -a (append) cùng với -G. Nếu bạn chạy usermod -G wheel username mà không có -a, bạn sẽ vô tình xóa người dùng đó khỏi tất cả các nhóm khác mà họ đang tham gia, bao gồm cả docker, vboxusers, hoặc www-data.

Phương pháp 2: Chỉnh sửa tệp Sudoers một cách an toàn

Đôi khi bạn cần cấp quyền cho một người dùng cụ thể mà không muốn đưa họ vào một nhóm quản trị chung. Để làm điều này, bạn phải chỉnh sửa /etc/sudoers. Tuy nhiên, bạn không bao giờ được mở tệp này bằng các trình soạn thảo thông thường như nano hoặc vim.

Thay vào đó, hãy sử dụng visudo. Công cụ này sẽ khóa tệp để ngăn các thay đổi khác và quan trọng hơn là kiểm tra cú pháp của bạn trước khi lưu. Chỉ cần thiếu một dấu cách trong tệp này cũng có thể khiến mọi người dùng không thể truy cập sudo.

  • Mở trình soạn thảo: su -c "visudo"
  • Tìm phần quy định cho người dùng (user specifications).
  • Thêm dòng này vào cuối:

your_username ALL=(ALL:ALL) ALL

  
  - Lưu và thoát. `visudo` sẽ thông báo cho bạn nếu bạn mắc lỗi đánh máy có thể làm hỏng hệ thống.

### Phương pháp 3: Khắc phục khẩn cấp khi "Không có mật khẩu Root"
Nếu bạn bị mất mật khẩu root và không có quyền sudo, bạn thực sự đã bị khóa bên ngoài. Trên một nhà cung cấp đám mây như AWS, bạn có thể cần gắn volume vào một instance khác. Nếu bạn có quyền truy cập vật lý (hoặc console ảo), bạn có thể khởi động vào root shell:

  - Khởi động lại máy và nhấn phím `Shift` hoặc `Esc` để hiển thị menu GRUB.
  - Chọn kernel của bạn và nhấn `e` để chỉnh sửa các tham số khởi động.
  - Tìm dòng bắt đầu bằng `linux`. Thêm `rw init=/bin/bash` vào cuối dòng.
  - Nhấn `Ctrl+X` để khởi động. Bạn sẽ vào được dấu nhắc lệnh root mà không bị hỏi mật khẩu.
  - Thêm người dùng của bạn trở lại nhóm: `usermod -aG sudo your_username`.
  - Nhập `exec /sbin/init` để tiếp tục quá trình khởi động bình thường.

## Xác minh thay đổi
Các thay đổi về nhóm không áp dụng cho phiên làm việc hiện tại của bạn. Bạn phải đăng xuất hoàn toàn hoặc chạy `su - your_username` để bắt đầu một phiên mới. Để xác minh, hãy chạy:

groups


Trên Ubuntu, bạn sẽ thấy `27(sudo)` trong kết quả trả về. Cuối cùng, hãy kiểm tra bằng một lệnh đơn giản: `sudo whoami`. Nếu terminal hiển thị `root`, quyền hạn của bạn đã được khôi phục.

## Các thực hành tốt nhất cho tương lai
Quản lý quyền trong Linux là một nghệ thuật cân bằng. Khi khắc phục các sự cố này, tôi thường sử dụng [Unix Permissions Calculator](https://toolcraft.app/en/tools/developer/unix-permissions) để hình dung cách các giá trị `chmod` như `755` hoặc `664` ảnh hưởng đến các cấp độ người dùng khác nhau. Đó là một cách tuyệt vời để tránh sự cám dỗ "cứ 777 cho xong", vốn tạo ra những lỗ hổng bảo mật khổng lồ.

Để tránh bị khóa một lần nữa:

  - **Giữ một admin dự phòng:** Luôn đảm bảo ít nhất hai tài khoản có quyền truy cập sudo.
  - **Quy tắc "Terminal thứ hai":** Khi chỉnh sửa `/etc/sudoers`, hãy giữ cửa sổ terminal hiện tại của bạn luôn mở. Mở một cửa sổ *thứ hai* và kiểm tra `sudo` ở đó. Nếu bạn làm hỏng thứ gì đó, bạn vẫn còn cửa sổ đầu tiên để sửa lỗi.
  - **Ưu tiên sử dụng nhóm:** Quản lý quyền truy cập thông qua các nhóm `wheel` hoặc `sudo` ít gây lỗi hơn đáng kể so với việc chỉnh sửa tệp `sudoers` cho mỗi người dùng mới.

Related Error Notes