Linux 用户和组管理:核心概念、配置文件与命令全解析 Linux 用户和组管理一、用户和组概述1.1 用户帐户的作用用户帐户是系统安全的基础系统上的每个进程运行程序都以特定用户身份运行每个文件都有一个特定用户作为其所有者文件所有权帮助系统对用户实施访问控制正在运行的进程关联的用户决定了该进程可访问的文件和目录 用户使用username用户名标识便于人类记忆系统内部使用UID用户ID唯一编号来区分用户帐户。1.2 用户帐户的三种主要类型类型说明UID范围CentOS 7特点超级用户 (superuser)用户名rootUID 固定为00对系统具有完全访问权限可执行任何操作系统用户 (system users)由系统服务和守护进程使用1-999非特权帐户通常不用于交互式登录Shell 为/sbin/nologin普通用户 (regular users)供日常工作和交互式登录使用1000权限受限只能访问自己有权限的资源bash# 查看系统用户示例 [laomacentos7 ~]$ grep postfix /etc/passwd postfix:x:89:89::/var/spool/postfix:/sbin/nologin二、用户和组配置文件详解2.1/etc/passwd—— 用户帐户信息文件保存系统上所有登录用户的信息每行代表一个用户以冒号:分隔7 个字段。格式textname:password:UID:GID:GECOS:directory:shell示例bashlaoma:x:1000:1000:software admin:/home/laoma:/bin/bash字段详解字段字段名说明1name用户登录名用户名2password密码占位符x表示密码存储在/etc/shadow中更安全3UID用户IDUser ID系统唯一标识用户4GID用户主组IDGroup ID指向/etc/group中的组5GECOS用户描述信息通常为真实姓名、联系方式等6directory用户主目录登录后的默认工作目录通常为/home/username7shell用户登录后执行的程序通常是 Shell如/bin/bash2.2/etc/group—— 组信息文件保存系统上所有组的信息每行代表一个组以冒号:分隔4 个字段。格式textgroup_name:password:GID:user_list示例bashwheel:x:10:laoma字段详解字段字段名说明1group_name组名称2password组密码占位符x表示密码存储在/etc/gshadow中3GID组IDGroup ID系统唯一标识组4user_list该组的补充成员列表逗号分隔主组成员不在此列出2.3 组的类型类型说明存储位置主要组 (Primary Group)每个用户只有一个主要组。用户新建文件的所属组默认为其主要组。创建用户时默认会创建一个同名专用组作为主要组。/etc/passwd的 GID 字段补充组 (Supplementary Group)用户可以属于多个补充组。权限检查时会检查用户所属的所有组主要组 补充组。/etc/group的 user_list 字段2.4 查看用户信息bash# 查看当前用户的完整信息 [laomacentos7 ~]$ id uid1000(laoma) gid1000(laoma) groups1000(laoma),10(wheel) # 查看指定用户的 UID [laomacentos7 ~]$ id -u laoma 1000 # 查看指定用户的 GID主要组 [laomacentos7 ~]$ id -g laoma 1000 # 查看指定用户的所有组 ID [laomacentos7 ~]$ id -G laoma 1000 10三、查看登录用户信息3.1 命令对比命令作用示例输出whoami查看当前终端的登录用户名rootwho查看所有终端上登录的用户及登录时间、来源IProot pts/0 2024-12-22 08:43 (10.1.8.1)w查看登录用户及系统负载、运行进程等详细信息显示 USER、TTY、FROM、LOGIN、IDLE、JCPU、PCPU、WHATusers仅显示当前登录的所有用户名可重复laoma laoma root3.2 示例bash# who 示例 [laomacentos7 ~]$ who root pts/0 Dec 22 08:43 (10.1.8.1) laoma pts/1 Dec 22 09:23 (10.1.8.1) laoma pts/2 Dec 22 09:07 (10.1.8.1) # w 示例信息更丰富 [laomacentos7 ~]$ w 09:23:19 up 1:10, 3 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN IDLE JCPU PCPU WHAT root pts/0 10.1.8.1 08:43 39:27 0.06s 0.06s -bash laoma pts/1 10.1.8.1 09:23 2.00s 0.05s 0.01s w laoma pts/2 10.1.8.1 09:07 7.00s 0.05s 0.05s -bash # users 示例 [rootcentos7 ~]$ users laoma laoma root # whoami 示例 [rootcentos7 ~]$ whoami root四、用户管理命令4.1useradd—— 创建用户基本语法bashuseradd [选项] 用户名常用选项选项说明示例-u UID指定用户 ID-u 8888-d 目录指定家目录路径-d /opt/user02-c 描述设置 GECOS 描述信息-c software admin-g 组名指定主要组GID-g wheel-s Shell指定登录 Shell-s /sbin/nologin-p 密码设置密码明文不安全仅用于测试-p 123456-G 组列表指定补充组逗号分隔-G wheel,users-r创建系统用户UID 1000-r示例bash# 示例1创建默认用户自动分配 UID、GID创建同名组和家目录 [rootcentos7 ~]# useradd user01 [rootcentos7 ~]# grep user01 /etc/passwd user01:x:1003:1003::/home/user01:/bin/bash # 示例2指定各项属性创建用户 [rootcentos7 ~]# useradd -u 8888 -d /opt/user02 -c user for software manage -g wheel -s /sbin/nologin user02 [rootcentos7 ~]# grep user02 /etc/passwd user02:x:8888:10:user for software manager:/opt/user02:/sbin/nologin [rootcentos7 ~]# ls -d /opt/user02/ /opt/user02/ # 示例3创建无密码用户图形界面可直接登录 [rootcentos7 ~]# useradd -p tom4.2/etc/skel/—— 用户家目录模板创建新用户时系统会将/etc/skel/目录下的所有文件复制到用户的新家目录中。bash[rootcentos7 ~]# ls -a /etc/skel/ . .. .bash_logout .bash_profile .bashrc .mozilla [rootcentos7 ~]# ls -a ~tom . .. .bash_logout .bash_profile .bashrc .mozilla用途系统管理员可以在此目录放置全局配置文件如.bashrc、自定义环境变量、欢迎信息等使每个新用户都能继承这些配置。4.3usermod—— 修改用户属性基本语法bashusermod [选项] 用户名常用选项选项说明示例-u UID修改用户 ID-u 1008-d 目录修改家目录路径-d /home/user02-m将原家目录内容移动到新家目录常与-d联用-md /home/user02-c 描述修改 GECOS 描述信息-c new desc-g 组名修改主要组GID-g users-s Shell修改登录 Shell-s /bin/bash-G 组列表设置补充组列表覆盖原有补充组-G wheel,users-aG 组列表追加补充组保留原有补充组-aG docker-L锁定用户禁止登录-L-U解锁用户-U⚠️重要-G会覆盖原有的补充组列表如果要追加必须同时使用-aG。示例bash# 示例1修改 UID、家目录和 Shell [rootcentos7 ~]# usermod user02 -u 1008 -md /home/user02 -s /bin/bash # -u 1008: UID 改为 1008 # -md /home/user02: 家目录改为 /home/user02并迁移原有内容 # -s /bin/bash: Shell 改为 /bin/bash [rootcentos7 ~]# grep user02 /etc/passwd user02:x:1008:10:user for software manager:/home/user02:/bin/bash [rootcentos7 ~]# ls -d /home/user02/ /home/user02/ [rootcentos7 ~]# su - user02 # 验证可登录 Last login: Mon Nov 7 17:08:58 CST 2022 on pts/2 [user02centos7 ~]$ # 示例2添加补充组追加 [rootcentos7 ~]# usermod -aG user01 user02 [rootcentos7 ~]# id user02 uid1008(user02) gid10(wheel) groups10(wheel),1003(user01) # 原有补充组 wheel 保留新增 user01 # 示例3覆盖补充组危险 [rootcentos7 ~]# usermod -G user01 user02 # 会覆盖原有补充组4.4userdel—— 删除用户选项说明无选项删除用户但保留家目录和邮件池-r删除用户同时删除家目录和邮件池-f强制删除即使用户当前已登录bash# 正常删除 [rootcentos7 ~]# useradd user03 [rootcentos7 ~]# userdel user03 # 强制删除谨慎使用 [rootcentos7 ~]# userdel -f user02 userdel: user user02 is currently used by process 9071 [rootcentos7 ~]# id user02 id: user02: no such user⚠️注意删除用户前建议先备份家目录中的重要数据。如果用户当前已登录userdel会提示错误使用-f可强制删除但可能导致进程异常。正确的做法先kill掉该用户的所有进程再执行userdel -r。五、组管理命令5.1groupadd—— 创建组选项说明-g GID指定组 ID-r创建系统组GID 1000bash# 创建普通组 [rootcentos7 ~]# groupadd admin # 创建指定 GID 的组 [rootcentos7 ~]# groupadd sysadmin -g 2000 # 验证 [rootcentos7 ~]# grep admin /etc/group admin:x:1002: sysadmin:x:2000:5.2groupmod—— 修改组属性选项说明-n 新名称修改组名称-g 新GID修改组 IDbash# 修改组名 [rootcentos7 ~]# groupmod --new-name admins admin # 修改 GID [rootcentos7 ~]# groupmod -g 2002 admins # 验证 [rootcentos7 ~]# grep admins /etc/group admins:x:2002:5.3groupdel—— 删除组bash[rootcentos7 ~]# groupdel sysadmin [rootcentos7 ~]# grep sysadmin /etc/group # 无输出已删除⚠️ 如果组是某用户的主要组则不能删除需先删除用户或修改用户的主要组。5.4groupmems—— 管理组成员选项说明-g 组名指定要操作的组默认为当前用户的主要组-a 用户名将用户添加到组中-d 用户名从组中移除用户-l列出组中所有成员-p清空组中所有成员bash# 添加成员 [rootcentos7 ~]# groupmems -g admins -a laoma [rootcentos7 ~]# groupmems -g admins -l laoma # 验证 [rootcentos7 ~]# id laoma uid1000(laoma) gid1000(laoma) groups1000(laoma),10(wheel),2002(admins) # 删除成员 [rootcentos7 ~]# groupmems -g admins -d laoma [rootcentos7 ~]# groupmems -g admins -l # 清空组中所有成员 [rootcentos7 ~]# groupmems -g admins -a laoma [rootcentos7 ~]# groupmems -g admins -p六、默认配置文件6.1/etc/login.defs—— 用户创建默认参数bash[rootcentos7 ~]# vim /etc/login.defs配置项默认值说明MAIL_DIR/var/spool/mail用户邮件存储目录UMASK022新文件默认权限掩码目录755文件644HOME_MODE0700家目录权限仅所有者可读写执行PASS_MAX_DAYS99999密码最大有效期天PASS_MIN_DAYS0密码最小修改间隔天PASS_MIN_LEN5密码最小长度PASS_WARN_AGE7密码过期前警告天数UID_MIN1000普通用户 UID 最小值UID_MAX60000普通用户 UID 最大值SYS_UID_MIN201系统用户 UID 最小值SYS_UID_MAX999系统用户 UID 最大值CREATE_HOMEyes是否自动创建家目录USERGROUPS_ENAByes删除用户时如果其同名组无成员则自动删除6.2/etc/default/useradd—— useradd 额外默认值bash[rootcentos7 ~]# cat /etc/default/useradd # useradd defaults file GROUP100 HOME/home INACTIVE-1 EXPIRE SHELL/bin/bash SKEL/etc/skel CREATE_MAIL_SPOOLyes配置项默认值说明GROUP100100新用户的主要组100 users但 CentOS 默认创建同名组HOME/home/home家目录父路径INACTIVE-1-1密码过期后账户停用天数-1 表示永不停用EXPIRE空账户过期日期空表示永不过期SHELL/bin/bash/bin/bash默认登录 ShellSKEL/etc/skel/etc/skel模板目录路径CREATE_MAIL_SPOOLyesyes是否创建邮箱文件七、课后练习与作业7.1 课后选择题题目答案1. 哪一项表示在最基本的层面上标识用户的编号 A. 主要用户 B. UID C. GID D. 用户名B. UID2. 哪一项表示提供用户命令行提示符的程序 A. 主 shell B. 主目录 C. 登录 shell D. 命令名称C. 登录 shell3. 哪一项目或文件表示本地组信息的位置 A. 主目录 B. /etc/passwd C. /etc/GID D. /etc/groupD. /etc/group4. 哪一项目或文件表示用户个人文件的位置 A. 主目录 B. 登录 shell C. /etc/passwd D. /etc/groupA. 主目录5. 哪一项表示在最基本的层面上标识组的编号 A. 主要组 B. UID C. GID D. groupidC. GID6. 哪一项目或文件表示本地用户帐户信息的位置 A. 主目录 B. /etc/passwd C. /etc/UID D. /etc/groupB. /etc/passwd7./etc/passwd文件的第四个字段是什么 A. 主目录 B. UID C. 登录 shell D. 主要组D. 主要组第4字段为 GID7.2 课后作业bash# 1. 创建 operator1 用户 [rootcentos7 ~]# useradd operator1 # 2. 使用 id 验证 operator1 用户信息 [rootcentos7 ~]# id operator1 # 3. 查看 /etc/passwd 中对应条目 [rootcentos7 ~]# grep operator1 /etc/passwd # 4. 密码设置为 redhat [rootcentos7 ~]# echo redhat | passwd --stdin operator1 # 5. 修改 operator1 用户 uid 为 1088 [rootcentos7 ~]# usermod -u 1088 operator1 # 6. 修改 operator1 用户描述信息为 Operator One [rootcentos7 ~]# usermod -c Operator One operator1 # 7. 将 wheel 组作为补充组添加给 operator1 用户 [rootcentos7 ~]# usermod -aG wheel operator1 # 8. 查看 /etc/group 中对应条目 [rootcentos7 ~]# grep wheel /etc/group # 9. 删除 operator1 用户 [rootcentos7 ~]# userdel -r operator1八、命令速查表用户管理命令速查命令用途常用选项useradd创建用户-u,-d,-c,-g,-G,-s,-rusermod修改用户-u,-d,-m,-c,-g,-G,-aG,-s,-L,-Uuserdel删除用户-r删除家目录id查看用户信息-u,-g,-Gwhoami查看当前用户名—who/w查看登录用户—users查看登录用户名—组管理命令速查命令用途常用选项groupadd创建组-g,-rgroupmod修改组-n,-ggroupdel删除组—groupmems管理组成员-g,-a,-d,-l,-p九、补充说明9.1 密码管理命令补充命令用途常用选项passwd管理用户密码--stdin,-l,-u,-d,-e,-Schage密码过期策略-l,-m,-M,-W,-E,-d9.2 重要提醒/etc/passwd文件权限为644所有用户可读但只有 root 可写/etc/shadow文件权限为000或400只有 root 可读保护密码安全修改用户配置时优先使用命令如usermod而非直接编辑配置文件创建用户时同名组会自动创建作为用户的主要组root用户的 Shell不要轻易修改否则可能导致系统无法管理