一、用户与组的概述
在Linux系统中,每个用户都有自己的用户ID,称为UID,每个用户组也有自己的用户组ID,称为GID,UID和GID在Linux系统中是不可重复的。
1.用户类型
root用户
root用户时UID和GID都等于0的用户,拥有最大的权限。如果深入了解Linux系统,会发现root用户拥有很多特权,比如:无视Linux对权限的设置而强行读、写、执行文件,切换其他用户登录不需要密码,可以强行切换到已经存在的用户,只有root可以为普通用户修改密码等等。
系统用户 (程序用户)
系统用户通常用于运行服务,但是此用户无家目录,也不能用于登录系统。例如,在yum安装apache、nginx等服务后,就会自动创建apache和nginx的用户和同名用户组。在CentOS6系统中,系统用户的UID范围是1-499,在CentOS7系统中,系统用户的ID是1-999。
普通用户
普通用户只能由root用户创建,该用户拥有家目录,并且可以登录,该用户的权限由root分配。普通用户拥有指定的shell环境。
2.用户和用户组的关系
在Linux系统中,每个用户必定属于一个主组(基本组),默认情况下属于与其同名的用户组,最多可以有31个附属组,从用户权限的角度看,主组和附属组其实差别不大,用户也会拥有其附属组的组相关权限。
3、用户和用户组配置文件
Linux系统下的用户和用户组相关配置文件主要有以下几个:
/etc/passwd
存储用户信息
user10:x:1014:1014::/home/user10:/bin/bash
#用户名:密码占位符:用户ID:组ID:用户描述信息:用户家目录:登录shell
/etc/shadow
该配置文件保存了用户的密码信息
root:$6$Xf11oMYvLR9GE4GZ$K8bhAKG0qPgoFytN9qxl.yeFhWO1TM0ULRCKqLGj7VGGniR7kEiS.lM4iUmLkCETfp2.9J.A9fl8H0xf5.lTj.::0:99999:7:::
bin:*:19820:0:99999:7:::
#用户名:密码:用户创建时间:密码最短使用期限:密码最长使用期限:密码过期提醒时间:密码过期后的宽容时间:密码过期时间:没用
/etc/group
该文件保存了用户组的信息
nginx:x:982:
#组名:占位符:组ID:非同名用户的组成员
/etc/gshadow
该文件保存了用户组的密码
root:::
#组名:加密密码:组管理员列表:组成员列表
/etc/login.defs
该文件可以设置密码过期时间,密码最大长度限制等内容。影响的是新创建的用户密码信息

/etc/skel目录
用户创建时默认文件的模版目录
创建用户时会将这个目录下内容拷贝到新建用户家目录下
二、用户管理
1.useradd命令
创建一个新用户或更新默认新用户信息
语法:
useradd [选项] 用户名
选项
| 选项 | 作用 |
|---|---|
-u | 指定用户的UID。 |
-d | 指定用户的家目录,而不采用默认创建在/home中的目录。不能是已存在的目录。 |
-s | 指定用户的登录 Shell(如 /bin/bash 或 /sbin/nologin)。 |
-M | 创建用户时不自动创建家目录(常用于服务账户)。 |
-g | 指定用户的基本组(覆盖默认的同名组创建,需提前存在)。 |
-G | 指定用户的附加组(多个组用逗号分隔,仍会创建同名基本组)。 |
-e | 设置账户失效时间(格式为 YYYY-MM-DD,到期后账户将被禁用)。 |
案例:创建一个新用户

指定用户ID创建
![]()

指定用户的家目录

指定用户的登录shell ,用户user3的登录shell为/bin/nologin


创建用户时不创建家目录

创建用户时指定基本组,不会创建用户的同名组,可以看到创建用户user5后,在group文件里没有生成user5的同名组

创建用户时指定附加组,依然会创建同名组

创建用户时,指定用户的失效时间

2. userdel命令
删除用户账户和相关文件
语法:
userdel [选项] 用户名
选项:
-r, -- remove
用户主目录中的文件将随用户主目录和用户邮箱一起删除。在其它文件系统中的文件必须手动搜索并删除。
案例:

