用户与权限管理

用户管理

用户信息文件

文件说明
/etc/passwd用户账户信息
/etc/shadow用户密码信息
/etc/group组账户信息
/etc/gshadow组密码信息

/etc/passwd格式

username:x:UID:GID:description:home:shell

# 示例
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

/etc/shadow格式

username:encrypted_password:lastchg:min:max:warn:inactive:expire:reserved

# 示例
root:$6$hash...:18600:0:99999:7:::

用户管理命令

# 创建用户
useradd [选项] 用户名
useradd -m -s /bin/bash username    # 创建家目录,指定shell
useradd -m -d /data/home username   # 指定家目录
useradd -G wheel,docker username     # 加入附加组
useradd -u 1001 username             # 指定UID
useradd -e 2026-12-31 username       # 设置过期日期
useradd -f 30 username               # 密码过期后30天禁用账户
 
# 修改用户
usermod [选项] 用户名
usermod -l newname oldname           # 修改用户名
usermod -d /new/home username        # 修改家目录
usermod -s /bin/zsh username         # 修改shell
usermod -aG docker username          # 添加到附加组
usermod -G "" username               # 清空附加组
usermod -L username                  # 锁定用户
usermod -U username                  # 解锁用户
usermod -e 2026-12-31 username       # 设置过期日期
 
# 删除用户
userdel username                     # 删除用户(保留家目录)
userdel -r username                  # 删除用户和家目录
userdel -rf username                 # 强制删除
 
# 查看用户信息
id username                          # 显示UID、GID和组
id -u username                       # 只显示UID
id -G username                       # 显示所有GID
finger username                      # 显示详细信息
getent passwd username               # 查看用户记录

密码管理

# 修改密码
passwd                               # 修改当前用户密码
passwd username                      # 修改指定用户密码
 
# 密码状态
passwd -S username                   # 查看密码状态
passwd -l username                   # 锁定密码
passwd -u username                   # 解锁密码
passwd -d username                   # 删除密码
passwd -e username                   # 强制下次登录修改密码
passwd -n 7 username                 # 密码最小使用天数
passwd -x 90 username                # 密码最大有效天数
passwd -w 7 username                 # 密码过期前警告天数
passwd -i 30 username                # 密码过期后禁用天数
 
# 批量修改密码
echo "username:password" | chpasswd
 
# 密码策略查看和设置
chage -l username                    # 查看密码策略
chage -M 90 username                 # 最大有效期
chage -m 7 username                  # 最小使用天数
chage -W 7 username                  # 警告天数
chage -I 30 username                 # 禁用天数
chage -E 2026-12-31 username         # 账户过期日期
chage -d 0 username                  # 强制修改密码

组管理

/etc/group格式

groupname:x:GID:members

# 示例
wheel:x:10:user1,user2
docker:x:998:user1

组管理命令

# 创建组
groupadd groupname
groupadd -g 1001 groupname           # 指定GID
groupadd -r groupname                # 创建系统组
 
# 修改组
groupmod -n newname oldname          # 修改组名
groupmod -g 1002 groupname           # 修改GID
 
# 删除组
groupdel groupname
 
# 管理组成员
gpasswd -a user groupname            # 添加用户到组
gpasswd -d user groupname            # 从组中移除用户
gpasswd -M user1,user2 groupname     # 设置组成员列表
gpasswd -A admin groupname           # 设置组管理员
 
# 查看组信息
groups username                      # 查看用户所属组
getent group groupname               # 查看组记录

用户组成员关系

# 查看用户所属的所有组
groups username
id -Gn username
 
# 查看组的所有成员
getent group groupname | cut -d: -f4
grep groupname /etc/group | cut -d: -f4
 
# 查看所有用户
cut -d: -f1 /etc/passwd
getent passwd | cut -d: -f1
 
# 查看所有组
cut -d: -f1 /etc/group
getent group | cut -d: -f1

文件权限

权限表示

# 符号表示
-rwxr-xr--
-      文件类型(-文件 d目录 l链接)
rwx    所有者权限
r-x    组权限
r--    其他用户权限

# 数字表示
r=4, w=2, x=1
rwx = 4+2+1 = 7
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4

权限管理命令

# 查看权限
ls -la file
stat file
 
# 修改权限
chmod 755 file                       # 数字方式
chmod u+x file                       # 给所有者添加执行权限
chmod g-w file                       # 移除组的写权限
chmod o=r file                       # 设置其他用户只读
chmod a+r file                       # 所有人添加读权限
chmod -R 755 directory/              # 递归修改
 
# 修改所有者
chown user file                      # 修改所有者
chown user:group file                # 修改所有者和组
chown :group file                    # 只修改组
chgrp group file                     # 修改组
chown -R user:group directory/       # 递归修改

