教程 linux tutorial

Linux 用户管理命令 - 详解用户与组管理工具

1. 用户账户管理命令

1.1 useradd - 创建新用户

useradd 命令用于在 Linux 系统中创建新的用户账户。

语法:

bash
useradd [选项] 用户名

常用选项:

  • -c, --comment COMMENT:添加用户的描述信息
  • -d, --home HOME_DIR:指定用户的主目录路径
  • -e, --expiredate EXPIRE_DATE:设置账户过期日期,格式为 YYYY-MM-DD
  • -g, --gid GROUP:指定用户的主组名称或 GID
  • -G, --groups GROUPS:指定用户的附加组列表,多个组用逗号分隔
  • -m, --create-home:自动创建用户的主目录
  • -M, --no-create-home:不创建用户的主目录
  • -N, --no-user-group:不创建与用户名同名的组
  • -p, --password PASSWORD:设置用户密码(已加密的密码)
  • -s, --shell SHELL:指定用户的登录 shell
  • -u, --uid UID:指定用户的 UID

示例:

bash
# 创建基本用户账户
useradd john

# 创建用户并设置主目录、shell 和描述信息
useradd -m -s /bin/bash -c "John Doe" john

# 创建用户并指定 UID、主组和附加组
useradd -u 1005 -g developers -G sudo,users -m mary

# 创建系统用户(无登录 shell)
useradd -r -s /usr/sbin/nologin mysql

# 创建带有过期日期的用户
useradd -e 2023-12-31 temp_user

1.2 userdel - 删除用户账户

userdel 命令用于从系统中删除用户账户。

语法:

bash
userdel [选项] 用户名

常用选项:

  • -f, --force:强制删除用户,即使用户当前已登录
  • -r, --remove:删除用户的主目录和邮件文件
  • -Z, --selinux-user:删除用户的 SELinux 用户映射

示例:

bash
# 删除用户,但保留主目录
userdel john

# 删除用户及其主目录和邮件
userdel -r mary

# 强制删除用户
userdel -f temp_user

1.3 usermod - 修改用户账户属性

usermod 命令用于修改现有用户账户的属性。

语法:

bash
usermod [选项] 用户名

常用选项:

  • -c, --comment COMMENT:修改用户的描述信息
  • -d, --home HOME_DIR:修改用户的主目录路径
  • -e, --expiredate EXPIRE_DATE:修改账户过期日期
  • -g, --gid GROUP:修改用户的主组
  • -G, --groups GROUPS:修改用户的附加组列表
  • -l, --login NEW_LOGIN:修改用户名
  • -L, --lock:锁定用户账户,禁止登录
  • -s, --shell SHELL:修改用户的登录 shell
  • -u, --uid UID:修改用户的 UID
  • -U, --unlock:解锁用户账户
  • -a, --append:将用户追加到附加组,而不是替换现有组

示例:

bash
# 修改用户的描述信息
usermod -c "Senior Developer" john

# 修改用户的登录 shell
usermod -s /bin/zsh mary

# 修改用户的主目录
usermod -d /home/jdoe john

# 修改用户的主组
usermod -g managers john

# 将用户添加到附加组(不替换现有组)
usermod -a -G sudo,devops john

# 修改用户名
usermod -l john_doe john

# 锁定用户账户
usermod -L temp_user

# 解锁用户账户
usermod -U temp_user

1.4 passwd - 设置或修改用户密码

passwd 命令用于设置或修改用户的密码。

语法:

bash
passwd [选项] [用户名]

常用选项:

  • -d, --delete:删除用户的密码,使用户账户无需密码即可登录
  • -e, --expire:强制用户下次登录时修改密码
  • -i, --inactive INACTIVE:设置密码过期后账户宽限期天数
  • -l, --lock:锁定用户密码
  • -n, --minimum DAYS:设置密码最小修改间隔天数
  • -S, --status:显示用户密码的状态
  • -u, --unlock:解锁用户密码
  • -w, --warning DAYS:设置密码过期前的警告天数
  • -x, --maximum DAYS:设置密码最长有效期天数

示例:

bash
# 修改当前用户的密码
passwd

# 修改指定用户的密码(需要管理员权限)
passwd john

# 删除用户的密码
passwd -d temp_user