如果不加 -r 用户的家目录就会被保留下来,再次创建新用户时会看到一些信息已经存在


3.passwd命令
更改用户的密码。root用户使用时,可以更改所有用户的密码,并且不受密码要求显示,普通用户使用时只能更改自身密码
语法:
passwd [选项] 用户名
不加用户名表示修改自身
选项
| 选项 | 作用 |
|---|---|
-l(小写L)或 --lock | 锁定用户密码 |
-S | 查看密码的锁定状态 |
-u 或 --unlock | 解除用户密码的锁定状态 |
-d 或 --delete | 将用户密码清空 |
-e 或 --expire | 让密码失效,下次登录时必须更改 |
--stdin | 非交互式修改密码 |
案例:
将user1用户密码设置为1

锁定用户密码,可以看到被锁定用户密码前多了个两个!!,表示被锁定


查看用户密码锁定状态 -S

解除用户密码锁定

清空用户密码
|

让密码失效,下次登陆时必须修改

非交互式修改密码

4.usermod 命令
修改一个用户账户的属性
语法:
usermod [选项] 用户名
选项:
| 选项 | 作用描述 |
|---|---|
-u | 修改用户的UID |
-d | 修改用户的家目录(不采用默认的/home目录) |
-s | 修改用户的登录shell |
-g | 修改用户基本组(不创建同名组) |
-G | 修改用户附加组(会创建同名组) |
-e | 修改用户的失效时间 |
-a, --append | 将用户追加到一个附加组 |
-L, --lock | 锁定用户账户 |
-U, --unlock | 解锁用户账户 |
案例:修改用户id

修改用户家目录
![]()

修改用户的登录shell

修改用户的基本组

修改用户附加组

修改用户失效时间

追加用户到一个附加组

锁定用户 和 解锁用户

5. chpasswd 命令
批量更新密码
语法:
chpasswd [选项]
选项:
| 参数选项 | 功能说明 |
|---|---|
-c 或 --crypt-method METHOD | 指定加密方法(如 DES、MD5、SHA256 等) |
-m 或 --md5 | 使用 MD5 加密(兼容旧系统) |
-s 或 --sha | 使用 SHA 加密 |
-R 或 --root DIR | 指定 chroot 目录 |
-h 或 --help | 显示帮助信息 |
案例:


用指定算法加密

6.chage命令
更改用户密码过期信息
语法:
chage [选项] 用户名
选项
| 选项 | 作用 |
|---|---|
-l, --list | 显示账户年龄信息 |
-m, --mindays | 修改密码的最短使用期限 |
-M, --maxdays | 修改密码的最长使用期限 |
-W, --warndays | 修改密码过期的提示时间 |
案例:

将user1用户密码最短使用时间设置为0天
![]()
三、组管理
1.groupadd 命令
创建新的组
语法:
groupadd [选项] 组名
选项:
-g 指定组GID生成新组
案例:

2.groupdel 命令
删除组
语法:
groupdel [选项] 组名
选项
-f 强制删除
案例:
![]()
3.groupmod 命令
修改组属性
语法:
groupmod [选项] 组名
选项
-g 修改组GID
案例:

4.gpasswd 命令
向组内添加成员
语法:
gpasswd [选项] 组名
选项
| 选项 | 作用描述 |
|---|---|
-a, --add USER | 向组 GROUP 中添加用户 USER,支持单用户操作 |
-M, --members USER,... | 设置组 GROUP 的成员列表(多用户逗号分隔),批量添加并覆盖原有成员 |
案例:

四、用户切换与sodo提权
1.su命令
切换用户,从root用户切换到普通用户不需要密码,普通用户之间切换需要密码
语法:
su [-] 用户名
选项
| 选项 | 作用描述 |
|---|---|
-, -l | 切换到目标用户的环境变量和主目录,并加载其登录 Shell 配置(等同于 --login)。 |
-s | 若/bin/shell允许,指定目标用户的 Shell |
-c | 以目标用户身份执行单条命令后退出 |
案例:
su 不会切换目标用户的登录shell
su - 会切换到目标用户的登录shell

