Computer >> Hướng Dẫn Máy Tính >  >> Điện Thoại Thông Minh >> Linux

Giới thiệu lệnh sudo và cấu hình sudoers trong Linux

Hướng dẫn hiểu và cấu hình sudo – cho phép user thường chạy lệnh với đặc quyền root, kiểm soát chi tiết lệnh được phép.

sudo là gì?

sudo (superuser do) cho phép admin cấp quyền root cho user/nhóm cụ thể, giới hạn theo lệnh, host, không cần chia sẻ mật khẩu root. Ubuntu mặc định khóa root, dùng sudo cho admin.

Cấu hình với visudo (BẮT BUỘC)

# visudo
  • Mở /etc/sudoers an toàn: kiểm tra cú pháp, khóa file tránh edit trùng.
  • Editor mặc định: EDITOR=vim visudo hoặc EDITOR=nano visudo.

Cú pháp sudoers

user    host=(runas)  commands
  • user: User hoặc %group (group).
  • host: Hostname (ALL = mọi host).
  • (runas): User/group chạy lệnh (ALL = bất kỳ, thường root).
  • commands: Lệnh được phép (ALL = mọi lệnh, hoặc danh sách cách nhau dấu phẩy).

Ví dụ cấp quyền

Quyền root đầy đủ (như user admin Ubuntu)

calvin ALL=(ALL) ALL

Chỉ cho phép restart Apache

calvin ALL=(ALL) /etc/init.d/httpd restart

Cho phép nhiều lệnh cụ thể

calvin ALL=(ALL) /etc/init.d/httpd restart, /etc/init.d/httpd stop, /usr/bin/systemctl reload nginx

Chạy lệnh cụ thể KHÔNG cần mật khẩu

calvin ALL=(ALL) NOPASSWD: /etc/init.d/httpd restart

Nhóm admin toàn quyền không cần mật khẩu (NHƯ UBUNTU DEFAULT)

%sudo ALL=(ALL) NOPASSWD: ALL

Kiểm tra quyền sudo của user hiện tại

$ sudo -l
Matching Defaults entries for calvin on host:
    env_reset, mail_badpass, secure_path=...

User calvin may run the following commands on host:
    (ALL) ALL

Thực thi lệnh với user khác

# sudo -u www-data whoami
www-data
# sudo -u postgres psql

Bảo mật & Best Practices

  • Luôn dùng visudo – không edit trực tiếp /etc/sudoers.
  • Tạo file riêng trong /etc/sudoers.d/ cho mỗi app/user – dễ quản lý, không hỏng file chính:
# echo 'calvin ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx' > /etc/sudoers.d/calvin-nginx
# chmod 440 /etc/sudoers.d/calvin-nginx
  • Giới hạn lệnh cụ thể – tránh ALL khi có thể.
  • Không dùng NOPASSWD trừ script tự động hóa (cron, CI/CD) – và phải hạn chế lệnh.
  • Log sudo: Mặc định log vào /var/log/auth.log (Debian) hoặc /var/log/secure (RHEL).
  • Timestamp timeout: Mặc định 15 phút không nhập lại pass. Tùy chỉnh: Defaults timestamp_timeout=5 (phút).

Khắc phục sự cố thường gặp

  • Syntax error trong sudoers: Dùng pkexec visudo (nếu polkit cho phép) hoặc boot single-user mode / live USB sửa.
  • User không trong sudoers: Root thêm user vào group wheel (RHEL) hoặc sudo (Debian): usermod -aG sudo calvin.