本文是《Linux 入门指南》的第六篇文章,以 Ubuntu 21.10 为例,介绍了 Linux 用户管理。

useradd(创建用户)

描述:

"user add(增加用户)" 的缩写,创建用户。

普通用户无法创建用户,只有 root 用户才能创建用户。

用法:

      useradd [选项] [用户名]

选项:

      --badnames                不检查用户名

  -b, --base-dir BASE_DIR       新账户的主目录的基目录

      --btrfs-subvolume-home    使用 BTRFS 子卷作为家目录

  -c, --comment COMMENT         新账户的 GECOS 字段

  -d, --home-dir HOME_DIR       新账户的主目录

  -D, --defaults                显示或更改默认的 useradd 配置

  -e, --expiredate EXPIRE_DATE  新账户的过期日期

  -f, --inactive INACTIVE       新账户的密码不活动期

  -g, --gid GROUP               新账户主组的名称或 ID

  -G, --groups GROUPS           新账户的附加组列表

  -h, --help                    显示此帮助信息并退出

  -k, --skel SKEL_DIR           使用此目录作为骨架目录

  -K, --key KEY=VALUE           不使用 /etc/login.defs 中的默认值

  -l, --no-log-init             不要将此用户添加到最近登录和登录失败数据库

  -m, --create-home             创建用户的主目录

  -M, --no-create-home          不创建用户的主目录

  -N, --no-user-group           不创建同名的组

  -o, --non-unique              允许使用重复的 UID 创建用户

  -p, --password PASSWORD       加密后的新账户密码

  -r, --system                  创建一个系统账户

  -R, --root CHROOT_DIR         chroot 到的目录

  -P, --prefix PREFIX_DIR       /etc/* 文件所在的 prefix 目录

  -s, --shell SHELL             新账户的登录 shell

  -u, --uid UID                 新账户的用户 ID

  -U, --user-group              创建与用户同名的组

  -Z, --selinux-user SEUSER     为 SELinux 用户映射使用指定 SEUSER

      --extrausers              使用额外的用户数据库

实例:

创建用户(创建用户 rat)

useradd rat

创建用户(创建用户 ox,并创建家目录)

useradd -m ox

usermod(修改用户)

描述:

"user modify(修改用户)" 的缩写,修改用户。

普通用户无法修改用户,只有 root 用户才能修改用户。

用法:

      usermod [选项] [用户名]

选项:

  -b, --badnames                不检查用户名

  -c, --comment COMMENT         GECOS 字段的新值

  -d, --home HOME_DIR           用户的新主目录

  -e, --expiredate EXPIRE_DATE  设定帐户过期的日期为 EXPIRE_DATE

  -f, --inactive INACTIVE       过期 INACTIVE 天数后,设定密码为失效状态

  -g, --gid GROUP               强制使用 GROUP 为新主组

  -G, --groups GROUPS           新的附加组列表 GROUPS

  -a, --append GROUP            将用户追加至上边 -G 中提到的附加组中,并不从其它组中删除此用户

  -h, --help                    显示此帮助信息并退出

  -l, --login NEW_LOGIN         新的登录名称

  -L, --lock                    锁定用户帐号

  -m, --move-home               将家目录内容移至新位置 (仅于 -d 一起使用)

  -o, --non-unique              允许使用重复的(非唯一的) UID

  -p, --password PASSWORD       将加密过的密码 (PASSWORD) 设为新密码

  -R, --root CHROOT_DIR         chroot 到的目录

  -P, --prefix PREFIX_DIR       /etc/* 文件所在的 prefix 目录

  -s, --shell SHELL             该用户帐号的新登录 shell

  -u, --uid UID                 用户帐号的新 UID

  -U, --unlock                  解锁用户帐号

  -v, --add-subuids FIRST-LAST  添加子 UID 范围

  -V, --del-subuids FIRST-LAST  移除子 UID 范围

  -w, --add-subgids FIRST-LAST  添加子 GID 范围

  -W, --del-subgids FIRST-LAST  移除子 GID 范围

  -Z, --selinux-user SEUSER     用户的新的 SELinux 用户映射

实例:

修改用户名(修改用户名 rat→tiger)

usermod -l tiger rat

修改用户的家目录(修改用户 tiger 的家目录为 /home/tiger)

usermod -d /home/tiger tiger

修改用户的用户组(将当前用户加入到 用户组 vboxsf)

sudo usermod -aG vboxsf $(whoami)

userdel(删除用户)

描述:

"user delete(删除用户)" 的缩写,删除用户。

普通用户无法删除用户,只有 root 用户才能删除用户。

用法:

      userdel [选项] [用户名]

选项:

  -f, --force                   即使不属于此用户,也强制删除文件

  -h, --help                    显示此帮助信息并退出

  -r, --remove                  删除主目录和信件池

  -R, --root CHROOT_DIR         chroot 到的目录

  -P, --prefix PREFIX_DIR       /etc/* 文件所在的 prefix 目录

      --extrausers              使用额外的用户数据库

  -Z, --selinux-user            为用户删除所有的 SELinux 用户映射

实例:

删除用户(删除用户 tiger)

userdel tiger

删除用户(删除用户 ox,并删除家目录)

userdel -r ox

passwd(设置用户密码)

描述:

"passwd(用户密码)" 的缩写,设置用户密码。

新用户默认无密码,只有设置了密码之后,才能正常使用。

普通用户只能设置自己的密码,root 用户可以设置全部用户的密码。

用法:

      passwd [选项] [用户名]

选项:

  -a, --all                     报告所有帐户的密码状态

  -d, --delete                  删除指定帐户的密码

  -e, --expire                  强制使指定帐户的密码过期

  -h, --help                    显示此帮助信息并退出

  -k, --keep-tokens             仅在过期后修改密码

  -i, --inactive INACTIVE       密码过期后设置密码不活动为 INACTIVE

  -l, --lock                    锁定指定的帐户

  -n, --mindays MIN_DAYS        设置到下次修改密码所须等待的最短天数为 MIN_DAYS

  -q, --quiet                   安静模式

  -r, --repository REPOSITORY   在 REPOSITORY 库中改变密码

  -R, --root CHROOT_DIR         chroot 到的目录

  -S, --status                  报告指定帐户密码的状态

  -u, --unlock                  解锁被指定帐户

  -w, --warndays WARN_DAYS      设置过期警告天数为 WARN_DAYS

  -x, --maxdays MAX_DAYS        设置到下次修改密码所须等待的最多天数为 MAX_DAYS

实例:

设置用户密码(设置当前用户的密码)

passwd

设置用户密码(设置用户 jianrry 的密码)

passwd jianrry

锁定用户(锁定用户 jianrry)

passwd -l jianrry

解锁用户(解锁用户 jianrry)

passwd -u jianrry

su(切换用户)

描述:

"switch user(切换用户)" 的缩写,切换用户。

用法:

      su [选项] [用户名]

选项:

 -m, -p, --preserve-environment      不重置环境变量

 -w, --whitelist-environment <list>  不重置指定的变量

 -g, --group <组>                指定主组

 -G, --supp-group <group>        指定一个 supplemental group

 -, -l, --login                  使 shell 成为登录 shell

 -c, --command <命令>            使用 -c 向 shell 传递一条命令

 --session-command <命令>        使用 -c 向 shell 传递一条命令,而不创建新会话

 -f, --fast                      向shell 传递 -f 选项(csh 或 tcsh)

 -s, --shell <shell>             若 /etc/shells 允许,运行<shell>

 -P, --pty                       创建一个新的 pseudo-terminal

 -h, --help                      显示此帮助信息并退出

 -V, --version                   显示此版本信息并退出

实例:

切换用户(切换到 root 用户)

su

切换用户(切换到用户 jianrry)

su jianrry

切换用户(切换到用户 jianrry,并进入用户 jianrry 的家目录)

su - jianrry

sudo(以其他身份执行命令)

描述:

以其他身份执行命令,默认的身份是 root。

sudo 的配置文件是 /etc/sudoers 。

用法:

      su [选项] [命令]

选项:

  -A, --askpass                 使用助手程序进行密码提示

  -b, --background              在后台运行命令

  -B, --bell                    提示时响铃

  -C, --close-from=num          关闭所有 >= num 的文件描述符

  -D, --chdir=directory         执行命令前更改工作目录

  -E, --preserve-env            在执行命令时保留用户环境

      --preserve-env=list       保留特定的环境变量

  -e, --edit                    编辑文件而非执行命令

  -g, --group=group             以指定的用户组或 ID 执行命令

  -H, --set-home                将 HOME 变量设为目标用户的主目录。

  -h, --help                    显示帮助消息并退出

  -h, --host=host               在主机上运行命令(如果插件支持)

  -i, --login                   以目标用户身份运行一个登录shell;可同时指定一条命令

  -K, --remove-timestamp        完全移除时间戳文件

  -k, --reset-timestamp         无效的时间戳文件

  -l, --list                    列出用户权限或检查某个特定命令;对于长格式,使用两次

  -n, --non-interactive         非交互模式,不提示

  -P, --preserve-groups         保留组向量,而非设置为目标的组向量

  -p, --prompt=prompt           使用指定的密码提示

  -R, --chroot=directory        执行命令前更改 root 目录

  -r, --role=role               以指定的角色创建 SELinux 安全环境

  -S, --stdin                   从标准输入读取密码

  -s, --shell                   以目标用户运行 shell;可同时指定一条命令

  -t, --type=type               以指定的类型创建 SELinux 安全环境

  -T, --command-timeout=timeout 在指定的时间限制后终止命令

  -U, --other-user=user         在列表模式中显示用户的权限

  -u, --user=user               以指定用户或 ID 运行命令(或编辑文件)

  -V, --version                 显示版本信息并退出

  -v, --validate                更新用户的时间戳而不执行命令

  --                            停止处理命令行参数

实例:

以其他身份执行命令(以 root 身份执行 ls

sudo ls

groupadd(创建用户组)

描述:

"group add(增加用户组)" 的缩写,创建用户组。

普通用户无法创建用户组,只有 root 用户才能创建用户组。

用法:

      groupadd [选项] [用户组名]

选项:

  -f, --force                   如果组已经存在则成功退出,并且如果 GID 已被使用则取消

  -g, --gid GID                 为新组使用 GID

  -h, --help                    显示此帮助信息并退出

  -K, --key KEY=VALUE           不使用 /etc/login.defs 中的默认值

  -o, --non-unique              允许创建有重复 GID 的组

  -p, --password PASSWORD       为新组使用此加密过的密码

  -r, --system                  创建一个系统账户

  -R, --root CHROOT_DIR         chroot 到的目录

  -P, --prefix PREFIX_DIR       prefix 目录

      --extrausers              使用额外的用户数据库

实例:

创建用户组(创建用户组 rat)

groupadd rat

groupmod(修改用户组)

描述:

"group modify(修改用户组)" 的缩写,修改用户组。

普通用户无法修改用户组,只有 root 用户才能修改用户组。

用法:

      groupmod [选项] [用户组名]

选项:

  -g, --gid GID                 将组 ID 改为 GID

  -h, --help                    显示此帮助信息并退出

  -n, --new-name NEW_GROUP      改名为 NEW_GROUP

  -o, --non-unique              允许使用重复的 GID

  -p, --password PASSWORD       将密码更改为(加密过的) PASSWORD

  -R, --root CHROOT_DIR         chroot 到的目录

  -P, --prefix PREFIX_DIR       /etc/* 文件所在的 prefix 目录

实例:

修改用户组名(用户组名 rat→ox)

groupmod -n ox rat

groupdel(删除用户组)

描述:

"group delete(删除用户组)" 的缩写,删除用户组。

普通用户无法删除用户组,只有 root 用户才能删除用户组。

如果用户组中存在用户,只有删除全部用户后,才能删除用户组。

用法:

      groupdel [选项] [用户组名]

选项:

  -h, --help                    显示此帮助信息并退出

  -R, --root CHROOT_DIR         chroot 到的目录

  -P, --prefix PREFIX_DIR        /etc/* 文件所在的 prefix 目录

  -f, --force                   即便是用户的主组也继续删除

      --extrausers              使用额外的用户数据库

实例:

删除用户组(删除用户组 ox)

groupdel ox