Linux là một hệ điều hành nhiều người dùng, được thiết kế từ đầu để cho phép nhiều người dùng làm việc đồng thời. Hiểu cách quản lý người dùng và nhóm là điều cần thiết để quản trị hệ thống, bảo mật và cộng tác hiệu quả.
Trong phần này, chúng ta sẽ khám phá cách tạo và quản lý người dùng, làm việc với nhóm, định cấu hình xác thực và thiết lập môi trường người dùng.
Nguyên tắc cơ bản về người dùng và nhóm
Người dùng
Tài khoản người dùng đại diện cho một thực thể (một người hoặc dịch vụ) có thể truy cập hệ thống. Mỗi người dùng có:
- Tên người dùng duy nhất
- ID người dùng dạng số (UID)
- Một nhóm sơ cấp
- Một tập hợp tùy chọn của các nhóm thứ cấp
- Một thư mục nhà
- Đăng nhập shell
Nhóm
Các nhóm tổ chức những người dùng có nhu cầu tương tự. Mỗi nhóm có:
- Tên nhóm độc đáo
- ID nhóm số (GID)
- Danh sách người dùng thành viên
Nhóm đơn giản hóa việc quản lý quyền bằng cách cho phép bạn gán quyền cho nhiều người dùng cùng một lúc.
Các tập tin chính liên quan đến người dùng
Trước khi đi sâu vào các lệnh, hãy hiểu các tệp quan trọng lưu trữ thông tin người dùng và nhóm:
/etc/passwd
Tệp này chứa thông tin cơ bản về mỗi người dùng:
cat /etc/passwd | head -5
Mỗi dòng theo định dạng này:
username:x:UID:GID:comment:home_directory:shell
Ví dụ:
alice:x:1000:1000:Alice Smith:/home/alice:/bin/bash
x chỉ ra rằng mật khẩu được lưu trữ trong /etc/shadow.
/etc/bóng
Tệp này chứa thông tin mật khẩu được mã hóa và chỉ có root mới có thể đọc được:
sudo cat /etc/shadow | head -5
Mỗi dòng theo định dạng này:
username:encrypted_password:last_change:min_age:max_age:warn_period:inactive_period:expiration_date:reserved
Trường mật khẩu được mã hóa có thể là ! hoặc * nếu tài khoản bị khóa.
/etc/nhóm
Tệp này xác định các nhóm trên hệ thống:
cat /etc/group | head -5
Mỗi dòng theo định dạng này:
group_name:x:GID:user_list
Ví dụ:
developers:x:1001:alice,bob,charlie
/etc/gshadow
Tệp này chứa mật khẩu nhóm được mã hóa (nếu có) và chỉ có root mới có thể đọc được:
sudo cat /etc/gshadow | head -5
Lệnh quản lý người dùng
Xem thông tin người dùng
Nhận thông tin về người dùng hiện tại:
id
Nhận thông tin về một người dùng cụ thể:
id username
Hiển thị ai hiện đang đăng nhập:
who
Hiển thị thông tin đăng nhập chi tiết:
w
Hiển thị lần đăng nhập cuối cùng của người dùng:
last
Tạo người dùng
Tạo người dùng mới:
sudo useradd username
Điều này tạo ra một người dùng cơ bản với các cài đặt tối thiểu. Thông thường, bạn sẽ muốn có nhiều lựa chọn hơn:
sudo useradd -m -d /home/username -s /bin/bash -c "Full Name" username
Tùy chọn:
-m: Tạo thư mục chính-d: Chỉ định đường dẫn thư mục chính-s: Chỉ định thông tin đăng nhập shell-c: Thêm nhận xét (thường là tên đầy đủ của người dùng)-G: Thêm vào nhóm bổ sung
Một lệnh thân thiện hơn với người dùng là adduser (trên các hệ thống dựa trên Debian), có tính tương tác:
sudo adduser username
Đặt hoặc thay đổi mật khẩu của người dùng:
sudo passwd username
Sửa đổi người dùng
Sửa đổi người dùng hiện tại:
sudo usermod [options] username
Các tùy chọn phổ biến:
-c: Thay đổi trường bình luận-d: Thay đổi thư mục chính-g: Thay đổi nhóm chính-G: Đặt nhóm bổ sung-s: Thay đổi thông tin đăng nhập shell-L: Khóa tài khoản-U: Mở khóa tài khoản
Ví dụ:
# Change a user's shell
sudo usermod -s /bin/bash username
# Add a user to supplementary groups
sudo usermod -aG sudo,docker username
Tùy chọn -a với -G sẽ thêm vào các nhóm hiện có thay vì thay thế chúng.
Xóa người dùng
Xóa người dùng:
sudo userdel username
Xóa người dùng và thư mục chính của họ:
sudo userdel -r username
Tài khoản người dùng hết hạn
Đặt thời hạn tài khoản:
sudo usermod -e YYYY-MM-DD username
Buộc thay đổi mật khẩu vào lần đăng nhập tiếp theo:
sudo chage -d 0 username
Xem thông tin lão hóa tài khoản:
sudo chage -l username
Lệnh quản lý nhóm
Tạo nhóm
Tạo một nhóm mới:
sudo groupadd groupname
Với một GID cụ thể:
sudo groupadd -g 1005 groupname
Sửa đổi nhóm
Sửa đổi một nhóm:
sudo groupmod [options] groupname
Các tùy chọn phổ biến:
-g: Thay đổi GID-n: Thay đổi tên nhóm
Ví dụ:
# Rename a group
sudo groupmod -n new_name old_name
Xóa nhóm
Xóa một nhóm:
sudo groupdel groupname
Quản lý thành viên nhóm
Thêm người dùng vào nhóm:
sudo usermod -aG groupname username
Xóa người dùng khỏi nhóm:
sudo gpasswd -d username groupname
Liệt kê các nhóm mà người dùng thuộc về:
groups username
Thay đổi nhóm chính của người dùng:
sudo usermod -g groupname username
Lệnh sudo
Lệnh sudo cho phép người dùng thông thường thực thi các lệnh với đặc quyền nâng cao.
Hiểu sudo
Khi người dùng sử dụng sudo, họ tạm thời được cấp quyền của người dùng khác (thường là root) để thực thi một lệnh cụ thể. Điều này cung cấp một dấu vết kiểm tra và giới hạn thời gian dành cho các đặc quyền nâng cao.
Cách sử dụng cơ bản:
sudo command_to_run
Chạy lệnh với tư cách người dùng cụ thể:
sudo -u username command_to_run
Mở shell gốc:
sudo -i
Định cấu hình quyền truy cập sudo
Cấu hình sudo nằm trong /etc/sudoers và các tệp trong /etc/sudoers.d/. Luôn chỉnh sửa các tệp này bằng visudo để tránh lỗi cú pháp:
sudo visudo
Một mục sudo cơ bản:
username ALL=(ALL:ALL) ALL
Điều này cho phép username chạy bất kỳ lệnh nào với tư cách bất kỳ người dùng nào trên bất kỳ máy chủ nào.
Để cấp quyền truy cập mà không yêu cầu mật khẩu:
username ALL=(ALL:ALL) NOPASSWD: ALL
Để giới hạn các lệnh cụ thể:
username ALL=(ALL:ALL) /usr/bin/apt, /usr/bin/systemctl restart apache2
Cấp quyền truy cập sudo cho tất cả thành viên của nhóm:
%sudo ALL=(ALL:ALL) ALL
Hiểu cú pháp Sudoers
Cú pháp là:
user_list host_list=(user_list:group_list) command_list
user_list: Người dùng hoặc nhóm (có tiền tố %) áp dụng quy tắchost_list: Máy chủ áp dụng quy tắcuser_list:group_list: Người dùng/nhóm lệnh có thể được chạy dưới dạngcommand_list: Các lệnh có thể được thực thi
Giới hạn người dùng và kiểm soát tài nguyên
Linux cung cấp các cách để hạn chế tài nguyên người dùng:
/etc/security/limits.conf
Tệp này kiểm soát giới hạn tài nguyên cho người dùng và nhóm:
cat /etc/security/limits.conf
Mục ví dụ:
# Limit number of processes
username hard nproc 100
# Limit file size
@developers soft fsize 1000000
Các loại giới hạn:
soft: Người dùng có thể điều chỉnh đến giới hạn cứnghard: Giá trị tối đa, chỉ có thể điều chỉnh bằng root
Nguồn lực có thể bị hạn chế:
nproc: Số lượng tiến trìnhnofile: Số lượng file đang mởfsize: Kích thước tệp tối đacpu: thời gian CPUas: Không gian địa chỉ (bộ nhớ)
Kế toán quy trình
Để theo dõi hoạt động của người dùng, hãy cài đặt tính năng kế toán quy trình:
# On Debian/Ubuntu
sudo apt install acct
# On Fedora/RHEL/CentOS
sudo dnf install psacct
Bắt đầu dịch vụ:
sudo systemctl enable --now acct
Xem tóm tắt sử dụng lệnh:
sudo sa
Xem hoạt động của người dùng:
sudo lastcomm username
Hệ thống xác thực
Linux sử dụng Mô-đun xác thực có thể cắm (PAM) để xác thực linh hoạt:
Cấu hình PAM
Các tệp cấu hình PAM có trong /etc/pam.d/:
ls -l /etc/pam.d/
Mỗi tệp cấu hình xác thực cho một dịch vụ khác nhau.
Chính sách mật khẩu
Đặt chính sách mật khẩu trong /etc/security/pwquality.conf hoặc /etc/pam.d/common-password:
# View password quality configuration
cat /etc/security/pwquality.conf
Cài đặt chung:
minlen: Độ dài mật khẩu tối thiểuminclass: Các lớp ký tự tối thiểu (chữ thường, chữ hoa, chữ số, đặc biệt)maxrepeat: Ký tự lặp lại tối đareject_username: Từ chối mật khẩu chứa tên người dùngenforce_for_root: Áp dụng chính sách cho người dùng root
Kiểm soát truy cập đăng nhập
Định cấu hình hạn chế đăng nhập trong /etc/security/access.conf:
sudo nano /etc/security/access.conf
Quy tắc ví dụ:
- : ALL EXCEPT root : cron
+ : admins : ALL
- : ALL : ALL
Điều này từ chối quyền truy cập cron vào tất cả ngoại trừ root, cho phép nhóm quản trị viên từ mọi nơi và từ chối tất cả các quyền truy cập khác.
Xác thực khóa SSH
Khóa SSH cung cấp xác thực an toàn mà không cần mật khẩu:
Tạo khóa SSH
Tạo cặp khóa:
ssh-keygen -t ed25519 -C "your_email@example.com"
Hoặc với RSA:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Thêm khóa vào máy chủ
Sao chép khóa chung của bạn vào máy chủ từ xa:
ssh-copy-id username@remote_host
Hoặc bằng tay:
cat ~/.ssh/id_ed25519.pub | ssh username@remote_host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Cấu hình máy chủ SSH
Định cấu hình cài đặt SSH trong /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
Cài đặt bảo mật phổ biến:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Sau khi thay đổi, hãy khởi động lại dịch vụ SSH:
sudo systemctl restart sshd
Cấu hình môi trường người dùng
Môi trường toàn hệ thống
Các biến môi trường toàn hệ thống được đặt trong một số tệp:
/etc/environment: Cặp KEY=VALUE đơn giản/etc/profile: Được thực thi để đăng nhập shell/etc/profile.d/*.sh: Tập lệnh được thực thi theo hồ sơ/etc/bash.bashrc: Được thực thi cho bash tương tác không đăng nhập shell
Môi trường người dùng
Cấu hình môi trường dành riêng cho người dùng:
~/.profile: Được thực thi để đăng nhập shell~/.bashrc: Được thực thi cho bash tương tác không đăng nhập shell~/.bash_profilehoặc~/.bash_login: Thay thế cho.profilecho bash
Thêm các biến môi trường cá nhân trong ~/.bashrc:
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Cài đặt người dùng mặc định
Thư mục /etc/skel/ chứa các tệp được sao chép vào thư mục chính của người dùng mới:
ls -la /etc/skel/
Tùy chỉnh các tệp này để cung cấp cấu hình mặc định cho người dùng mới.
Mặc định tài khoản người dùng
Tệp /etc/login.defs kiểm soát mặc định cho tài khoản người dùng:
cat /etc/login.defs
Cài đặt quan trọng:
PASS_MAX_DAYS: Tuổi mật khẩu tối đaPASS_MIN_DAYS: Tuổi mật khẩu tối thiểuPASS_WARN_AGE: Ngày cảnh báo hết hạn mật khẩuUID_MIN,UID_MAX: Phạm vi dành cho ID người dùng thông thườngGID_MIN,GID_MAX: Phạm vi dành cho ID nhóm thông thườngCREATE_HOME: Có tạo thư mục chính hay khôngUMASK: Quyền tạo tệp mặc định
Cài đặt mặc định cho useradd nằm trong /etc/default/useradd:
cat /etc/default/useradd
Ví dụ thực tế
Hãy cùng xem qua một số tình huống quản lý người dùng trong thế giới thực:
Thành lập nhóm phát triển
Tạo nhóm phát triển có quyền truy cập chung vào thư mục dự án:
# Create a developers group
sudo groupadd developers
# Create the project directory
sudo mkdir -p /opt/projects/web-app
# Set ownership and permissions
sudo chown root:developers /opt/projects/web-app
sudo chmod 2775 /opt/projects/web-app
# Create a user and add to the group
sudo useradd -m -s /bin/bash -c "Sarah Developer" sarah
sudo usermod -aG developers sarah
# Set password for the new user
sudo passwd sarah
Thư mục sẽ có các quyền sau:
- quyền sở hữu nhóm của
developers - quyền truy cập ghi nhóm
- bit setgid (2) để đảm bảo các file mới trong thư mục kế thừa nhóm
developers
Thiết lập người dùng bị hạn chế
Tạo người dùng có quyền truy cập hạn chế:
# Create restricted shell directory
sudo mkdir /home/restricted
sudo cp /bin/bash /home/restricted/rbash
sudo chmod 755 /home/restricted/rbash
# Create a user with restricted shell
sudo useradd -m -d /home/guest -s /home/restricted/rbash guest
# Create a bin directory with allowed commands
sudo mkdir /home/guest/bin
sudo ln -s /bin/ls /home/guest/bin/
sudo ln -s /bin/cat /home/guest/bin/
# Set ownership
sudo chown -R guest:guest /home/guest/bin
# Add to .bashrc to restrict PATH
echo 'PATH=$HOME/bin' | sudo tee -a /home/guest/.bashrc
echo 'export PATH' | sudo tee -a /home/guest/.bashrc
sudo chown guest:guest /home/guest/.bashrc
Điều này tạo ra một người dùng bị hạn chế, người chỉ có thể chạy các lệnh ls và cat.
Thiết lập người dùng dịch vụ
Tạo người dùng không đăng nhập để chạy dịch vụ:
# Create user without home directory or login shell
sudo useradd --system --no-create-home --shell /usr/sbin/nologin appservice
# Create application directory
sudo mkdir -p /var/www/app
sudo chown appservice:appservice /var/www/app
# Create systemd service file
sudo tee /etc/systemd/system/app.service > /dev/null << 'EOF'
[Unit]
Description=My Application Service
After=network.target
[Service]
User=appservice
Group=appservice
WorkingDirectory=/var/www/app
ExecStart=/usr/bin/python3 /var/www/app/app.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
Điều này tạo ra một người dùng hệ thống có thể chạy một dịch vụ nhưng không thể đăng nhập một cách tương tác.
Thiết lập hạn ngạch đĩa
Giới hạn dung lượng ổ đĩa mà người dùng có thể sử dụng:
# Install quota tools
sudo apt install quota
# Enable quotas in /etc/fstab for the user partition
# Add usrquota to the mount options, e.g.:
# UUID=xxxx / ext4 defaults,usrquota 0 1
# Remount the file system
sudo mount -o remount /
# Create quota files and turn on quotas
sudo quotacheck -cum /
sudo quotaon /
# Set quota for a user (soft limit: 500MB, hard limit: 550MB)
sudo setquota -u username 500000 550000 0 0 /
Kiểm tra việc sử dụng hạn ngạch:
sudo quota -u username
Quản lý người dùng môi trường đám mây
Khi làm việc với máy chủ đám mây, bạn thường cần thiết lập người dùng. Đây là cách thực hiện trên DigitalOcean Droplet:
- Tạo một Droplet mới (sử dụng liên kết này với khoản tín dụng $200)
- Kết nối với quyền root
- Tạo người dùng không phải root với đặc quyền sudo:
# Create user
adduser newuser
# Add to sudo group on Ubuntu
usermod -aG sudo newuser
# Add to wheel group on CentOS/RHEL
# usermod -aG wheel newuser
# Create SSH directory and set permissions
mkdir -p /home/newuser/.ssh
chmod 700 /home/newuser/.ssh
# Add your public key
echo "your_public_key_here" > /home/newuser/.ssh/authorized_keys
chmod 600 /home/newuser/.ssh/authorized_keys
chown -R newuser:newuser /home/newuser/.ssh
# Test that you can log in as the new user
# ssh newuser@your_server_ip
Quá trình này tạo ra một người dùng an toàn, không phải root, có thể thực thi các lệnh quản trị bằng sudo.
Tiến về phía trước
Bây giờ bạn đã hiểu cách tạo và quản lý người dùng và nhóm, kiểm soát quyền truy cập bằng quyền, định cấu hình xác thực và thiết lập môi trường người dùng. Những kỹ năng này rất cần thiết để duy trì các hệ thống Linux an toàn và được tổ chức tốt.
Trong phần tiếp theo, chúng ta sẽ khám phá cách quản lý quy trình, tìm hiểu cách giám sát, kiểm soát và tối ưu hóa các quy trình chạy trên hệ thống Linux của bạn.
Quản lý người dùng và nhóm là nền tảng cho thiết kế nhiều người dùng của Linux. Cho dù bạn đang quản lý hệ thống cá nhân hay máy chủ doanh nghiệp, những khái niệm và lệnh này sẽ giúp bạn duy trì tính bảo mật, tổ chức và hiệu quả.