Linux操作大全(三):用户与权限管理详解
本文是Linux操作大全系列的第三篇,深入讲解用户管理、组管理、sudo权限等内容。
一、用户基础概念
1.1 为什么需要多用户?
Linux是一个多用户操作系统,允许多个用户同时登录和使用系统。每个用户有:
- 独立的家目录(
/home/用户名) - 独立的配置文件
- 独立的权限设置
1.2 用户类型
| 用户类型 | UID范围 | 说明 |
|---|---|---|
| root用户 | 0 | 超级管理员,拥有最高权限 |
| 系统用户 | 1-999 | 运行系统服务的用户,不能登录 |
| 普通用户 | 1000+ | 真实使用系统的用户 |
1.3 用户相关文件
/etc/passwd(用户信息文件)
每行代表一个用户,格式:
用户名:密码占位:UID:GID:备注:家目录:登录Shell示例:
root:x:0:0:root:/root:/bin/bashubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash各字段说明:
root:用户名x:密码占位(实际密码在/etc/shadow)0:UID(用户ID)0:GID(主组ID)root:备注信息/root:家目录/bin/bash:登录后使用的Shell
/etc/shadow(密码文件)
存储加密后的密码,只有root能查看:
root:$6$xxxxx:19000:0:99999:7:::/etc/group(组信息文件)
每行代表一个组:
组名:密码占位:GID:组成员列表示例:
root:x:0:ubuntu:x:1000:docker:x:999:ubuntu二、用户管理命令
2.1 添加用户:useradd
功能:创建新用户。
# 基本创建(需要手动设置密码)sudo useradd newuser
# 创建并设置家目录sudo useradd -m newuser
# 创建并指定Shellsudo useradd -m -s /bin/bash newuser
# 创建并添加到组sudo useradd -m -g users -G sudo,docker newuser
# 创建并设置备注sudo useradd -m -c "开发人员" newuser
# 创建并设置UIDsudo useradd -m -u 1500 newuser参数说明:
-m:创建家目录-s:指定登录Shell-g:指定主组-G:指定附加组-c:设置备注-u:指定UID
2.2 删除用户:userdel
功能:删除用户。
# 删除用户(保留家目录)sudo userdel newuser
# 删除用户及家目录sudo userdel -r newuser
# 强制删除(即使用户正在登录)sudo userdel -f newuser2.3 修改用户:usermod
功能:修改用户属性。
# 修改用户名sudo usermod -l newname oldname
# 修改家目录sudo usermod -d /home/newhome -m username
# 修改登录Shellsudo usermod -s /bin/zsh username
# 添加到附加组sudo usermod -aG docker username
# 锁定用户(禁止登录)sudo usermod -L username
# 解锁用户sudo usermod -U username
# 设置账号过期时间sudo usermod -e 2026-12-31 username
# 修改备注sudo usermod -c "新备注" username注意:-aG 中的 -a 表示追加(append),不加 -a 会覆盖原有附加组!
2.4 设置密码:passwd
功能:设置或修改用户密码。
# 修改自己的密码passwd
# 修改其他用户的密码(需要root权限)sudo passwd username
# 锁定用户密码sudo passwd -l username
# 解锁用户密码sudo passwd -u username
# 设置密码过期时间sudo passwd -e username
# 查看密码状态sudo passwd -S username密码策略建议:
- 长度至少8位
- 包含大小写字母、数字、特殊字符
- 不要使用常见词汇
- 定期更换
2.5 切换用户:su
功能:Switch User,切换到其他用户。
# 切换到root用户su
# 切换到root(等同于上面)su root
# 切换到指定用户su username
# 切换用户并加载该用户的环境变量su - username
# 切换到root并加载环境变量su -su vs su -:
su username:只切换用户,保留当前环境变量su - username:切换用户并加载该用户的环境变量(推荐)
2.6 sudo命令
功能:以root权限执行命令。
# 以root权限执行命令sudo apt update
# 以指定用户权限执行sudo -u username command
# 编辑sudoers文件sudo visudo
# 查看当前用户的sudo权限sudo -lsudoers文件配置:
编辑 /etc/sudoers(使用 visudo 命令):
# 允许用户ubuntu执行所有命令(需要密码)ubuntu ALL=(ALL:ALL) ALL
# 允许用户ubuntu执行所有命令(不需要密码)ubuntu ALL=(ALL:ALL) NOPASSWD: ALL
# 允许组docker的成员执行所有命令%docker ALL=(ALL:ALL) ALL
# 允许用户只执行特定命令ubuntu ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl三、组管理命令
3.1 添加组:groupadd
# 创建新组sudo groupadd developers
# 创建并指定GIDsudo groupadd -g 2000 developers3.2 删除组:groupdel
# 删除组sudo groupdel developers3.3 修改组:groupmod
# 修改组名sudo groupmod -n newname oldname
# 修改GIDsudo groupmod -g 2001 developers3.4 管理组成员:gpasswd
# 添加用户到组sudo gpasswd -a username groupname
# 从组中删除用户sudo gpasswd -d username groupname
# 设置组管理员sudo gpasswd -A username groupname
# 设置组成员列表(覆盖)sudo gpasswd -M user1,user2,user3 groupname3.5 查看用户所属组
# 查看当前用户的组groups
# 查看指定用户的组groups username
# 查看用户的详细组信息id usernameid命令输出示例:
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),27(sudo),999(docker)四、权限管理进阶
4.1 特殊权限
SUID(Set User ID)
当文件设置了SUID权限后,执行该文件时会以文件所有者的身份运行。
# 设置SUIDchmod u+s file.shchmod 4755 file.sh # 4表示SUID典型例子:/usr/bin/passwd 命令有SUID权限,所以普通用户也能修改自己的密码(需要写入/etc/shadow)。
SGID(Set Group ID)
当目录设置了SGID权限后,在该目录下创建的文件会继承目录的组。
# 设置SGIDchmod g+s directorychmod 2755 directory # 2表示SGID典型例子:团队共享目录,所有人创建的文件都属于同一个组。
Sticky Bit
当目录设置了Sticky Bit后,只有文件所有者和root能删除该目录下的文件。
# 设置Sticky Bitchmod +t directorychmod 1755 directory # 1表示Sticky Bit典型例子:/tmp 目录设置了Sticky Bit,所有人只能删除自己创建的文件。
4.2 ACL(访问控制列表)
ACL可以为特定用户或组设置更精细的权限。
# 安装ACL工具sudo apt install acl
# 查看文件的ACLgetfacl file.txt
# 设置ACL(给用户user1添加读写权限)setfacl -m u:user1:rw file.txt
# 设置ACL(给组group1添加读权限)setfacl -m g:group1:r file.txt
# 删除ACLsetfacl -x u:user1 file.txt
# 删除所有ACLsetfacl -b file.txt
# 设置默认ACL(目录下新建文件自动继承)setfacl -d -m u:user1:rw directory/五、用户切换与环境变量
5.1 用户切换的影响
| 命令 | 切换用户 | 加载环境 | 当前目录 |
|---|---|---|---|
su username | ✅ | ❌ 保留原环境 | 不变 |
su - username | ✅ | ✅ 加载新环境 | 切换到新用户家目录 |
sudo -u username command | 临时 | 取决于命令 | 不变 |
sudo -i | ✅ | ✅ root环境 | /root |
sudo -s | ✅ | ❌ 保留原环境 | 不变 |
5.2 环境变量相关文件
/etc/profile(全局环境变量)
对所有用户生效,登录时加载。
~/.bashrc(用户环境变量)
只对当前用户生效,每次打开终端时加载。
~/.profile(用户登录脚本)
只对当前用户生效,登录时加载。
5.3 常用环境变量
# 查看所有环境变量env
# 查看PATH变量echo $PATH
# 临时设置环境变量export MY_VAR="hello"
# 永久设置(添加到~/.bashrc)echo 'export MY_VAR="hello"' >> ~/.bashrcsource ~/.bashrc重要环境变量:
| 变量 | 说明 |
|---|---|
PATH | 命令搜索路径 |
HOME | 用户家目录 |
USER | 当前用户名 |
SHELL | 当前Shell |
LANG | 语言设置 |
TERM | 终端类型 |
六、用户认证与安全
6.1 PAM认证
PAM(Pluggable Authentication Modules)是Linux的认证框架。
PAM配置文件位置:
/etc/pam.d/:各服务的PAM配置/etc/pam.conf:全局PAM配置(一般不用)
PAM模块类型:
| 类型 | 说明 |
|---|---|
| auth | 认证(验证用户身份) |
| account | 账户检查(是否过期、是否允许登录) |
| password | 密码修改 |
| session | 会话管理(登录前后执行的操作) |
6.2 密码策略配置
/etc/login.defs
# 密码有效期PASS_MAX_DAYS 90 # 密码最长使用天数PASS_MIN_DAYS 0 # 密码最短使用天数PASS_MIN_LEN 8 # 密码最小长度PASS_WARN_AGE 7 # 密码过期前提前警告天数使用chage命令
# 查看密码过期信息sudo chage -l username
# 设置密码最长使用天数sudo chage -M 90 username
# 设置密码最短使用天数sudo chage -m 7 username
# 设置密码过期时间sudo chage -E 2026-12-31 username
# 强制下次登录时修改密码sudo chage -d 0 username6.3 登录限制
/etc/securetty
限制root只能从指定终端登录。
/etc/nologin
创建此文件后,除root外的所有用户都无法登录:
sudo touch /etc/nologin删除此文件恢复正常登录:
sudo rm /etc/nologin/etc/hosts.allow 和 /etc/hosts.deny
限制可以从哪些IP地址登录:
sshd: 192.168.1.0/24
# /etc/hosts.denysshd: ALL七、实战场景
7.1 创建开发团队用户
# 创建开发组sudo groupadd developers
# 创建用户并加入组sudo useradd -m -g developers -s /bin/bash dev1sudo useradd -m -g developers -s /bin/bash dev2sudo useradd -m -g developers -s /bin/bash dev3
# 设置密码sudo passwd dev1sudo passwd dev2sudo passwd dev3
# 创建共享目录sudo mkdir /sharedsudo chown :developers /sharedsudo chmod 2775 /shared # SGID + 组写权限7.2 限制用户只能使用特定命令
# 编辑sudoerssudo visudo
# 添加以下行dev1 ALL=(ALL) /usr/bin/systemctl status *, /usr/bin/journalctl7.3 批量创建用户
#!/bin/bashfor i in {1..10}; do username="user$(printf '%03d' $i)" sudo useradd -m -s /bin/bash "$username" echo "$username:Password123" | sudo chpasswd sudo chage -d 0 "$username" # 强制首次登录修改密码 echo "Created user: $username"done八、总结
本章学习了:
- 用户类型:root、系统用户、普通用户
- 用户管理命令:useradd、userdel、usermod、passwd
- 组管理命令:groupadd、groupdel、gpasswd
- sudo权限:配置sudoers文件
- 特殊权限:SUID、SGID、Sticky Bit
- ACL:更精细的权限控制
- 安全策略:密码策略、登录限制
下一章预告:《Linux操作大全(四):软件包管理详解》
如有疑问或发现错误,欢迎在评论区指出!
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时








