- 理解Linux 用户和组的概念
- 掌握passwd 文件的组成以及作用
- 掌握shadow 文件的组成以及作用
- 了解group 文件的内容
1.用户分类:
- 超级管理员(root)
- 普通用户
- 程序用户
1.用户信息文件
/etc/passwd
文件中存储了所有用户信息。
1.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
/etc/passwd文件中,排位代表:
[用户名]、[口令]、[uid]、[组id]、[备注]、[家目录]、[登录shell]
|------|-----------|-------------------|-------------------------------|
| 字段序号 | 示例 | 解释 | 说明 |
| 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 ~]#
2.用户分类
|---------|----------|
| 用户分类 | UID |
| 普通用户 | > 1000 |
| 程序用户 | 1 - 1000 |
| 超级管理员用户 | 0 |
1.用户密码文件
/etc/shadow
记录了系统中用户的密码信息。
2.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 | 6T07ge8 | 密码密文 | 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 登录 | 密码锁定
|-------------------|----------------|----------------|------------|-------------->
^ ^ ^ ^ ^
密码修改时间 密码最短有效期 密码过期时间 密码最长有效期 密码不活跃期
在/etc/shadow文件中,排位代表:
[用户名]、[密码口令]、[上次更改密码时间]、[最小修改密码时间间隙]、[密码有效期]、[密码需要变更前的警告天数]、[密码有效期]、[密码过期后的宽限天数]、[账户失效时间]、[保留]
3.shadow 爆破
1.密码密文:
$6$T07ge8Py$.tZXOZIOpWq2sGZKEkKn2KMahL.mcyNrQrd3C3PIqNt8kA0p/K3JtG4Dwn4vyU2kSvyEg1K2xArTs61AG1Qo1/
$id$salt$encrypted
$加密方式$盐值(随机的)$密码密文
2.密码密文加密方式:
man crypt
密码学:
(安全性取决于密钥,算法公开的)
密文 = 密码算法 (明文,盐值)
- 密码算法
对称加密(加密密钥与解密密钥一样)
非对称加密(加密密钥与解密密钥不一样)
Hash 算法
陷门算法
单项运算
- 密码体制
明文
加密算法
加密密钥
解密算法
解密密钥
密文
解密算法
import crypt
crypt.crypt("123456","$6$T07ge8Py$")
循环算法
3.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'
>>>
4.组信息文件
/etc/group
保存了组信息。
5.group 格式
该文件的每一行记录了每一个组的信息,并且以:
作为分隔符,一共4 段内容。
caliy:x:1000:caliy
|-----|-------|------|------------------------------------|
| 字段数 | 示例 | 含义 | 说明 |
| 1 | caliy | 组名 | 用户组的名称,由字母或数字构成。 |
| 2 | x | 密码 | x 是密码标识,组密码默认保存在 /etc/gshadow 文件中。 |
| 3 | 1000 | GID | Group ID |
| 4 | caliy | 群组用户 | |
6.组与用户
先有组,再有用户:
- 用户必须有且只有一个基本组。
-
当创建一个用户时,如果没有指定基本组,会先创建一个与该用户同名的组,再创建用户。
一个用户可以有多个附加组。
基本组内没有任何用户,才能被删除。