2.sudo命令
sudo用于普通用户的权限提升
语法:
sudo [选项] 参数
选项
| 选项 | 作用 |
|---|---|
-i | 切换到指定用户的登录 shell,采用该用户本身的密码进行身份验证。 |
-u <user> | 以指定用户身份执行命令,例如:$ sudo -u postgres psql |
-g <group> | 以指定用户组身份执行命令 |
-s | 启动目标用户的默认shell(不改变当前目录) |
-l | 列出当前用户被允许执行的命令列表 |
-n | 非交互模式(禁止密码提示,失败时直接报错) |
案例:切换到指定的登录shell,登录后会切换到目标shell用户的家目录下

注意:,普通用户可能默认没有sudo命令使用权限。sudo -i 切换到root,必须存在于/etc/sudoers文件中的普通用户才有权限。

如果想要给其他账户增加使用sodu命令权限,可以通过对sudoers文件内容进行修改,添加想要的用户和想赋予的命令权限

在这里添加想要使用命令的绝对路径,或者用ALL添加全部
五、用户登录信息查看
1.id 命令
查看用户的基本属性,用户UID,基本组及附加组
语法:
id [选项] [用户]
选项
| 选项 | 功能描述 |
|---|---|
| -u | 仅显示有效用户 ID(UID)。 |
-g | 仅显示用户的有效组 ID(GID)。 |
-G | 显示用户所属的所有组 ID(包括附加组)。 |
-n | 需搭配 -u、-g 或 -G 使用,显示名称而非数字 ID。 |
-r | 需搭配 -u、-g 或 -G 使用,显示真实 ID 而非有效 ID。 |
案例:

2.w 命令
查看当前系统登录详情
语法:
w [选项]
选项
| 选项 | 功能描述 |
|---|---|
-h | 隐藏标题行(不显示表头信息) |
-f | 切换显示远程主机名(默认开启,-f关闭显示) |
-i | 显示用户IP地址而非主机名(需配合-f使用) |
案例

3.who 命令
显示当前系统登录的摘要信息
语法:
who [选项]
选项
| 选项 | 作用 |
|---|---|
-b --boot | 显示上次系统启动时间 |
-u --users | 列出当前已登录的用户 |
案例

4.whoami 命令
显示当前登录用户的名称
语法:
whoami
案例

5.last 命令
可以查看用户登录列表,last命令可以从日记文件/var/log/wtmp中读取信息,并显示用户最近的登录列表。此命令普通用户也可以执行
语法
last [选项]
选项
| 选项 | 描述 |
|---|---|
-n | 限制显示的行数(如 last -n 5 显示最近5条记录) |
-a | 在最后一行显示登录的主机名或IP地址 |
-d | 将IP地址解析为主机名 |
-f | 指定替代的日志文件(如 last -f /var/log/wtmp.1) |
-i | 类似-a,但只显示IP地址 |
-x | 显示系统关机/重启记录 |
-F | 显示完整的登录和登出时间(精确到秒) |
-t | 显示指定时间之前的记录(格式:YYYYMMDDHHMMSS) |
-p | 显示特定时间的登录记录(需配合-t使用) |
-w | 在输出中显示完整的用户名和主机名 |
案例

6.lastb 命令
可以从日志文件/var/log/btmp中读取信息,并显示用户登录失败的记录,用于发现系统登陆异常,需要root用户权限执行,可用参数与last命令相同
语法
last
案例

7.lastlog 命令
统计当前系统中存在用户的登录情况
语法
lastlog
选项
| 选项 | 功能描述 |
|---|---|
-b <days> | 仅显示指定天数内未登录的用户。例如 -b 7 显示最近 7 天未登录的用户。 |
-t <days> | 显示指定天数内登录过的用户。例如 -t 1 显示过去 24 小时内登录的用户。 |
-u <user> | 仅显示指定用户的信息。例如 -u root 只显示 root 用户的登录记录。 |
-R | 不进行主机名解析,直接显示 IP 地址而不是主机名。 |
案例

按天数显示或者显示指定用户信息

1万+

被折叠的 条评论
为什么被折叠?



