Sổ tay kỹ thuật

User, group, sudo và quyền file – useradd, visudo, chmod, ACL

cheatsheet#linux#users#permissions#sudo· cập nhật 2026-11-06

Tra nhanh lệnh tạo/sửa user và group, cấp sudo giới hạn qua sudoers.d, chmod/chown và ACL cho thư mục dùng chung.

Sửa trang này
Mục lục

Lệnh dạng Ubuntu/Debian, cần sudo. useradd là tool cấp thấp (không tự tạo home nếu thiếu -m), adduser là wrapper hỏi tương tác. Hardening SSH xem SSH hardening.

User và group

Mục đích Lệnh
Tạo user có home, shell bash, thêm group sudo useradd -m -s /bin/bash -G sudo -c "Alice Nguyen" alice
Tạo user tương tác (Debian/Ubuntu) adduser alice
User hệ thống cho service, không login useradd -r -s /usr/sbin/nologin -d /var/lib/myapp -M myapp
Đặt mật khẩu passwd alice
Thêm vào group (giữ group cũ, phải có -a) usermod -aG docker alice
Gỡ khỏi group gpasswd -d alice docker
Xem uid, gid, các group id alice
Group hiện tại của phiên (chưa logout thì chưa thấy group mới) groups / newgrp docker
Khoá / mở khoá đăng nhập bằng mật khẩu usermod -L alice / usermod -U alice
Hết hạn tài khoản usermod -e 2026-12-31 alice
Xem chính sách mật khẩu / ép đổi lần đầu chage -l alice / chage -d 0 alice
Xoá user kèm home và mail spool userdel -r alice
Tạo group groupadd netops
Ai đang login / lịch sử login who / last -n 20

sudo

Mục đích Lệnh
Sửa sudoers an toàn (kiểm cú pháp trước khi lưu) visudo -f /etc/sudoers.d/netops
Kiểm tra cú pháp toàn bộ visudo -c
Xem user được phép gì sudo -l -U alice
Chạy với user khác sudo -u postgres psql
Shell root (login) sudo -i
Giữ biến môi trường cụ thể sudo --preserve-env=HTTPS_PROXY apt update
/etc/sudoers.d/netops
# Group netops: chỉ restart/xem trạng thái 2 service, không cần mật khẩu
%netops ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx
# User deploy: chạy mọi lệnh nhưng phải nhập mật khẩu
deploy  ALL=(ALL:ALL) ALL

Luôn sửa bằng visudo: file sudoers lỗi cú pháp làm mọi lệnh sudo hỏng. File trong /etc/sudoers.d/ có dấu . hoặc kết thúc bằng ~ bị bỏ qua; quyền nên là 0440. Cấp NOPASSWD cho lệnh có thể mở shell (vim, less, find, tar...) là cấp root.

Quyền file

Mục đích Lệnh
Đặt quyền dạng số (rw-r-----) chmod 640 app.conf
Thêm quyền thực thi cho owner chmod u+x run.sh
Thư mục cho group cùng ghi, file mới kế thừa group chmod 2775 /srv/shared (bit setgid)
Thư mục kiểu /tmp (chỉ owner xoá được file của mình) chmod 1777 /srv/drop (sticky bit)
Đổi owner và group, đệ quy chown -R deploy:www-data /var/www/app
Quyền khác nhau cho thư mục và file find /srv/app -type d -exec chmod 755 {} + và find /srv/app -type f -exec chmod 644 {} +
Xem quyền dạng số stat -c '%a %U:%G %n' /srv/app/*
Quyền từng cấp của đường dẫn (lỗi Permission denied) namei -l /srv/app/data/file.txt
Tìm file world-writable find / -xdev -type f -perm -0002 2>/dev/null
Tìm file SUID find / -xdev -perm -4000 -type f 2>/dev/null
umask hiện tại umask (022 → file 644, thư mục 755)

ACL (gói acl)

Mục đích Lệnh
Cho thêm một user quyền đọc/ghi setfacl -m u:alice:rw report.csv
Cho group quyền trên thư mục (X = execute chỉ cho thư mục) setfacl -R -m g:netops:rwX /srv/configs
ACL mặc định cho file tạo mới trong thư mục setfacl -d -m g:netops:rwX /srv/configs
Xem ACL getfacl /srv/configs
Gỡ một entry / gỡ hết setfacl -x u:alice report.csv / setfacl -b report.csv

ls -l hiện dấu + sau chuỗi quyền (drwxrwxr-x+) là có ACL. ACL không vượt được mask: getfacl dòng #effective: cho biết quyền thực tế.