1.前言
这一周,学习了LINUX的用户和组管理,接触到了很多新的东西,脑袋里面的知识有点乱,准备写一篇博客,理一理思路。
2.一些观点
第一,无论是WINDOWS的GUI,还是LINUX的COMMAND LINE,用户的请求最终将这样实现:
USER-->PROCESS-->KENEL
也就是说,进程将代理用户的请求,和操作系统打交道。每一个进程应该带有一个用户标示。
第二,我们知道,一旦启动操作系统,即便我们不登陆,很显然有些进程(或者说服务)也会在后台运行的。那么这些进程的用户标示是什么呢?
如果是root,那这些进程将拥有一切权利,一旦被恶意代码劫持,系统将出现安全问题。
既然不能是root用户,那么应该是什么用户呢?
第三,LINUX的用户,可以分为管理员和普通用户。
管理员即root用户。
普通用户又可以分为系统用户和一般用户。
系统用户一般不用登陆系统,也就是说第二点中的那些后台进程应该以系统用户的身份进行启动。
一般用户可以登录系统。
3.用户是如何进行登录密码校验的?
第一,/etc/passwd,顾名思义,好像用户的密码存放在这里。
[[email protected] ~]# ls -l /etc/passwd -rw-r--r-- 1 root root 2426 May 16 10:34 /etc/passwd [[email protected] ~]# |
第二,观察/etc/passwd的权限,发现不论什么用户都可以read。如果密码真的放在这里,安全吗?
第三,查看/etc/passwd的内容
zhangfengzhe:x:500:500:redhat:/home/zhangfengzhe:/bin/bash test:x:502:502::/home/test:/bin/bash p1:x:503:503::/home/p1:/bin/bash p2:x:504:503::/home/p2:/bin/bash |
具体的各个字段的意思,用man指定章节的查看即可。
第二位是密码,大部分都是一个X,这其实表示的是一个密码占位符。
也就是说,/etc/passwd看不到密码。
那么密码在哪里呢?
第四,LINUX里面有一个影子口令的概念,去/etc/shadow看一下。
第五,redhat的密码加密方式是MD5。(message digest,信息摘要,5 stands for version)
第六,md5这种加密方式,即单向的加密,而且有一个特征,初始条件的微小改变,将导致结果的巨大变化。正因为这个蝴蝶效应(或者说雪崩效应),使得逆向破解SO HARD~
第七,看一看,/etc/shadow文件内容。
zhangfengzhe:$1$1LQD2zT0$7JhMdPOHiNlMHpVc/9tJd/:16205:0:99999:7::: test:!!:15396:0:99999:7::: p1:$1$oti0SlMg$O6Dha9wv6zKl8Wlneb0uB0:15397:0:99999:7::: p2:$1$JFfa13Xt$Y27d9W5LAQWn6d/WPXTVE0:15397:0:99999:7::: |
第八,思考下,如果user1用户看了这个shadow文件,发现USER2用户的密码串和他一样,是否认为他们的密码一致?
记住,农夫山泉有点甜,LINUX给密码加点盐。
事实上,LINUX在给密码进行加密的时候,会先生成一个杂质(术语叫salt,盐的意思),然后再进行salt+your passwd进行MD5加密。
这个杂质是随机的。
第九,when the user login LINUX,the kernel will get your password and salt,then have the md5sum to compare it in /etc/shadow.
if they are equal,you can login success.
上面就是用户登录进行密码校验的过程。
4.一些文件
和用户,组相关的文件主要有:/etc/passwd,/etc/shadow,/etc/group,/etc/gpasswd。
/etc/passwd:
主要关注用户相关信息。
usename,user id,groupid,home,shell
注意groupid是用户的基本组ID(默认组)。
shell里面特别注意/sbin/nologin,表示用户将无法登录(一般都是系统用户)
USERID事实上也有分类,0代表root,1-499表示系统用户,500到6W表示一般用户。
/etc/shadow:
主要关注密码相关信息。
如果密码位,是!!或者*,那么此用户被锁定,无法登录。如果密码为空,根据LINUX的登录规则:禁止空密码登录,也将无法登录系统。
【根据上面的理论,也就是说,我们可以手动让一个用户无法登录系统。实际上命令终将反映到文件的变化上来】
密码的一些时间,比如修改,最短使用期限,最长使用期限,警告,过期宽限,失效时间。
/etc/group和/etc/gpasswd
组信息,组密码信息。
疑问?组不是用户,不会进行登录,那为什么需要密码呢?
看下面的例子:
[[email protected] ~]# su - zhangfengzhe8 [[email protected] ~]$ touch abc.txt [[email protected] ~]$ ls -l abc.txt -rw-rw-r-- 1 zhangfengzhe8 zhangfengzhe8 0 May 16 11:44 abc.txt [[email protected] ~]$ newgrp mygroup Password: [[email protected] ~]$ touch abc2.txt [[email protected] ~]$ ls -l abc2.txt -rw-r--r-- 1 zhangfengzhe8 mygroup 0 May 16 11:45 abc2.txt [[email protected] ~]$ |
实际上,我们可以临时切换用户的基本组到G1,那么如果这个用户不属于G1组,附加组也不在G1里面,那么需要密码。
5.一些命令
useradd |
useradd equals adduser。 常用-u,-g,-G,-d,-s |
userdel | 注意-r,是否删除home |
usermod |
和useradd选项差不多,需要注意的是,重新修改用户的附加组,是追加,还是覆盖?用-r选项。 |
id finger id username finger username |
查看用户信息 |
..... | 看我以后的博客吧... |
分析Linux的组和用户