特殊权限

# SUID (Set User ID) - 4
# 执行时以文件所有者身份运行
chmod u+s file                       # 添加SUID
chmod 4755 file                      # 数字方式
# 示例: /usr/bin/passwd
 
# SGID (Set Group ID) - 2
# 目录下创建的文件继承目录的组
chmod g+s directory                  # 添加SGID
chmod 2755 directory                 # 数字方式
 
# Sticky Bit - 1
# 目录下只有文件所有者才能删除文件
chmod +t directory                   # 添加Sticky Bit
chmod 1777 directory                 # 数字方式
# 示例: /tmp
 
# 查找特殊权限文件
find / -perm -4000 -type f 2>/dev/null    # SUID文件
find / -perm -2000 -type f 2>/dev/null    # SGID文件
find / -perm -1000 -type d 2>/dev/null    # Sticky目录

默认权限与umask

# 查看umask
umask
umask -S                             # 符号显示
 
# 设置umask
umask 022                            # 临时设置
# 文件默认权限: 666 - 022 = 644
# 目录默认权限: 777 - 022 = 755
 
# 永久设置(在~/.bashrc或/etc/profile)
umask 027

sudo权限管理

sudo配置

# 编辑sudo配置
visudo                               # 安全编辑sudoers
visudo -c                            # 检查语法
 
# 配置文件位置
/etc/sudoers
/etc/sudoers.d/*.conf

sudoers语法

# 格式: 用户 主机=(运行身份) 命令

# 基本规则
root    ALL=(ALL) ALL                # root可以以任何身份执行任何命令

# 组规则(%开头)
%wheel  ALL=(ALL) ALL                # wheel组可以执行所有命令
%sudo   ALL=(ALL:ALL) ALL            # sudo组可以执行所有命令

# 免密码
username ALL=(ALL) NOPASSWD: ALL     # 不需要密码
%wheel  ALL=(ALL) NOPASSWD: ALL      # 组免密码

# 限制命令
username ALL=(ALL) /usr/bin/systemctl restart nginx
username ALL=(ALL) /usr/bin/apt, /usr/bin/dpkg

# 排除命令
username ALL=(ALL) ALL, !/usr/bin/su, !/usr/bin/bash

# 指定运行身份
username ALL=(root) /usr/bin/cat /etc/shadow

# 别名定义
User_Alias ADMINS = user1, user2, user3
Cmnd_Alias SOFTWARE = /usr/bin/apt, /usr/bin/dpkg, /usr/bin/snap
ADMINS ALL=(ALL) SOFTWARE

sudo使用

# 基本使用
sudo command                         # 以root执行命令
sudo -u username command             # 以指定用户执行
sudo -g groupname command            # 以指定组执行
 
# 查看权限
sudo -l                              # 列出当前用户可执行的命令
sudo -ll                             # 详细列表
 
# 其他选项
sudo -i                              # 模拟登录shell
sudo -s                              # 执行shell
sudo -k                              # 清除时间戳(下次需要密码)
sudo -v                              # 更新时间戳

ACL访问控制列表

启用ACL

# 检查是否支持ACL
getfacl file
setfacl -m u:user:rwx file           # 测试
 
# 挂载时启用ACL
mount -o acl /dev/sda1 /mnt
# 或在fstab中添加acl选项

ACL操作

# 查看ACL
getfacl file
getfacl -d directory                 # 查看默认ACL
 
# 设置ACL
setfacl -m u:username:rwx file       # 设置用户ACL
setfacl -m g:groupname:rx file       # 设置组ACL
setfacl -m o::r file                 # 设置其他用户ACL
setfacl -m m::rwx file               # 设置掩码
 
# 设置默认ACL(目录)
setfacl -d -m u:username:rwx directory
 
# 删除ACL
setfacl -x u:username file           # 删除用户ACL
setfacl -x g:groupname file          # 删除组ACL
setfacl -b file                      # 删除所有ACL
setfacl -k directory                 # 删除默认ACL
 
# 复制ACL
getfacl file1 | setfacl --set=file=- file2

用户切换

# su切换用户
su username                          # 切换用户
su - username                        # 切换用户并加载环境
su -                                 # 切换到root
su -c "command" username             # 以指定用户执行命令
 
# sudo切换
sudo -i                              # 模拟root登录
sudo -u username -i                  # 模拟指定用户登录

💡 权限管理建议:

  • 遵循最小权限原则
  • 定期审计用户和权限
  • 使用sudo而非直接root登录
  • 重要文件设置适当权限

🔗 相关笔记: 02.03_系统管理 07.01_系统安全 99.02_常见配置文件