用户和权限管理
用户账户基础
1. 用户类型
系统用户分类
# root用户 (UID = 0)
# 系统管理员,拥有最高权限
# 系统用户 (UID 1-999)
# 用于运行系统服务,如www-data、mysql等
# 普通用户 (UID >= 1000)
# 日常使用的用户账户
查看用户信息
id # 显示当前用户信息
id username # 显示指定用户信息
whoami # 显示当前用户名
who # 显示已登录用户
w # 显示用户活动信息
last # 显示用户登录历史
2. 用户配置文件
/etc/passwd - 用户账户信息
cat /etc/passwd # 查看所有用户
# 格式:用户名:密码:UID:GID:描述:家目录:Shell
root:x:0:0:root:/root:/bin/bash
user:x:1000:1000:User Name:/home/user:/bin/bash
# 字段说明
# 1. 用户名
# 2. 密码占位符 (x表示密码在/etc/shadow中)
# 3. UID (用户ID)
# 4. GID (主组ID)
# 5. 用户描述信息
# 6. 家目录路径
# 7. 默认Shell
/etc/shadow - 密码信息
sudo cat /etc/shadow # 查看密码文件 (需要root权限)
# 格式:用户名:加密密码:最后修改:最小间隔:最大间隔:警告期:非活动期:过期日期:保留
root:$6$salt$hash...:19000:0:99999:7:::
# 字段说明
# 1. 用户名
# 2. 加密后的密码
# 3. 密码最后修改日期 (从1970-01-01开始的天数)
# 4. 密码最小使用天数
# 5. 密码最大使用天数
# 6. 密码过期前警告天数
# 7. 密码过期后账户锁定天数
# 8. 账户过期日期
# 9. 保留字段
/etc/group - 组信息
cat /etc/group # 查看所有组
# 格式:组名:密码:GID:成员列表
root:x:0:
users:x:100:user1,user2
sudo:x:27:user1
# 字段说明
# 1. 组名
# 2. 组密码占位符
# 3. GID (组ID)
# 4. 组成员列表 (逗号分隔)
用户管理命令
1. 添加用户
useradd - 添加用户
# 基本用法
sudo useradd username # 创建用户 (使用默认设置)
sudo useradd -m username # 创建用户并创建家目录
# 常用选项
sudo useradd -m -s /bin/bash -c "Full Name" username
sudo useradd -m -g users -G sudo,docker username
sudo useradd -m -d /custom/home username
# 选项说明
-m # 创建家目录
-s /bin/bash # 指定默认Shell
-c "Full Name" # 用户描述信息
-g group # 指定主组
-G group1,group2 # 指定附加组
-d /path/to/home # 指定家目录路径
-u 1001 # 指定UID
-e 2024-12-31 # 设置账户过期日期
adduser - 交互式添加用户 (Debian/Ubuntu)
sudo adduser username # 交互式创建用户
# 会提示输入密码、全名等信息
# 自动创建家目录和基本配置
2. 修改用户
usermod - 修改用户属性
# 修改用户信息
sudo usermod -c "New Full Name" username # 修改描述
sudo usermod -s /bin/zsh username # 修改Shell
sudo usermod -d /new/home username # 修改家目录
sudo usermod -l newname oldname # 修改用户名
# 修改组关系
sudo usermod -g newgroup username # 修改主组
sudo usermod -G group1,group2 username # 设置附加组
sudo usermod -a -G newgroup username # 添加到附加组
# 锁定/解锁用户
sudo usermod -L username # 锁定用户
sudo usermod -U username # 解锁用户
# 设置过期时间
sudo usermod -e 2024-12-31 username # 设置账户过期
sudo usermod -e "" username # 取消过期设置
passwd - 修改密码
passwd # 修改当前用户密码
sudo passwd username # 修改指定用户密码
sudo passwd -l username # 锁定用户密码
sudo passwd -u username # 解锁用户密码
sudo passwd -d username # 删除用户密码
sudo passwd -e username # 强制用户下次登录时修改密码
# 密码策略
sudo passwd -n 7 username # 设置密码最小使用天数
sudo passwd -x 90 username # 设置密码最大使用天数
sudo passwd -w 7 username # 设置密码过期警告天数
3. 删除用户
userdel - 删除用户
sudo userdel username # 删除用户 (保留家目录)
sudo userdel -r username # 删除用户和家目录
sudo userdel -f username # 强制删除 (即使用户已登录)
# 删除前检查
ps -u username # 检查用户进程
sudo pkill -u username # 终止用户所有进程
deluser - 删除用户 (Debian/Ubuntu)
sudo deluser username # 删除用户
sudo deluser --remove-home username # 删除用户和家目录
sudo deluser --remove-all-files username # 删除用户和所有文件
组管理
1. 组操作命令
groupadd - 添加组
sudo groupadd groupname # 创建组
sudo groupadd -g 1001 groupname # 指定GID创建组
sudo groupadd -r systemgroup # 创建系统组
groupmod - 修改组
sudo groupmod -n newname oldname # 修改组名
sudo groupmod -g 1002 groupname # 修改GID
groupdel - 删除组
sudo groupdel groupname # 删除组 (不能是用户的主组)
2. 组成员管理
gpasswd - 组密码和成员管理
sudo gpasswd -a username groupname # 添加用户到组
sudo gpasswd -d username groupname # 从组中删除用户
sudo gpasswd -A admin1,admin2 groupname # 设置组管理员
sudo gpasswd -M user1,user2 groupname # 设置组成员列表
groups - 查看用户所属组
groups # 查看当前用户所属组
groups username # 查看指定用户所属组
newgrp - 切换主组
newgrp groupname # 临时切换到指定组
exit # 退出组切换
sudo权限管理
1. sudo基础
sudo配置文件
sudo visudo # 编辑sudo配置文件 (/etc/sudoers)
# 使用visudo可以检查语法错误,避免配置错误导致系统无法使用sudo
/etc/sudoers文件格式
# 用户权限格式
username ALL=(ALL:ALL) ALL
# 组权限格式
%groupname ALL=(ALL:ALL) ALL
# 格式说明
# 用户/组 主机=(运行用户:运行组) 命令
# ALL表示所有
# 示例
root ALL=(ALL:ALL) ALL # root用户可以执行所有命令
%sudo ALL=(ALL:ALL) ALL # sudo组成员可以执行所有命令
user1 ALL=(ALL) NOPASSWD: ALL # user1执行sudo不需要密码
user2 ALL=(ALL) /bin/systemctl, /bin/mount # user2只能执行特定命令
2. sudo使用
基本sudo命令
sudo command # 以root身份执行命令
sudo -u username command # 以指定用户身份执行命令
sudo -g groupname command # 以指定组身份执行命令
sudo -i # 切换到root用户环境
sudo -s # 启动root shell
sudo -l # 列出当前用户可执行的sudo命令
sudo配置示例
# 允许用户执行特定命令
user1 ALL=(ALL) /bin/systemctl restart nginx
user1 ALL=(ALL) /bin/systemctl reload nginx
# 允许组成员无密码执行特定命令
%developers ALL=(ALL) NOPASSWD: /bin/systemctl restart apache2
# 命令别名
Cmnd_Alias SERVICES = /bin/systemctl, /sbin/service
%operators ALL=(ALL) SERVICES
# 用户别名
User_Alias ADMINS = user1, user2, user3
ADMINS ALL=(ALL) ALL
3. sudo安全配置
安全选项
# 在/etc/sudoers中添加安全选项
Defaults env_reset # 重置环境变量
Defaults mail_badpass # 密码错误时发送邮件
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults logfile="/var/log/sudo.log" # 记录sudo日志
Defaults log_input,log_output # 记录输入输出
Defaults passwd_tries=3 # 密码尝试次数
Defaults passwd_timeout=5 # 密码输入超时时间
用户环境配置
1. Shell配置文件
系统级配置文件
/etc/profile # 所有用户登录时执行
/etc/bash.bashrc # 所有bash用户执行
/etc/environment # 环境变量配置
用户级配置文件
~/.profile # 用户登录时执行
~/.bashrc # bash启动时执行
~/.bash_profile # bash登录时执行
~/.bash_logout # bash退出时执行
~/.vimrc # vim配置
~/.ssh/ # SSH配置目录
2. 环境变量
查看和设置环境变量
env # 显示所有环境变量
echo $PATH # 显示PATH变量
echo $HOME # 显示家目录
echo $USER # 显示用户名
# 临时设置环境变量
export MYVAR="value" # 设置环境变量
unset MYVAR # 删除环境变量
# 永久设置环境变量
echo 'export MYVAR="value"' >> ~/.bashrc
source ~/.bashrc # 重新加载配置
常用环境变量
PATH # 可执行文件搜索路径
HOME # 用户家目录
USER # 当前用户名
SHELL # 当前Shell
LANG # 语言设置
TZ # 时区设置
EDITOR # 默认编辑器
3. 用户配置模板
/etc/skel目录
ls -la /etc/skel # 查看新用户模板目录
# 新用户创建时会复制此目录内容到用户家目录
# 自定义新用户模板
sudo cp custom_bashrc /etc/skel/.bashrc
sudo cp custom_vimrc /etc/skel/.vimrc
权限控制进阶
1. ACL (Access Control Lists)
查看ACL支持
mount | grep acl # 查看文件系统是否支持ACL
getfacl file.txt # 查看文件ACL权限
设置ACL权限
# 安装ACL工具 (如果未安装)
sudo apt install acl # Ubuntu/Debian
sudo yum install acl # CentOS/RHEL
# 设置ACL权限
setfacl -m u:username:rwx file.txt # 给用户设置权限
setfacl -m g:groupname:rx file.txt # 给组设置权限
setfacl -m o::r file.txt # 给其他用户设置权限
setfacl -x u:username file.txt # 删除用户权限
setfacl -b file.txt # 删除所有ACL权限
# 递归设置ACL
setfacl -R -m u:username:rwx directory/
2. 特殊权限应用
实际应用场景
# Web服务器权限设置
sudo chown -R www-data:www-data /var/www/html/
sudo chmod -R 755 /var/www/html/
sudo find /var/www/html -type f -exec chmod 644 {} \;
# 共享目录权限设置
sudo mkdir /shared
sudo chgrp shared /shared
sudo chmod 2775 /shared # 设置SGID,新文件继承组
用户监控和审计
1. 用户活动监控
登录监控
last # 查看用户登录历史
lastb # 查看失败登录尝试
who # 查看当前登录用户
w # 查看用户活动
进程监控
ps aux | grep username # 查看用户进程
pstree -u username # 查看用户进程树
lsof -u username # 查看用户打开的文件
2. 日志审计
系统日志
# 查看认证日志
sudo tail -f /var/log/auth.log # Ubuntu/Debian
sudo tail -f /var/log/secure # CentOS/RHEL
# 查看sudo日志
sudo tail -f /var/log/sudo.log
# 使用journalctl查看日志
journalctl -u ssh # SSH服务日志
journalctl _COMM=sudo # sudo命令日志
实用脚本和技巧
1. 批量用户管理
批量创建用户脚本
#!/bin/bash
# 批量创建用户脚本
users="user1 user2 user3"
for user in $users; do
sudo useradd -m -s /bin/bash $user
echo "$user:defaultpass" | sudo chpasswd
sudo usermod -a -G users $user
echo "Created user: $user"
done
用户信息统计
# 统计用户数量
wc -l /etc/passwd
# 查看普通用户
awk -F: '$3 >= 1000 {print $1}' /etc/passwd
# 查看系统用户
awk -F: '$3 < 1000 {print $1}' /etc/passwd
# 查看有登录Shell的用户
grep -v '/nologin\|/false' /etc/passwd
2. 权限检查脚本
检查文件权限
#!/bin/bash
# 检查敏感文件权限
files="/etc/passwd /etc/shadow /etc/sudoers"
for file in $files; do
if [ -f "$file" ]; then
perms=$(stat -c "%a" "$file")
echo "$file: $perms"
if [ "$file" = "/etc/shadow" ] && [ "$perms" != "640" ]; then
echo "Warning: $file has incorrect permissions!"
fi
fi
done
安全最佳实践
1. 用户安全
密码策略
# 安装密码质量检查工具
sudo apt install libpam-pwquality # Ubuntu/Debian
sudo yum install libpwquality # CentOS/RHEL
# 配置密码策略 (/etc/security/pwquality.conf)
minlen = 8 # 最小长度
minclass = 3 # 最少字符类型
maxrepeat = 2 # 最大重复字符
账户安全
# 禁用不必要的用户
sudo usermod -s /sbin/nologin username
sudo usermod -L username # 锁定账户
# 设置账户过期
sudo chage -E 2024-12-31 username
# 强制用户修改密码
sudo chage -d 0 username
2. sudo安全
sudo配置建议
# 限制sudo权限
user ALL=(ALL) /usr/bin/systemctl restart nginx
user ALL=(ALL) !/bin/su, !/usr/bin/passwd root
# 使用sudo组而不是直接配置用户
%sudo ALL=(ALL:ALL) ALL
# 记录sudo活动
Defaults logfile="/var/log/sudo.log"
Defaults log_input,log_output
总结
用户和权限管理要点:
- 用户管理:掌握用户的创建、修改、删除操作
- 组管理:理解组的概念和组成员管理
- sudo配置:合理配置sudo权限,遵循最小权限原则
- 环境配置:了解用户环境变量和配置文件
- 安全实践:实施密码策略、权限审计和监控
下一课预告
在下一课中,我们将学习进程和服务管理,包括:
- 进程概念和状态
- 进程控制命令
- 系统服务管理
- 定时任务配置
💡 小贴士:用户和权限管理是Linux安全的核心。建议遵循最小权限原则,定期审计用户权限,及时清理不必要的账户。
📚 文章对你有帮助?请关注我的公众号,万分感谢!
获取更多优质技术文章,第一时间掌握最新技术动态

关注公众号
第一时间获取最新技术文章

添加微信
技术交流 · 问题答疑 · 学习指导
评论讨论
欢迎留下你的想法和建议