mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5
1452 字
4 分钟
Linux操作大全(三):用户与权限管理详解
2026-05-25

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/bash
ubuntu: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
# 创建并指定Shell
sudo useradd -m -s /bin/bash newuser
# 创建并添加到组
sudo useradd -m -g users -G sudo,docker newuser
# 创建并设置备注
sudo useradd -m -c "开发人员" newuser
# 创建并设置UID
sudo 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 newuser

2.3 修改用户:usermod#

功能:修改用户属性。

# 修改用户名
sudo usermod -l newname oldname
# 修改家目录
sudo usermod -d /home/newhome -m username
# 修改登录Shell
sudo 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 -l

sudoers文件配置

编辑 /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
# 创建并指定GID
sudo groupadd -g 2000 developers

3.2 删除组:groupdel#

# 删除组
sudo groupdel developers

3.3 修改组:groupmod#

# 修改组名
sudo groupmod -n newname oldname
# 修改GID
sudo groupmod -g 2001 developers

3.4 管理组成员:gpasswd#

# 添加用户到组
sudo gpasswd -a username groupname
# 从组中删除用户
sudo gpasswd -d username groupname
# 设置组管理员
sudo gpasswd -A username groupname
# 设置组成员列表(覆盖)
sudo gpasswd -M user1,user2,user3 groupname

3.5 查看用户所属组#

# 查看当前用户的组
groups
# 查看指定用户的组
groups username
# 查看用户的详细组信息
id username

id命令输出示例

uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),27(sudo),999(docker)

四、权限管理进阶#

4.1 特殊权限#

SUID(Set User ID)#

当文件设置了SUID权限后,执行该文件时会以文件所有者的身份运行。

# 设置SUID
chmod u+s file.sh
chmod 4755 file.sh # 4表示SUID

典型例子/usr/bin/passwd 命令有SUID权限,所以普通用户也能修改自己的密码(需要写入/etc/shadow)。

SGID(Set Group ID)#

当目录设置了SGID权限后,在该目录下创建的文件会继承目录的组。

# 设置SGID
chmod g+s directory
chmod 2755 directory # 2表示SGID

典型例子:团队共享目录,所有人创建的文件都属于同一个组。

Sticky Bit#

当目录设置了Sticky Bit后,只有文件所有者和root能删除该目录下的文件。

# 设置Sticky Bit
chmod +t directory
chmod 1755 directory # 1表示Sticky Bit

典型例子/tmp 目录设置了Sticky Bit,所有人只能删除自己创建的文件。

4.2 ACL(访问控制列表)#

ACL可以为特定用户或组设置更精细的权限。

# 安装ACL工具
sudo apt install acl
# 查看文件的ACL
getfacl file.txt
# 设置ACL(给用户user1添加读写权限)
setfacl -m u:user1:rw file.txt
# 设置ACL(给组group1添加读权限)
setfacl -m g:group1:r file.txt
# 删除ACL
setfacl -x u:user1 file.txt
# 删除所有ACL
setfacl -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"' >> ~/.bashrc
source ~/.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 username

6.3 登录限制#

/etc/securetty#

限制root只能从指定终端登录。

/etc/nologin#

创建此文件后,除root外的所有用户都无法登录:

sudo touch /etc/nologin

删除此文件恢复正常登录:

sudo rm /etc/nologin

/etc/hosts.allow 和 /etc/hosts.deny#

限制可以从哪些IP地址登录:

/etc/hosts.allow
sshd: 192.168.1.0/24
# /etc/hosts.deny
sshd: ALL

七、实战场景#

7.1 创建开发团队用户#

# 创建开发组
sudo groupadd developers
# 创建用户并加入组
sudo useradd -m -g developers -s /bin/bash dev1
sudo useradd -m -g developers -s /bin/bash dev2
sudo useradd -m -g developers -s /bin/bash dev3
# 设置密码
sudo passwd dev1
sudo passwd dev2
sudo passwd dev3
# 创建共享目录
sudo mkdir /shared
sudo chown :developers /shared
sudo chmod 2775 /shared # SGID + 组写权限

7.2 限制用户只能使用特定命令#

# 编辑sudoers
sudo visudo
# 添加以下行
dev1 ALL=(ALL) /usr/bin/systemctl status *, /usr/bin/journalctl

7.3 批量创建用户#

batch_create_users.sh
#!/bin/bash
for 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

八、总结#

本章学习了:

  1. 用户类型:root、系统用户、普通用户
  2. 用户管理命令:useradd、userdel、usermod、passwd
  3. 组管理命令:groupadd、groupdel、gpasswd
  4. sudo权限:配置sudoers文件
  5. 特殊权限:SUID、SGID、Sticky Bit
  6. ACL:更精细的权限控制
  7. 安全策略:密码策略、登录限制

下一章预告:《Linux操作大全(四):软件包管理详解》


如有疑问或发现错误,欢迎在评论区指出!

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Linux操作大全(三):用户与权限管理详解
https://emilia520.icu/posts/linux-manual-03-users/
作者
火花花
发布于
2026-05-25
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录