一、用户和用户组概念

       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
 

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