Linux操作系统-用户与组管理
一、用户和用户组概念
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个唯一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
1、用户和组
- 用户(User)
系统使用者的身份标识
每个用户有唯一的 UID(User ID)
每个用户必须属于一个主组(Primary Group)
可以属于多个附加组(Supplementary Groups)
分为三类:
超级用户(root):UID=0,拥有最高权限
系统用户:UID 1-999,用于运行系统服务
普通用户:UID≥1000,普通使用者
- 用户组(Group)
用户集合,方便权限管理
每个组有唯一的 GID(Group ID)
组类型:
主要组 (Primary Group)
附加组 (Supplementary Groups)
2、用户和组相关配置文件
- /etc/passwd
该文件是用户账户信息,文件内容格式如下:
albert:x:1000:1000:albert:/home/albert:/bin/bash

分别表示账号:密码:用户id:组id:账号描述:家目录:shell
- /etc/shadow
该文件存储加密的用户密码信息,文件内容格式如下:
albert:$6$X51sD/Dlxiz2L5y.$w2QAMZgWrL3E94Mzj96QQI9/NvlpdrQ1Jx1olqyXtX8x7dBgwbwm6vKZOeuE/uIKVrS63.Q/LpdTkiaWxmAzq.:20549:0:99999:7:::

分别表示账号:加密密码:最近修改密码的日期:密码不可被更改的天数:密码需要更改的天数,密码过期前的警告天数:密码过期后的宽限时间:账号失效天数:保留字段
- /etc/group
该文件记录用户组信息,文件内容格式如下:
albert:x:1000:
分别表示群组号,组密码,GID,组包含的成员
- /etc/gshadow
该文件存储加密的组密码信息(较少用)
- /etc/login.defs
[root@centos7-test ~]# cat /etc/login.defs |grep -vE '^$|^#'
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512
该配置文件的作用:
密码和时间:设密码最长用多久、过期前几天提醒、两次改密码最少隔几天,比如设 90 天过期。
账号和目录:定新建用户的 UID 和 GID 编号范围,决定要不要自动建家目录,还有默认权限和邮箱位置。
加密方式:指定密码存进系统时用什么算法加密,现在常用 SHA512。
- /etc/default/useradd
useradd默认配置,内容如下:

/etc/default/useradd 是 Linux 系统中定义 useradd 命令创建新用户时默认行为的配置文件,用于指定家目录路径、默认 Shell、初始组、模板目录等基础参数。
HOME=/home:新用户家目录的父路径(如
/home/username)SHELL=/bin/bash:新用户的默认登录 Shell
GROUP=100:新用户的默认主组 GID(若系统未启用私有组机制)
SKEL=/etc/skel:复制到新家目录的默认配置文件模板目录
INACTIVE=-1:密码过期后账户宽限期(-1 表示永不自动锁定)
EXPIRE=:账号失效日期(空表示永久有效)
CREATE_MAIL_SPOOL=yes:是否在
/var/spool/mail/下创建邮箱文件
- /etc/sudoers
etc/sudoers 是 Linux 系统中管理 sudo 命令权限 的核心配置文件,决定了哪些用户能以管理员身份执行命令 。修改该文件时,严禁直接编辑,必须使用 visudo 命令以确保语法正确,防止系统权限损坏。
二、用户管理命令
用户账号的管理工作主要涉及到用户账号的添加、修改和删除,添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。
1、创建新用户
创建新用户使用useradd命令,其语法如下:
useradd 选项 用户名

选项:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 指定用户id。
2、删除用户
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
删除一个已有的用户账号使用userdel命令,其格式如下:
userdel 选项 用户名

常用的选项是 -r,它的作用是把用户的主目录一起删除。
# userdel -r sam

此命令删除用户sam在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。
3、修改用户账号
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。修改已有用户的信息使用usermod命令,其格式如下:
usermod 选项 用户名
常用的选项包括-c, -d, -m, -g, -G, -s, -u等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。另外,有些系统可以使用选项:-l 新用户名,这个选项指定一个新的账号,即将原来的用户名改为新的用户名。
例如:
# usermod -s /bin/ksh -d /home/z –g developer sam

此命令将用户sam的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer。
4、用户口令的管理
用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:
passwd 选项 用户名
可使用的选项:
- -l 锁定口令,即禁用账号。
- -u 口令解锁。
- -d 使账号无口令。
- -f 强迫用户下次登录时修改口令。
如果默认用户名,则修改当前用户的口令。
为了系统安全起见,用户应该选择比较复杂的口令,例如最好使用8位长的口令,口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。
为用户指定空口令时,执行下列形式的命令:
# passwd -d zhang
此命令将用户 zhang 的口令删除,这样用户 zhang 下一次登录时,系统就不再允许该用户登录了。passwd 命令还可以用 -l(lock) 选项锁定某一用户,使其不能登录,例如:
# passwd -l zhang
5、修改用户密码过期时间
命令格式:
chage [选项] 用户名
常用选项:
-l:列出所有信息
-m:密码最小天数
-M:密码最大天数
-W:警告天数
-I:密码过期后锁定天数
-E:账户过期日期
-d:上次密码修改日期
使用示例:
1. 查看用户密码过期信息
chage -l zhang
2. 设置密码策略
chage -m 7 -M 90 -W 7 -I 14 zhang
结果:
-m 7:7天内不能改密码
-M 90:90天密码过期
-W 7:过期前7天警告
-I 14:过期后14天账户锁定
3. 设置账户过期
chage -E 2024-12-31 zhang
4. 设置密码立即过期
chage -d 0 zhang
结果:强制zhang下次登录时改密码
5. 交互式设置
chage zhang
交互式问答设置所有参数