# 强制用户下次登录时修改密码
passwd -e john

# 锁定用户密码
passwd -l mary

# 解锁用户密码
passwd -u mary

# 查看密码状态
passwd -S john

# 设置密码策略(最小5天,最大90天,提前7天警告)
passwd -n 5 -x 90 -w 7 john

1.5 chage - 修改用户密码过期信息

chage 命令用于管理用户的密码过期策略。

语法:

bash
chage [选项] 用户名

常用选项:

  • -d, --lastday LAST_DAY:设置最后一次密码修改日期
  • -E, --expiredate EXPIRE_DATE:设置账户过期日期
  • -I, --inactive INACTIVE:设置密码过期后账户宽限期天数
  • -l, --list:列出用户的密码过期信息
  • -m, --mindays MIN_DAYS:设置密码最小修改间隔天数
  • -M, --maxdays MAX_DAYS:设置密码最长有效期天数
  • -W, --warndays WARN_DAYS:设置密码过期前的警告天数

示例:

bash
# 列出用户的密码过期信息
chage -l john

# 设置用户密码 90 天后过期
chage -M 90 john

# 设置账户在特定日期过期
chage -E 2023-12-31 temp_user

# 设置密码修改后,用户必须等待 3 天后才能再次修改
chage -m 3 john

# 设置密码过期前 7 天开始警告
chage -W 7 john
# 设置密码过期后,账户还有 14 天的宽限期
chage -I 14 john

1.6 finger - 查看用户信息

finger 命令用于显示用户的详细信息。

语法:

bash
finger [选项] [用户名]

常用选项:

  • -l:以长格式显示信息
  • -m:仅匹配用户名(忽略大小写)

示例:

bash
# 查看所有登录用户的信息
finger

# 查看特定用户的信息
finger john

# 以长格式查看用户信息
finger -l mary

1.7 id - 显示用户和组的 ID

id 命令用于显示用户的 UID、GID 和所属的组。

语法:

bash
id [选项] [用户名]

常用选项:

  • -g, --group:仅显示用户的主组 ID
  • -G, --groups:显示用户所属的所有组 ID
  • -n, --name:与 -g 或 -G 一起使用,显示组名而非 GID
  • -u, --user:仅显示用户的 UID

示例:

bash
# 显示当前用户的 ID 信息
id

# 显示指定用户的 ID 信息
id john

# 仅显示用户的 UID
id -u mary

# 仅显示用户的主组 ID
id -g john

# 显示用户所属的所有组名
id -Gn john

1.8 last - 显示用户登录历史

last 命令用于显示用户的登录历史记录。

语法:

bash
last [选项] [用户名]

常用选项:

  • -n, --limit NUMBER:显示最近的 N 条记录
  • -f, --file FILE:指定替代的日志文件
  • -t, --until YYYYMMDDHHMMSS:显示指定日期之前的记录

示例:

bash
# 显示所有用户的最近登录记录
last

# 显示特定用户的登录记录
last john

# 显示最近 10 条登录记录
last -n 10

# 显示特定日期之前的登录记录
last -t 20230630000000

1.9 who - 显示当前登录用户

who 命令用于显示当前登录到系统的用户信息。

语法:

bash
who [选项]

常用选项:

  • -a, --all:显示所有信息
  • -b, --boot:显示系统启动时间
  • -d, --dead:显示已终止的进程
  • -H, --heading:显示列标题
  • -l, --login:显示登录进程
  • -m:仅显示当前终端的信息(相当于 who am i)
  • -q, --count:仅显示用户数和用户名列表
  • -r, --runlevel:显示当前运行级别

示例:

bash
# 显示当前登录用户
who

# 显示详细信息,包括列标题
who -aH

# 显示系统启动时间
who -b

# 显示当前运行级别
who -r

# 显示当前终端信息
who am i
# 或
who -m

2. 组管理命令

2.1 groupadd - 创建新组

groupadd 命令用于在系统中创建新的用户组。

语法:

bash
groupadd [选项] 组名

常用选项:

  • -f, --force:如果组已存在,则退出状态为 0 而不是错误
  • -g, --gid GID:指定组的 GID
  • -r, --system:创建系统组

示例:

bash
# 创建基本组
groupadd developers

