IMX6ULL开发板学习-02(Linux用户管理)
1. 概述
Linux 是一个多用户、多任务的操作系统。用户管理是系统安全的基础,包括创建、修改、删除用户账户和组,以及管理用户权限和认证信息。理解用户管理有助于合理分配资源、保证系统安全、审计用户行为。
2. 用户和组的概念
2.1 用户账户类型
超级用户(root):UID 为 0,拥有系统最高权限,可以执行任何操作。
系统用户:UID 通常 1-999(不同发行版可能不同),用于运行系统服务(如
nobody、sshd、apache等),一般不用于登录。普通用户:UID 通常 1000 开始,用于日常操作,权限受限。
2.2 组的概念
组是用户的集合,用于简化权限管理。一个用户可以属于多个组。
主组(初始组):用户创建时默认指定的组,用户的文件默认属于该组。
附加组:用户加入的其他组,用于获得额外权限。
每个用户有唯一的用户名和用户标识符(UID),每个组有唯一的组名和组标识符(GID)。
3. 重要的配置文件
用户和组的信息存储在以下四个关键文件中。
3.1/etc/passwd
存储用户账户的基本信息,每行代表一个用户,格式如下:
username:password:UID:GID:comment:home_directory:shell
username:登录名password:早期存储加密密码,现在通常为x,表示密码存储在/etc/shadowUID:用户IDGID:主组IDcomment:用户全名或描述(GECOS字段)home_directory:用户家目录shell:登录后使用的shell(如/bin/bash),若为/sbin/nologin则禁止登录
示例:
alice:x:1001:1001:Alice Smith:/home/alice:/bin/bash
3.2/etc/shadow
存储用户的加密密码和密码策略信息,仅 root 可读,格式如下:
username:encrypted_password:last_change:min_days:max_days:warn_days:inactive_days:expire_date:reserved
username:用户名encrypted_password:加密后的密码(若为!或*表示账户被锁定)last_change:上次更改密码距离1970-01-01的天数min_days:两次修改密码的最小间隔天数max_days:密码有效期(最大使用天数)warn_days:密码过期前警告天数inactive_days:密码过期后仍可登录的天数(宽限期)expire_date:账户过期日期(距离1970-01-01的天数)reserved:保留字段
示例:
alice:$6$randomsalt$encryptedhash:18934:0:99999:7:::
3.3/etc/group
存储组信息,每行格式:
group_name:password:GID:user_list
group_name:组名password:组密码(一般不使用,可为空或x,对应/etc/gshadow)GID:组IDuser_list:属于该组的成员列表(用逗号分隔,不包含主组中的用户)
示例:
developers:x:2001:alice,bob
3.4/etc/gshadow
存储组密码和组管理员信息,格式:
group_name:encrypted_password:administrators:members
group_name:组名encrypted_password:组密码(若为!或空表示无密码)administrators:组管理员列表(可以修改组成员)members:组成员列表
4. 用户管理命令
4.1 创建用户:useradd
语法:useradd [选项] 用户名
常用选项:
-c "注释":指定用户描述-d 家目录:指定家目录路径-m:若家目录不存在则自动创建(默认)-M:不创建家目录-g 主组:指定主组(可以是组名或GID)-G 附加组:指定附加组(多个用逗号分隔)-s shell:指定登录shell-u UID:指定UID-e 过期日期:账户过期日期(格式 YYYY-MM-DD)-f 非活动天数:密码过期后账户被禁用的宽限期
示例:
# 创建用户 alice,主组为 staff,附加组为 developers,shell 为 /bin/bash useradd -g staff -G developers -s /bin/bash -c "Alice Smith" alice # 创建系统用户(无家目录,不创建密码) useradd -r -s /sbin/nologin my_service # 指定 UID 和过期日期 useradd -u 1500 -e 2025-12-31 bob
注意:
useradd默认行为由/etc/default/useradd和/etc/login.defs控制。
4.2 修改用户:usermod
语法:usermod [选项] 用户名
常用选项(与useradd类似):
-c、-d、-g、-G、-s、-u、-e、-f、-L(锁定用户)、-U(解锁用户)-l 新用户名:修改登录名-m:与-d连用,将旧家目录内容移动到新家目录
示例:
# 修改用户主组 usermod -g users alice # 将用户加入附加组(保留原有附加组,需要指定 -a 选项) usermod -aG sudo alice # 修改登录名 usermod -l alice_new alice # 锁定用户 usermod -L alice
4.3 删除用户:userdel
语法:userdel [选项] 用户名
常用选项:
-r:同时删除用户的家目录和邮件池(/var/mail/用户名)
示例:
userdel -r alice # 删除用户 alice 及其家目录
4.4 设置密码:passwd
语法:passwd [选项] [用户名]
若不指定用户名,则修改当前用户的密码。
常用选项:
-l:锁定用户密码(在/etc/shadow密码字段前加!)-u:解锁用户密码-d:删除密码(用户无需密码登录,危险)-e:强制用户下次登录时修改密码-S:显示密码状态信息
示例:
passwd alice # 设置或修改 alice 的密码(交互式) passwd -e alice # 强制 alice 下次登录修改密码 passwd -l alice # 锁定用户 alice
4.5 密码策略管理:chage
用于修改密码老化信息。
语法:chage [选项] 用户名
常用选项:
-l:列出当前密码老化信息-m 天数:修改密码最小间隔-M 天数:修改密码最大有效期-W 天数:修改警告天数-I 天数:修改非活动天数-E 日期:修改账户过期日期(YYYY-MM-DD)
示例:
chage -l alice # 查看 alice 密码策略 chage -M 90 -W 7 alice # 设置密码最长90天,提前7天警告 chage -E 2025-12-31 alice # 设置账户过期日期
4.6 其他用户管理相关命令
newusers:从文件批量创建用户chpasswd:批量更新用户密码(可从标准输入读取)pwconv/pwunconv:转换密码到 shadow 或反之(通常自动维护)
5. 组管理命令
5.1 创建组:groupadd
语法:groupadd [选项] 组名
常用选项:
-g GID:指定 GID-r:创建系统组(GID 小于 1000)
示例:
groupadd developers groupadd -g 2000 staff
5.2 修改组:groupmod
语法:groupmod [选项] 组名
常用选项:
-n 新组名:修改组名-g 新GID:修改 GID
示例:
groupmod -n devs developers # 将 developers 改名为 devs
5.3 删除组:groupdel
语法:groupdel 组名
注意:不能删除用户的主组(即 /etc/passwd 中某用户的主组)。
5.4 管理组成员:gpasswd
语法:gpasswd [选项] 组名
常用选项:
-a 用户名:将用户添加到组-d 用户名:将用户从组中移除-A 用户列表:设置组管理员(可以管理组成员)-M 用户列表:设置组成员列表(会覆盖原有成员)
示例:
gpasswd -a alice developers # 将 alice 加入 developers 组 gpasswd -d alice developers # 从组中移除 alice gpasswd -M alice,bob,charlie developers # 设置组成员
5.5 组密码(不常用)
可以使用gpasswd 组名设置组密码,允许用户通过newgrp临时切换主组。
6. 用户和组查询命令
6.1id- 显示用户身份信息
id # 显示当前用户 id alice # 显示指定用户 # 输出示例:uid=1001(alice) gid=1001(alice) groups=1001(alice),27(sudo)
6.2who/w- 显示登录用户
who # 显示当前登录的用户、终端、时间 w # 更详细,包括负载、登录时间、执行的命令
6.3groups- 显示用户所属组
groups alice # 显示 alice 所属的所有组
6.4finger- 查询用户信息(需安装)
finger alice # 显示用户的家目录、shell、上次登录等
6.5last- 显示最近登录记录
读取/var/log/wtmp,显示用户登录历史。
last -10 # 显示最近10条登录记录 last alice # 显示 alice 的登录记录
6.6lastlog- 显示所有用户上次登录时间
读取/var/log/lastlog。
lastlog lastlog -u alice # 仅显示 alice
7. 切换用户和提权
7.1su- 切换用户
语法:su [选项] [用户名]
不加用户名则切换到 root。
-或-l或--login:以登录方式切换,会加载目标用户的环境变量和家目录。-c 命令:以目标用户身份执行单条命令。
示例:
su - # 切换到 root,且使用 root 的环境 su - alice # 切换到 alice su -c "systemctl restart nginx" # 以 root 执行命令后退出
7.2sudo- 以其他用户权限执行命令
sudo允许授权用户以超级用户或其他用户身份执行命令,需要配置/etc/sudoers(使用visudo编辑)。
常用选项:
-u 用户名:以指定用户身份执行(默认 root)-l:列出当前用户可执行的 sudo 命令-k:强制下次需要密码
/etc/sudoers 配置示例:
# 允许 alice 执行所有命令 alice ALL=(ALL) ALL # 允许 bob 无需密码重启服务 bob ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx # 允许 wheel 组的所有成员执行任何命令 %wheel ALL=(ALL) ALL
示例:
sudo -u alice whoami # 以 alice 身份执行 whoami sudo systemctl restart sshd # 以 root 执行 sudo -l # 查看自己可执行的 sudo 命令
8. 用户管理相关文件与目录
8.1/etc/skel/- 用户模板目录
当使用useradd且创建家目录时,系统会将/etc/skel/下的所有文件(如.bashrc、.profile)复制到新用户的家目录。管理员可在此放置默认配置文件。
8.2/var/log/secure或/var/log/auth.log
记录用户认证相关的日志,包括登录尝试、sudo 使用等,是安全审计的重要依据。
8.3/etc/login.defs
定义用户创建时的默认参数,如 UID/GID 范围、密码加密方式、密码过期默认值等。
8.4/etc/default/useradd
useradd的默认配置,如默认 shell、家目录前缀、默认组等。
