本文是《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