上面讲到了用户特征码,操作系统时通过用户特征码来识别用户的。对于淫类,我们识别用户是通过用户名,因为用户名(字符串)好记。而计算机觉得数字更好记一些,于是在创建用户时系统会为其分配一个唯一的特征码,用以识别该用户,这个特征码也叫UID。同样的,用户组也有特征码,叫做GID。
Linux 系统中,UID以如下的方式划分:
0 表示管理员(root)
1 - 500 表示系统用户
501 - 65535 表示普通用户
不同的 Linux 发行版,这些数字可能不一样
4. /etc/passwd 中的字段分析/etc/passwd 中的字段分别表示如下信息(字段名字是我自己取的):
ACCOUNT:用户名
PASSWORD:密码占位符
UID:用户ID
GID:用户组ID
COMMAND:注释信息
HOME DIR:用户家目录
SHELL:用户的默认 shell
密码占位符,其值是 x,显然这不是真正的密码。真正的密码保存在哪里呢?在 /etc/shadow 文件中,此文件中保存的也不是明文密码,而是经过加密处理之后的密码。我们来看一下 /etc/shadow 中的内容(root only):
可见,/etc/shadow 中保存的也是数据表,这个表也和用户相关。还记得第二天说到的 man 命令吗?man 手册的第五个章节是特殊文件,我们来 man 一波试试:
对于 /etc/shadow 中每个字段的含义,手册中都给出了说明,我们可以去参考(这里只给出了一部分截图)。同理,对于 /etc/passwd,我们也可以通过 man 5 passwd 查看每一个字段表示的含义。
好了,回到 PASSWORD 字段,我们看一下 root 用户和 charley 的此项字段值,可以看到此值中有一些规律可循:
$1$XXXXXXXX$XXXXXXXXXX.....
我们可以通过此字段来获取如下信息:
前两个美元符号中的数字1表示加密方式是 md5
第二个和第三个美元符号之间的字串是经过加密后的密码盐值
第三个美元符号之后的字串是密码明文精加密的后的特征码
既然谈到了加密和盐值,我们来复习一下关于加密的基础知识。我们通常用到的加密方式有一下几种:
对称加密:使用同一套密码进行加密和解密
公钥加密:每个密码以私钥(secret key)和公钥(public key)成对出现,公钥进行的加密使用与其配对的私钥解密,反之亦然,相对于对称加密,速度很慢,一般不用于加密,而是秘钥交换
单向加密(散列加密):只能加密不能解密。也就是说只能由明文取得密文,而不能由密文取得明文。经过单向加密得到的是一份唯一的特征码,每个数据的特征码是独一无二的,因此也叫作指纹加密。如果两次算法取得的特征码一样,那么就是同一份数据。���向加密可以用来做数据校验,如果数据被动了手脚,那么数据的特征码就不一样。常用的散列加密方式有:
MD5:定长128位输出特征码
SHA1:定长160位输出特征码
还有其他方式,主要体现在特征码输出长度的不同
单向加密的特点:
不可逆
雪崩效应:数据的微小改变,会引起特征码的巨大变化
定长输出:不管加密的内容长度多少,输出的特征码长度都是一样
加盐:如果两个用户使用了同样的密码,那么经过 MD5 散列加密后的特征码就是一致的,如果一个用户偶然发现另一个用户的特征码和他自己是一样的,那么就可以推断另一个用户的密码。这是不太安全的。为了安全起见,我们需要用到散列加密特点中的雪崩效应,往密码中额外加点杂质(内容),这样加密后的特征码就千差万别了。这个过程就是所谓的加盐。
5.useradd 命令:添加用户