linux文件权限简要记录

在linux中某个文件(目录)的权限有三种:可读(r),可写(w),可执行(x)

注意:权限对目录和文件的理解上是不同的,详情请看目录与文件权限的意义
在linux输入如下命令

1
ls -al

可以看到如下结果:

drwxr-xr-x 1 LuckyCoder 197121      0 9月  28 20:33 ./                 
drwxr-xr-x 1 LuckyCoder 197121      0 9月  28 12:16 ../                
drwxr-xr-x 1 LuckyCoder 197121      0 9月  28 20:53 .deploy_git/ 
-rw-r--r-- 1 LuckyCoder 197121     71 9月  25 20:06 .gitignore     
-rw-r--r-- 1 LuckyCoder 197121    117 9月  25 20:06 .gitmodules

解释如下:
第一列代表的是文件的类型与权限(本篇主要对此进行叙述)
第二列代表的是连接数,表示有多少文件名连接到这个节点(i-node)
第三列表示这个文件(或目录)的“所有者账号”
第四列表示这个文件的所属用户组
第五列为这个文件的容量大小,默认单位是B
第六列为这个文件的创建日期或者最近的修改日期
第七列为该文件名
第一个字符表示这个文件是“目录,文件或链接文件等”

字符 含义
d 目录
- 文件
l 连接文件(linkfile)
b 设备文件里面的可供存储的接口设备
c 设备文件里面的串行端口设备,如键盘,鼠标(一次性读取设备)

接下来的字符中以三个为一组,且均为”rwx”的3个参数的组合
第一组为“文件所有者的权限”
第二组为“同用户组的权限”
第三组为“其他非本用户组的权限”


改变文件属性与权限的重要命令:

命令 命令格式 含义 注意
chgrp chgrp 用户组名 文件或者目录 改变文件所属用户组 要被改变的组名必须要在/etc/group文件中存在
chown chown 账号名称 文件或者目录 改变文件所有者 要被改变的所有者必须在/etc/passwd文件中存在
chmod chmod rwx 文件或者目录 改变文件的权限 无特别注意事项,请确保正确理解其参数含义即可

文件的默认权限与隐藏权限

文件的默认权限:umask

[luckycoder@localhost ~]$ umask
0002
[luckycoder@localhost ~]$ umask -S
u=rwx,g=rwx,o=rx

这个一目了然,不多加叙述了,主要记住,设置哪个位置的数字,对应着剥夺某个权限就可以了,主要应该注意的就是那个最前面的0,涉及到特殊权限

文件的隐藏属性:chattr,lsattr

需要注意的是chattr命令只能在Ext2/Ext3/Ext4的文件系统上才能生效
操作如下:

[luckycoder@localhost test]$ cd /home/luckycoder
[luckycoder@localhost test]$ mkdir test
[luckycoder@localhost test]$ cd test
[luckycoder@localhost test]$ touch aaa
[luckycoder@localhost test]$ su root
密码:
[root@localhost test]# ls -al
总用量 8
drwxrwxr-x.  2 luckycoder luckycoder 4096 9月  29 06:48 .
drwx------. 16 luckycoder luckycoder 4096 9月  29 06:54 ..
-rw-rw-r--.  1 luckycoder luckycoder    0 9月  29 06:48 aaa
[root@localhost test]# chattr +i aaa
[root@localhost test]# exit
exit
[luckycoder@localhost test]$ rm aaa
rm:是否删除有写保护的普通空文件 "aaa"?y
rm: 无法删除"aaa": 不允许的操作
[luckycoder@localhost test]$ lsattr aaa
----i--------e-- aaa    

具体的参数可以chattr –help来查阅

文件的特殊权限:SUID,SGID,SBIT

SUID

  • SUID权限仅仅对二进制程序有效
  • 执行者对于该程序需要具有x的可执行权限
  • 本权限仅在执行该程序的过程中(run-time)有效
  • 执行者将具有该程序所有者(owner)权限 解释一下就是:一个二进制可执行文件(或者说命令吧,例如passwd),它虽然没有设置除了root之外的人可以执行,但是其他账户却能够通过执行它来修改自己的密码,这不是很矛盾么。其实就是因为这个命令具有SUID权限,所以才能达到这样的效果。在用户执行passwd文件的时候用户暂时获得了root的权限,从而可以执行它修改密码。
    需要注意的是:SUID权限只能用于二进制程序上面,而不能用于shellscript上

