在Linux系统中,用户和组是管理文件权限、系统资源访问以及安全性的核心机制,CentOS作为广泛使用的服务器操作系统,其用户与组的管理功能尤为关键,本文将详细介绍CentOS中用户和组的概念、管理命令、配置文件及相关实践,帮助读者系统掌握这一主题。

用户与组的基本概念
用户(User)是系统中的操作主体,每个用户拥有唯一的UID(User Identifier)和用户名,组(Group)则是用户的集合,通过组可以简化权限管理,避免为每个用户单独分配权限,组同样拥有GID(Group Identifier)和组名,CentOS中的用户分为三类:超级用户(root,UID为0)、系统用户(UID小于1000,由系统创建)和普通用户(UID大于等于1000,由管理员创建),组分为主要组(用户创建时自动生成,与用户名同名)和附加组(用户所属的其他组)。
用户管理命令
-
创建用户
使用useradd命令可创建新用户,例如useradd -m -s /bin/bash username中,-m选项自动创建用户主目录,-s指定默认Shell,默认情况下,新用户会被分配一个与用户名同名的主要组,且UID和GID从1000开始递增。 -
修改用户信息
usermod命令用于修改用户属性,如usermod -aG groupname username将用户加入附加组,-l可更改用户名,-L和-U分别用于锁定和解锁用户账户。 -
删除用户
userdel命令用于删除用户,userdel -r username会同时删除用户主目录及所有文件。 -
用户密码管理
使用passwd username为用户设置或修改密码,passwd -l锁定用户密码,passwd -u解锁。chage命令可管理密码过期策略,例如chage -M 90 username设置密码每90天过期。
组管理命令
-
创建组
groupadd groupname用于创建新组,默认GID从1000开始,若需指定GID,可使用-g选项,如groupadd -g 2000 groupname。 -
修改组
groupmod命令可修改组信息,例如groupmod -n newname oldname更改组名,-g选项修改GID。 -
删除组
groupdel groupname用于删除组,需确保组内无任何用户,否则操作会失败。
-
组成员管理
使用gpasswd命令管理组成员,例如gpasswd -a username groupname将用户加入组,-d选项移除用户,-M直接设置组成员列表。
配置文件与目录
-
用户配置文件
/etc/passwd记录用户基本信息,每行包含7个字段:用户名、加密密码(通常为x)、UID、GID、描述信息、主目录、默认Shell。/etc/shadow存储用户密码的加密信息及密码策略,仅root可读。 -
组配置文件
/etc/group记录组信息,字段包括组名、组密码(通常为x)、GID、组成员列表。/etc/gshadow存储组密码和管理员信息,用于组级权限控制。 -
用户主目录
普通用户的主目录默认位于/home/username,存储用户个人配置文件(如.bashrc),系统用户的主目录通常位于/var/、/srv/等目录。
实践案例
-
创建开发团队用户组
groupadd developers useradd -m -G developers dev1 useradd -m -G developers dev2
此操作创建
developers组,并将用户dev1和dev2加入该组,便于统一管理开发文件权限。 -
设置目录共享权限
mkdir /project chown :developers /project chmod 2775 /project
通过设置SGID位(2775),确保组内用户创建的文件自动继承
developers组权限,实现团队协作。
安全注意事项
-
最小权限原则
避免将用户加入不必要的组,定期审计/etc/group和/etc/passwd,清理无用账户。 -
密码策略强化
使用pam_pwquality模块强制复杂密码策略,如要求最小长度、特殊字符等。 -
sudo权限控制
通过/etc/sudoers文件精细化管理用户权限,避免直接使用root账户操作。
相关问答FAQs
Q1:如何查看用户所属的所有组?
A1:使用命令id username可显示用户的UID、GID及所属的所有组信息,包括主要组和附加组,例如id dev1会输出dev1的UID、GID以及所属developers组等详细信息。
Q2:如何批量创建用户并设置初始密码?
A2:可通过脚本结合useradd和passwd命令实现,编写一个包含用户名的文本文件users.txt,使用以下循环批量创建并设置密码:
while read username; do useradd -m "$username" echo "$username:InitialPassword123" | chpasswd done < users.txt
注意:实际操作中应避免使用弱密码,建议配合chage命令设置密码过期策略。