命令速查:
/etc/passwd 存储用户信息的文件
/etc/shadow 存储用户密码信息文件
/etc/group 存储了组信息
/etc/sudoers sudo 命令配置文件
groupadd 添加组
-g 指定组ID
groupmod 修改组的属性
groupdel 删除组
useradd 添加用户
-u 指定uid 号
-g 指定基本组
-G 指定附加组
-s 指定用户登录的命令解释器
-s /sbin/nologin
-s /bin/bash
-M 不创建家目录
usermod 更新用户信息
userdel 删除用户
-r 删除用户时,同时删除家目录
passwd 修改用户密码
-S 查看用户密码状态
-l 锁定用户
-u 解锁用户
chage 修改密码过期时间
-M 修改密码最长有效期为多少天
-n 修改密码最短有效期为多少天
ln -s /tmp/ajest.txt /root/Desktop/ajest.txt
将/tmp/ajest.txt 文件创建快捷方式到/root/Desktop/ajest.txt
Linux 用户和组
- 理解Linux 用户和组的概念
- 掌握passwd 文件的组成以及作用
- 掌握shadow 文件的组成以及作用
- 了解group 文件的内容
用户分类:
- 超级管理员(root)0 0
- 普通用户 1000--
- 程序用户 1----1000
用户信息文件
/etc/passwd
文件中存储了所有用户信息。
passwd 格式
该文件每一行是一个用户信息,并且以:
为分隔符,一共7 段内容。
root:x:0:0:root:/root:/bin/bash
[--] - - - [--] [---] [--------]
| | | | | | |
| | | | | | +-> 7. Login shell
| | | | | +---------> 6. Home directory
| | | | +---------------> 5. GECOS
| | | +-------------------> 4. GID
| | +---------------------> 3. UID
| +-----------------------> 2. Password
+---------------------------> 1. Username
字段序号 | 示例 | 解释 | 说明 |
---|---|---|---|
1 | root | 用户名 | |
2 | x | 密码占位符 | 用户的密码 x 代表有密码 无内容,用户登录系统无需密码 |
3 | 0 | UID | 当前用户的身份标识 0 就是超级管理员 |
4 | 0 | GID | 当前用户的基本组ID |
5 | root | 用户的身份信息 大名 | 现已废弃 |
6 | /root | 用户家目录 | 超管:/root 普通用户:/home/用户名 |
7 | /bin/bash | 用户登录系统后 (默认)命令解释器 | /sbin/nologin 不允许登录系统 /bin/sh |
[root@localhost ~]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@localhost ~]#
用户分类
用户分类 | UID |
---|---|
普通用户 | > 1000 |
程序用户 | 1 - 1000 |
超级管理员用户 | 0 |
用户密码文件
/etc/shadow
记录了系统中用户的密码信息。
shadow 格式
该文件每一行记录一个用户的密码信息,并且以:
作为分隔符,一共9 段内容。
可以尝试修改root 密码。
root:$6$.IOzaCZc$f.u0fVe5QZb0mhm6UZvjcfa.un7vRXw8frfyoURLrOHmo7JsTI40a/iaQuHm/uCFqRuljfAyBCJDvOk7ZsCEM.:18765:0:99999:7:::
passwd root
root:$6$T07ge8Py$.tZXOZIOpWq2sGZKEkKn2KMahL.mcyNrQrd3C3PIqNt8kA0p/K3JtG4Dwn4vyU2kSvyEg1K2xArTs61AG1Qo1/:18766:0:99999:7:::
字段序号 | 示例 | 含义 | 说明 |
---|---|---|---|
1 | root | 用户名 | |
2 | $6$T07ge8 | 密码密文 | sha-512 HASH 散列算法 salt 值 加密后的密文 |
3 | 18766 | 密码修改时间 | 距离1970 年1 月1 日 密码最近一次的修改时间(天) |
4 | 0 | 密码最短有效期 | 在最短有效期之内不能修改密码 3:三天之内不可以修改自己的密码 root 用户不受此限制 |
5 | 99999 | 密码最长有效期 | 密码可以使用多长时间 建议设置成90 天 |
6 | 7 | 密码过期时间 | 密码过期前7 天会有警告提示 |
7 | 密码的不活跃期 | 过了密码有效期没有修改密码, 处于不活跃期,仍然可以登录系统。 | |
8 | 账户失效时间 | 密码距离1970 年1 月1 日的失效时间(天) | |
9 | 未分配功能 |
| 正常登录系统 | 仍然可以登录系统 |
0 用户不能修改密码 3 用户可以修改密码 83 提示修改密码 90 登录 | 密码锁定
|---------------------|------------------|----------------|------------------|-------------->
^ ^ ^ ^ ^
密码修改时间 密码最短有效期 密码过期时间 密码最长有效期 密码不活跃期
shadow 爆破
密码密文:
$6$T07ge8Py$.tZXOZIOpWq2sGZKEkKn2KMahL.mcyNrQrd3C3PIqNt8kA0p/K3JtG4Dwn4vyU2kSvyEg1K2xArTs61AG1Qo1/
$id$salt$encrypted
$加密方式$盐值(随机的)$密码密文
密码密文加密方式:
man crypt
shadow 文件爆破原理:
[root@localhost ~]# python
Python 2.7.5 (default, Apr 11 2018, 07:36:10)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt
>>> crypt.crypt("123.com","$6$T07ge8Py")
'$6$T07ge8Py$3/./MkHtBbziE5UiB/PvR0vkcwtvCoV0G2uYuFfIpbDleXrPJ0BPPNkFZfOY1iTsap.pdxaMrkyXJ/jQ5nxiH0'
>>> crypt.crypt("123456","$6$T07ge8Py")
'$6$T07ge8Py$JFrusYYpGVwWWiqt99Zjs1SJ6h0k.68kigzB5RIswP64SvGeGTY5MlpSwuThUw3dPKcUT214xnReGwPvlbjU41'
>>>
组信息文件
/etc/group
保存了组信息。
group 格式
该文件的每一行记录了每一个组的信息,并且以:
作为分隔符,一共4 段内容。
ajest:x:1000:ajest
字段数 | 示例 | 含义 | 说明 |
---|---|---|---|
1 | ajest | 组名 | 用户组的名称,由字母或数字构成。 |
2 | x | 密码 | x 是密码标识, 组密码默认保存在 /etc/gshadow 文件中。 |
3 | 1000 | GID | Group ID |
4 | ajest | 群组用户 |
组与用户
先有组,再有用户:
- 用户必须有且只有一个基本组。
- 当创建一个用户时,如果没有指定基本组,会先创建一个与该用户同名的组,再创建用户。
一个用户可以有多个附加组。
基本组内没有任何用户,才能被删除。
组与用户管理
- 掌握建立、修改、删除组的方法
- 掌握建立、修改、删除用户的方法
组管理
组管理,主要包括如下操作:
- 建立组
- 更新组信息
- 删除组
建立组
建立组使用groupadd 命令。涉及的选项有:
- -g,指定gid 号
新建class01 组:
[root@localhost ~]# groupadd class01
[root@localhost ~]# tail -1 /etc/group
class01:x:1001:
[root@localhost ~]#
新建class01 组,指定gid 为3000:
[root@localhost ~]# groupadd class01 -g 3000
[root@localhost ~]# tail -1 /etc/group
class01:x:3000:
[root@localhost ~]#
更新组信息
可以使用groupmod 命令更新组信息。
修改class01 组的gid 为2000:
[root@localhost ~]# groupmod class01 -g 2000
[root@localhost ~]# tail -1 /etc/group
class01:x:2000:
[root@localhost ~]#
删除组
使用groupdel 命令可以删除组。
删除class01 组:
[root@localhost ~]# groupdel class01
[root@localhost ~]#
用户管理
用户管理操作,主要包括:
- 建立用户
- 修改用户信息
- 删除用户
建立用户
可以通过useradd 命令创建用户,在创建用户的时候,可以通过选项指定用户基本信息,主要选项有:
- -u,指定uid 号
- -g,指定基本组
- -G,指定附加组
- -s,指定用户登录的命令解释器,如-s /sbin/nologin,-s /bin/bash
- -M,不创建家目录
新建tom 用户:
[root@localhost ~]# useradd tom
[root@localhost ~]# id tom
uid=1001(tom) gid=1001(tom) groups=1001(tom)
[root@localhost ~]# tail -1 /etc/group
tom:x:1001:
[root@localhost ~]#
由以上命令结果可知,在创建tom 用户时,没有指定基本组,Linux 创建了一个名为tom 的组。可以通过查看日志,印证观察到的结果。
[root@localhost ~]# grep "tom" /var/log/secure
Feb 23 11:44:23 localhost useradd[57489]: new group: name=tom, GID=1001
Feb 23 11:44:23 localhost useradd[57489]: new user: name=tom, UID=1001, GID=1001, home=/home/tom, shell=/bin/bash
[root@localhost ~]#
修改用户基本信息
可以通过usermod 命令修改用户基本信息,包括UID、基本组、附加组等。
修改tom 用户UID 为1500:
[root@localhost ~]# usermod tom -u 1500
[root@localhost ~]# id tom
uid=1500(tom) gid=1001(tom) groups=1001(tom)
[root@localhost ~]#
修改基本组为class01:
[root@localhost ~]# usermod tom -g class01
[root@localhost ~]# id tom
uid=1500(tom) gid=2000(class01) groups=2000(class01)
[root@localhost ~]#
修改附加组为class02:
[root@localhost ~]# groupadd class02
[root@localhost ~]# usermod tom -G class02
[root@localhost ~]# id tom
uid=1500(tom) gid=2000(class01) groups=2000(class01),2001(class02)
[root@localhost ~]#
删除用户
使用userdel 可以删除用户。默认情况下,创建用户的时候,会自动在/home 目录中,创建同名目录作为家目录,删除用户的时候,用户家目录,不会被删除。可以通过-r 选项,在删除用户的同时,删除用户家目录。
删除tom 用户,并删除其家目录:
[root@localhost ~]# ls /home/
wj tom
[root@localhost ~]# userdel -r tom
userdel: group tom not removed because it is not the primary group of user tom.
[root@localhost ~]# ls /home
wj
[root@localhost ~]# id tom
id: tom: no such user
[root@localhost ~]#
用户密码管理
查看用户密码状态
[root@localhost ~]# passwd -S jerry
jerry LK 2023-09-28 0 99999 7 -1 (Password locked.)
[root@localhost ~]#
由以上信息可知有 jerry 用户,用户信息如下:
状态值 | 说明 |
---|---|
jerry | 用户名 |
LK | 密码状态: * LK,密码锁定 * NP,没有密码 * PS,有可用密码 |
2023-09-28 | 创建时间 密码最近一次修改时间 |
0 | 最短有效期 |
99999 | 最长有效期 |
7 | 警告时间: * 密码过期前7 天警告 |
-1 | 失效时间: * -1,表示没有失效时间 |
补充命令:
passwd -d jerry 删除jerry 用户密码
设置用户密码
[root@localhost ~]# passwd jerry
Changing password for user jerry.
New password:
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# passwd -S jerry
jerry PS 2023-09-28 0 99999 7 -1 (Password set, SHA512 crypt.)
$6$s5GMa.SD$MzGe/GhtYi1vaFS8TpDiEhgWml3IXsU5liOwBSVh6KdMyUivpWOZpIQST.YPuIf/na33BrIGwXNNr6.Gu7SLJ1:19628:0:99999:7:::
[root@localhost ~]#
锁定用户
[root@localhost ~]# passwd -S jerry
jerry PS 2023-09-28 0 99999 7 -1 (Password set, SHA512 crypt.)
[root@localhost ~]# passwd -l jerry
Locking password for user jerry.
passwd: Success
[root@localhost ~]# passwd -S jerry
jerry LK 2023-09-28 0 99999 7 -1 (Password locked.)
[root@localhost ~]# grep "jerry" /etc/shadow
jerry:!!$6$s5GMa.SD$MzGe/GhtYi1vaFS8TpDiEhgWml3IXsU5liOwBSVh6KdMyUivpWOZpIQST.YPuIf/na33BrIGwXNNr6.Gu7SLJ1:19628:0:99999:7:::
[root@localhost ~]#
解锁账户
[root@localhost ~]# passwd -S jerry
jerry LK 2023-09-28 0 99999 7 -1 (Password locked.)
[root@localhost ~]# passwd -u jerry
Unlocking password for user jerry.
passwd: Success
[root@localhost ~]# passwd -S jerry
jerry PS 2023-09-28 0 99999 7 -1 (Password set, SHA512 crypt.)
[root@localhost ~]# grep "jerry" /etc/shadow
jerry:$6$s5GMa.SD$MzGe/GhtYi1vaFS8TpDiEhgWml3IXsU5liOwBSVh6KdMyUivpWOZpIQST.YPuIf/na33BrIGwXNNr6.Gu7SLJ1:19628:0:99999:7:::
[root@localhost ~]#