首页 > 代码库 > 分析Linux的组和用户

分析Linux的组和用户

1.前言

这一周,学习了LINUX的用户和组管理,接触到了很多新的东西,脑袋里面的知识有点乱,准备写一篇博客,理一理思路。


2.一些观点

第一,无论是WINDOWS的GUI,还是LINUX的COMMAND LINE,用户的请求最终将这样实现:

USER-->PROCESS-->KENEL

也就是说,进程将代理用户的请求,和操作系统打交道。每一个进程应该带有一个用户标示。


第二,我们知道,一旦启动操作系统,即便我们不登陆,很显然有些进程(或者说服务)也会在后台运行的。那么这些进程的用户标示是什么呢?

如果是root,那这些进程将拥有一切权利,一旦被恶意代码劫持,系统将出现安全问题。

既然不能是root用户,那么应该是什么用户呢?


第三,LINUX的用户,可以分为管理员和普通用户。

管理员即root用户。

普通用户又可以分为系统用户和一般用户。

系统用户一般不用登陆系统,也就是说第二点中的那些后台进程应该以系统用户的身份进行启动。

一般用户可以登录系统。


3.用户是如何进行登录密码校验的?

第一,/etc/passwd,顾名思义,好像用户的密码存放在这里。

[root@localhost ~]# ls -l /etc/passwd
-rw-r--r-- 1 root root 2426 May 16 10:34 /etc/passwd
[root@localhost ~]#

第二,观察/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

组信息,组密码信息。

疑问?组不是用户,不会进行登录,那为什么需要密码呢?

看下面的例子:

[root@localhost ~]# su - zhangfengzhe8
[zhangfengzhe8@localhost ~]$ touch abc.txt
[zhangfengzhe8@localhost ~]$ ls -l abc.txt
-rw-rw-r-- 1 zhangfengzhe8 zhangfengzhe8 0 May 16 11:44 abc.txt
[zhangfengzhe8@localhost ~]$ newgrp mygroup
Password:
[zhangfengzhe8@localhost ~]$ touch abc2.txt
[zhangfengzhe8@localhost ~]$ ls -l abc2.txt
-rw-r--r-- 1 zhangfengzhe8 mygroup 0 May 16 11:45 abc2.txt
[zhangfengzhe8@localhost ~]$

实际上,我们可以临时切换用户的基本组到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

查看用户信息
.....看我以后的博客吧...




















本文出自 “我想超越自我” 博客,请务必保留此出处http://zhangfengzhe.blog.51cto.com/8855103/1412810