# 创建指定 GID 的组
groupadd -g 1005 testers

# 创建系统组
groupadd -r mysql

2.2 groupdel - 删除组

groupdel 命令用于从系统中删除组。

语法:

bash
groupdel [选项] 组名

注意:

  • 不能删除任何用户的主组
  • 如果组中有用户,则必须先移除用户

示例:

bash
# 删除组
groupdel testers

2.3 groupmod - 修改组属性

groupmod 命令用于修改现有组的属性。

语法:

bash
groupmod [选项] 组名

常用选项:

  • -g, --gid GID:修改组的 GID
  • -n, --new-name NEW_GROUP:修改组的名称

示例:

bash
# 修改组的 GID
groupmod -g 1006 developers

# 修改组的名称
groupmod -n dev_team developers

2.4 gpasswd - 管理组密码和成员

gpasswd 命令用于管理组密码和组成员。

语法:

bash
gpasswd [选项] [组名]

常用选项:

  • -a, --add USER:将用户添加到组
  • -d, --delete USER:从组中删除用户
  • -A, --administrators ADMIN,...:设置组管理员
  • -M, --members USER,...:设置组成员列表
  • -r, --remove-password:删除组密码
  • -R, --restrict:限制组访问

示例:

bash
# 将用户添加到组
gpasswd -a john developers

# 从组中删除用户
gpasswd -d mary developers

# 设置组管理员
gpasswd -A john,admin developers

# 设置组成员列表
gpasswd -M john,mary,peter developers

# 删除组密码
gpasswd -r developers

2.5 newgrp - 切换当前用户的有效组

newgrp 命令用于临时切换用户的当前有效组。

语法:

bash
newgrp [选项] [组名]

常用选项:

  • -:创建一个新的 shell 环境

示例:

bash
# 切换到指定组
newgrp developers

# 切换到指定组并创建新的 shell 环境
newgrp - developers

3. 权限管理命令

3.1 chmod - 修改文件或目录的权限

chmod 命令用于修改文件或目录的访问权限。

语法:

bash
chmod [选项] 模式 文件/目录

常用选项:

  • -R, --recursive:递归修改目录及其内容的权限
  • -v, --verbose:显示详细的权限修改信息

模式表示方法:

  • 符号模式:u(所有者)、g(组)、o(其他)、a(全部);+(添加权限)、-(删除权限)、=(设置权限);r(读)、w(写)、x(执行)
  • 数字模式:每类用户用一个八进制数字表示,权限对应的值为:r=4、w=2、x=1

示例:

bash
# 符号模式:给所有者添加执行权限
chmod u+x script.sh

# 符号模式:给组添加读和写权限
chmod g+rw file.txt

# 符号模式:删除其他用户的所有权限
chmod o-rwx file.txt

# 数字模式:设置所有者读/写/执行,组读/执行,其他读权限
chmod 754 file.txt

# 递归修改目录权限
chmod -R 755 /path/to/directory

# 详细显示权限修改
chmod -v 644 file.txt

3.2 chown - 修改文件或目录的所有者和组

chown 命令用于修改文件或目录的所有者和所属组。

语法:

bash
chown [选项] 所有者[:组] 文件/目录

常用选项:

  • -R, --recursive:递归修改目录及其内容的所有者和组
  • -v, --verbose:显示详细的所有者和组修改信息

示例:

bash
# 修改文件的所有者
chown john file.txt

# 修改文件的所有者和组
chown john:developers file.txt

# 仅修改文件的组
chown :developers file.txt

# 递归修改目录的所有者和组
chown -R john:developers /path/to/directory

# 详细显示修改信息
chown -v john file.txt

3.3 chgrp - 修改文件或目录的所属组

chgrp 命令用于修改文件或目录的所属组。

语法:

bash
chgrp [选项] 组 文件/目录

常用选项:

  • -R, --recursive:递归修改目录及其内容的所属组
  • -v, --verbose:显示详细的所属组修改信息

示例:

bash
# 修改文件的所属组
chgrp developers file.txt

# 递归修改目录的所属组
chgrp -R developers /path/to/directory

# 详细显示修改信息
chgrp -v developers file.txt

3.4 umask - 设置默认文件权限

umask 命令用于设置新创建文件和目录的默认权限掩码。

