所有用户信息存储在/etc/passwd文件中
SolidCaptureImage13269421
每个用户占用一行,每行7个字段,由“:”隔开,代表不同的含义,以上面的root用户为例
root x 0 0 root /root /bin/bash
用户名 有密码(去掉则密码为空) uid gid(初始组or私有组) 用户描述 主目录 可用shell
特殊shell:
通常用户需要与操作系统进行交互沟通,需要通过shell,默认分配/bin/bash,而上图看到的/sbin/nologin则是一种特殊shell,这个shell并不会让用户和操作系统之间有交互,而代表不允许此用户登陆系统
 
所有用户密码存储在/etc/shadow文件中
SolidCaptureImage13925484
格式基本与/etc/passwd一致,每用户一行,但这里有9个字段,还是以root为例
root $1$xk… 14515 0 99999 7      
用户名 md5加密后的密码 从1970.1.1算起,密码已创建的时间(天) 最短更改期限(天) 最长更改期限(天) 警告天数 过期多少天后禁用此用户 失效时间(天) 保留
 
密码字段的不同:
有时我们会在密码字段看到非md5加密密码,而是其他符号,比如“*”“!!”等,这些符号在linux中代表锁定,也就是说,如果某个用户的密码字段是一个“*”或者是“!!”,即代表此用户被锁定,无法登陆系统
比如我将user1的密码字段改为“*”,那么在user1登录系统时就会出现下面这种情况
SolidCaptureImage14901859
SolidCaptureImage14810921
 
注:若/etc/shadow文件损坏或丢失,则已有用户无法登陆系统(因为设置了密码,但找不到密码),新建用户密码会保存在/etc/passwd第二字段(非明文),如果知道某用户密码的话,可以用grub-md5-crypt命令来生成md5密码并填入/etc/passwd中该用户行的第二字段,以恢复此用户登陆功能
SolidCaptureImage15181203
 
所有组存在/etc/group文件中,格式和/etc/passwd基本相同
SolidCaptureImage13505515
root x 0 root
组名 有密码(去掉则密码为空) gid 组成员,若多个成员用逗号隔开
 
Linux文件安全
Linux文件权限控制分三部分,user,group,other
SolidCaptureImage22833156
从上面的图可以看出来,每个文件或目录名前面都有一大串字母或短杠以及其他信息,拿Desktop目录那行信息来举例说明
drwxr-xr-x 2 root root 4096 Feb 14 2015 Desktop
权限 内容数 属主 属组 大小(Byte) 修改日期 目录名
1、权限
权限字段实际上细分为10位,短杠“-”代表无,d表示目录,r表示read读,w表示write写,x表示execute可执行(windows用后缀名来区分,如.exe/bat等),把这10位分段,分为4部分
  • 第一部分1位,表示文件类型,比如该文件属于普通文件、目录、块设备还是链接,都有不同的一个字符表示,
  • 剩下的9位每3位为一组,从左至右分别代表user、group、other的权限,而其中的user、group就是对应后面跟的属主和属组
2、内容数
这个字段值需要分两部分看,对于目录来说就是指该目录所含的子目录数,对于文件来说则代表该文件的硬链接数
3、属主
表示此文件的拥有者
4、属组
表示此文件的共享组
5、大小
同样也需要分两部分看,对于目录是指目录大小,默认最小都是4096Byte(4K),若目录大小超过4K,则会以4K为一个单位向上累加显示,比如8192Byte,个人理解比较类似磁盘簇的概念;对于文件来说就指文件大小,这时就没有4096Byte这个默认值了,最小是0,也就是空文件
6、修改日期
代表该文件的创建或最近一次修改时间
7、目录名
显示目录名或文件名
那么现在来解释一下这一行的具体含义:
该文件类型为目录,目录名是Desktop,创建于2015年2月14日,目录大小为4096字节,子目录数为2,拥有者为root,共享用户组为root组,拥有者对此目录具有读写执行权限即完全控制,共享组内用户具有读执行权限即只读,其他任意用户同样只读
通常我们用一种更简单的方法来表示rwx这3种权限,r对应数字4,w对应数字2,x对应数字1,这样的话每3位的和就为4+2+1=7
假设某文件所有用户都对其完全控制,则该文件权限位可写为-rwxrwxrwx,也可以表示为777
以Desktop目录为例,则此目录具有755的权限
用ll /home查看,可以看出/home下每个用户的主目录权限为属主完全控制(700),其他人一律不得访问,当然除root以外
SolidCaptureImage22877781
 
SolidCaptureImage22926078
  • 看到那三个点了吗,这里需要特别说明一下,在Linux中,每个目录最少都含有2个子目录,一个是“.”当前目录,另一个是“..”上级目录,比如输入“cd ..”命令就代表进入上一层目录,这一点和windows下面的命令行操作是一样的
  • 另外,权限上还有个问题,刚提到拥有者和共享组的用户都可以对Desktop目录有执行权限,一个目录怎么被执行呢?其实对于目录来说,这个x权限就不是执行的意思了,而代表允许进入目录,比如想设置一个只读的共享目录给某些用户,就不能有w写权限,但x权限是必须的,否则用户连x进入都执行不了,还怎么去做r只读的操作
 
改变文件的所有权
1、只有root可以操作文件的属主
2、只有root或创建者可以更改属组
chown [-R] username file/dir 用来更改一个文件或目录的属主,-R选项为递归的意思
比如我需要将/root下的Desktop目录属主由root改为user1,就可以这样操作
SolidCaptureImage23363046
这时Desktop目录便可以由user1完全控制了,因为属主的权限为rwx,但实际上user1是无法操作/root/Desktop目录的,因为Desktop目录的父目录/root为750权限,并未允许other用户进入,所以刚才的操作也只是演示命令效果而已,实际中还需要其他操作才能实现
SolidCaptureImage25503515
chgrp [-R] groupname file/dir 用来更改一个文件或目录的属组
也可以用chown同时更改属主和属组
SolidCaptureImage25819000
 
改变文件权限
chmod perm file/dir 用来更改
1、字符方式
刚说了文件的权限分3部分,属主(u)、属组(g)、其他(o),每部分均有rwx权限,用“+/-”表示赋予或取消
建立/test目录,默认权限是755,属主属组为root,现需要让user1可以在目录内建立文件,则要给other加上write权限
SolidCaptureImage28524796
使文件可以让所有用户都能修改
SolidCaptureImage30322359
使属主和属组的用户可以执行user1file,其他用户不可执行
SolidCaptureImage30733687
2、数字方式
现在user1file的权限为664,属主属组为user1,需要使user2可以更改文件内容,则需要将664改成666
user2使用vi /test/user1file后,vi编辑器会警告,正在编辑只读文件,也就是user2对此文件不具有修改权限
SolidCaptureImage29348328
SolidCaptureImage29489859
SolidCaptureImage29586578