SGID

  • SGID对二进制文件有用
  • 程序执行者对于该文件来说,需具备x的权限
  • 执行者在执行的过程中将会获得该程序用户组的支持
    这就不详细举例子说明了,和上面的SUID差不多的意思,不同点在于这里是用户组的支持,SUID是所有者权限

SGID与SUID是不同的,它既能用于文件,也能用于目录,如下:

  • 用户若对于此目录具有r与x的权限时,该用户能够进入此目录
  • 用户在此目录下的有效用户组(effective group)将会变成目录的用户组
  • 若用户在此目录下具有w的权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同

以上这三点特性比较的有用,下面根据具体的案例来理解:
例题: 假设系统中有两个账号,分别是alex与arod,这两个人除了自己用户组之外还共同支持一个名为project的用户组。假设这两个用户需要共同拥有/srv/ahome目录的开发权,且该目录不许其他人进入查阅。请问该目录的权限应设置为什么?请先以传统的权限说明,再以SGID的功能解析
首先以传统的权限,运行如下:

[root@localhost /]# groupdel project
[root@localhost /]# groupadd project
[root@localhost /]# useradd -G project alex
[root@localhost /]# useradd -G project arod
[root@localhost /]# mkdir /srv/ahome
[root@localhost /]# cd /srv
[root@localhost srv]# ls -al
总用量 12
drwxr-xr-x.  3 root root 4096 9月  30 04:40 .
dr-xr-xr-x. 18 root root 4096 9月  30 04:40 ..
drwxr-xr-x.  2 root root 4096 9月  30 04:40 ahome
[root@localhost srv]# chgrp project /srv/ahome
[root@localhost srv]# ls -al
总用量 12
drwxr-xr-x.  3 root root    4096 9月  30 04:40 .
dr-xr-xr-x. 18 root root    4096 9月  30 04:40 ..
drwxr-xr-x.  2 root project 4096 9月  30 04:40 ahome
[root@localhost srv]# chmod 770 /srv/ahome
[root@localhost ahome]# ls -al
drwxrwx---.  2 root project 4096 9月  30 04:40 ahome
[root@localhost ahome]# su alex
[alex@localhost ahome]$ touch aaa
[arod@localhost ahome]$ ls -al
总用量 8
drwxrwx---. 2 root project 4096 9月  30 04:45 .
drwxr-xr-x. 3 root root    4096 9月  30 04:40 ..
-rw-r--r--. 1 arod arod       0 9月  30 04:45 aaa

我们发现在alex在目录/srv/ahome下创建的文件并不属于project,又因为文件的权限为-rw-r--r--,所以会导致arod用户无法修改这个文件,这与我们创建这个用户组的原意是相违背的,所以进行如下修改,在project用户组所属文件夹加入SGID权限后结果如下

[root@localhost ahome]# chomd 2770 /srv/ahome
[alex@localhost ahome]$ touch bbb
[alex@localhost ahome]$ ls -al
总用量 8
drwxrws---. 2 root project 4096 9月  30 04:50 .
drwxr-xr-x. 3 root root    4096 9月  30 04:40 ..
-rw-r--r--. 1 arod arod       0 9月  30 04:45 aaa
-rw-rw-r--. 1 alex project    0 9月  30 04:50 bbb

可以发现alex用户创建的文件bbb是属于project用户组的(可以看到对于同一用户组的成员对该文件具有rw权限),这样同属于用户组project的用户arod也能够自由编辑该文件了。

SBIT

当用户对于此目录具有w,x权限,即具有写入权限时候,当用户在该目录下创建文件或者目录的时候,仅有自己与root才有权利删除该文件

SUID/SGID/SBIT权限设置

4为SUID
2为SGID
1为SBIT

最后一点需要注意的是

当文件权限出现大写的S与T的时候,这个S,T代表是空的,也就是以上特殊权限中的前提权限不成立的时候,偏偏该文件又被赋予了特殊权限。从而产生了大写的S与T的情况

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器