语法:

bash
umask [选项] [掩码]

常用选项:

  • -S, --symbolic:以符号方式显示掩码

示例:

bash
# 显示当前的 umask 值
umask

# 以符号方式显示 umask 值
umask -S

# 设置新的 umask 值(文件默认权限为 644,目录默认权限为 755)
umask 022

# 设置更严格的 umask 值(文件默认权限为 600,目录默认权限为 700)
umask 077

4. sudo 权限管理

4.1 sudo - 以其他用户身份执行命令

sudo 命令允许授权用户以其他用户(通常是 root)的身份执行命令。

语法:

bash
sudo [选项] 命令

常用选项:

  • -b, --background:在后台运行命令
  • -i, --login:以目标用户身份登录并运行 shell
  • -l, --list:列出用户可以执行的命令
  • -s, --shell:运行指定的 shell
  • -u, --user=USER:以指定用户身份执行命令 -V, --version:显示版本信息

示例:

bash
# 以 root 身份执行命令
sudo apt update

# 以特定用户身份执行命令
sudo -u john ls -la /home/john

# 列出用户可以执行的 sudo 命令
sudo -l

# 以 root 身份登录 shell
sudo -i
# 或
sudo su -

# 在后台运行命令
sudo -b systemctl restart nginx

4.2 visudo - 安全编辑 sudoers 文件

visudo 命令用于安全地编辑 /etc/sudoers 文件,提供了语法检查功能。

语法:

bash
visudo [选项]

常用选项:

  • -f, --file=FILE:编辑指定的 sudoers 文件
  • -c, --check:检查 sudoers 文件的语法
  • -s, --strict:严格检查模式

示例:

bash
# 编辑主 sudoers 文件
visudo

# 检查 sudoers 文件语法
visudo -c

# 编辑指定的 sudoers 文件
visudo -f /etc/sudoers.d/custom

5. 高级用户管理技术

5.1 PAM (Pluggable Authentication Modules)

PAM 是 Linux 系统中的可插拔认证模块,提供了灵活的认证机制。

配置文件:

  • /etc/pam.d/:包含各服务的 PAM 配置文件
  • /etc/security/:包含 PAM 模块的配置文件

常用 PAM 模块:

  • pam_unix:标准 Unix 认证
  • pam_cracklib:密码强度检查
  • pam_tally2:登录失败次数限制
  • pam_limits:资源限制

示例:设置密码强度策略(编辑 /etc/pam.d/system-auth):

代码
password requisite pam_cracklib.so retry=3 minlen=8 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

示例:设置登录失败锁定策略(编辑 /etc/pam.d/system-auth):

代码
auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800

5.2 资源限制配置

/etc/security/limits.conf 文件用于设置系统资源限制,控制用户可以使用的系统资源量。

配置格式:

代码
username|@groupname type resource limit

常用资源类型:

  • core:core 文件大小限制
  • data:进程数据段大小限制
  • fsize:文件大小限制
  • memlock:最大锁定内存地址空间
  • nofile:最大打开文件数
  • stack:最大堆栈大小
  • cpu:CPU 时间限制
  • nproc:最大进程数

示例:限制用户最多打开 1024 个文件:

代码
john hard nofile 1024

示例:限制组最多创建 50 个进程:

代码
@developers hard nproc 50

6. 总结

Linux 用户管理命令提供了全面的功能,用于创建、修改、删除用户和组,以及管理权限和资源限制。本文详细介绍了各种用户管理命令的语法、选项和使用示例。

通过本文的学习,您应该能够:

  • 使用 useradd、userdel、usermod 等命令管理用户账户
  • 使用 groupadd、groupdel、groupmod 等命令管理用户组
  • 使用 chmod、chown、chgrp 等命令管理文件和目录的权限
  • 使用 passwd 和 chage 命令设置密码策略
  • 使用 sudo 和 visudo 命令管理管理员权限
  • 了解 PAM 和资源限制配置等高级用户管理技术

掌握这些命令对于系统管理员来说是必不可少的,它们提供了强大的工具来维护 Linux 系统的安全性和多用户环境的管理。在使用这些命令时,应特别注意权限问题,并遵循最小权限原则,以确保系统的安全和稳定。