6、显示用户身份信息
命令格式:
id [选项] [用户名]

常用选项:
-u:只显示UID
-g:只显示主组GID
-G:显示所有组GID
-n:显示名称而不是ID(与u/g/G一起使用)
-r:显示真实ID而非有效ID
使用示例:
1. 显示当前用户信息
id #[root@centos7-test ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
2. 显示指定用户信息
id zhang
3. 只显示UID
id -u zhang
4. 只显示主组GID
id -g zhang
5. 显示所有组GID
id -G zhang
6. 显示所有组名
id -Gn zhang
7. 显示用户名
id -un zhang
8. 检查用户是否存在[root@centos7-test ~]# if id "testuser2" &>/dev/null;then echo "用户存在";else echo "用户不存在";fi
用户存在
三、用户组管理命令
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。用户组的管理涉及用户组的添加、删除和修改。
1、新增用户组
使用groupadd命令新增用户组。其格式如下:
groupadd 选项 用户组
可以使用的选项有:
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
实例1:
# groupadd group1
此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。
实例2:
# groupadd -g 101 group2
此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。
2、删除用户组
使用groupdel命令,其格式如下:
groupdel 用户组
例如:
# groupdel group1
此命令从系统中删除组group1。
3、修改用户组的属性
使用groupmod命令。其语法如下:
groupmod 选项 用户组
常用的选项有:
-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n新用户组 将用户组的名字改为新名字
实例1:
# groupmod -g 102 group2
此命令将组group2的组标识号修改为102。
实例2:
# groupmod –g 10000 -n group3 group2
此命令将组group2的标识号改为10000,组名修改为group3。
4、newgrp - 切换到其他组
命令格式:
newgrp 组名
使用示例:
# 1. 查看当前组
id -gn
# 2. 切换到其他组
newgrp developers
# 3. 切换回原组
newgrp alice
# 4. 需要密码的情况(如果组有密码)
newgrp securegroup
四、root用户管理
1. 禁止root直接SSH登录
编辑 /etc/ssh/sshd_config
PermitRootLogin no
2. 设置root密码
passwd root
3. 锁定root密码
passwd -l root
4. 切换到root
sudo -i # 切换并加载环境
sudo -s # 切换但不加载环境
su - # 传统方式
五、su 命令(Switch User)
切换到 root 用户(需要知道 root 密码)
su
切换到指定用户(需要知道该用户密码)
su username
切换到指定用户并加载该用户的环境变量
su - username
以指定用户身份执行单个命令后返回
su -c "command" username
保留当前环境变量(不加载目标用户的环境)
su -m
指定使用的 shell
su -s /bin/bash username
六、密码策略
1. 安装密码质量检查库
yum install libpwquality # CentOS/RHEL
2. 配置密码策略 /etc/security/pwquality.conf
cat > /etc/security/pwquality.conf << EOF
minlen = 12
dcredit = -1
ucredit = -1
ocredit = -1
lcredit = -1
EOF
3. 配置PAM /etc/pam.d/common-password
password requisite pam_pwquality.so retry=3
4. 设置密码历史
在 /etc/pam.d/common-password 添加:
password requisite pam_pwhistory.so remember=5
5. 检查密码强度
echo "password" | pwscore
七、账户锁定策略
1. 配置账户锁定 /etc/pam.d/common-auth
auth required pam_tally2.so deny=5 unlock_time=600 onerr=fail
2. 查看失败登录次数
pam_tally2 --user=zhang
3. 重置失败计数
pam_tally2 --user=zhang --reset
4. 手动锁定账户
passwd -l zhang
usermod -L zhang
5. 检查锁定状态
passwd -S zhang
LK 表示锁定,PS 表示正常
八、sudo权限管理
1. 编辑sudoers文件(使用visudo命令)
visudo
2. 给用户完整权限
zhang ALL=(ALL:ALL) ALL
3. 给组完整权限
%zhang ALL=(ALL:ALL) ALL
4. 免密码sudo
zhang ALL=(ALL) NOPASSWD: ALL
5. 限制特定命令
zhang ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx
6. 限制特定用户执行
zhang ALL=(devops) /usr/bin/passwd
7. 查看用户sudo权限
sudo -l
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)