在Linux中,文件权限是文件的属性,决定了文件被谁可以访问,对于文件的管理是非常重要的,本篇文章讲述了对文件权限的管理。
1.文件权限的读写
文件属性分为8段,分别是:
- |rw-r--r--. | 1 | student | root | 0 | Oct 1 04:45 | westos1
文件类型:文件权限:文件被系统读写的次数(目录下文件的个数):所有人:所有组:文件大小(目录及其下的文件元数据的大小,前7项是七个字节,最后一项一个字母一个字节):文件最后一次被修改的时间:文件名
第一部分是文件类型,可以分为以下几种:
- #空文件,或者文本
d #目录
l #软链接
s #套接字
b #block块设备
c #字符设备
如下图,如果是目录,第一部分是d,是连接的话就是l,字符设备文件的话就是c
2.目录,文件所有人,所有组的修改
默认情况下,一个文件的所有人就是创建该文件的用户,所有组就是所有人所在的组,我们可以使用watch命令对文件或目录的属性进行监控,下图就是对/mnt目录进行监控:
[root@localhost ~]# chown student /mnt/westos1 #更改文件(目录)所有人
[root@localhost ~]# chgrp student /mnt/westos2 #更改文件(目录)所有组
[root@localhost ~]# chown student.admin /mnt/linux/ #更改所有人所有组
上图在修改linux目录所有人所有组的时候,该目录下的文件所有人所有组没有修改,可以使用以下命令第归修改目录下所有文件的所有人,所有组:
[root@localhost ~]# chown -R student.admin /mnt/linux/ #将目录下的文件或内容更改所有人所有组
3.文件权限的修改
在文件属性的第二段就是文件的权限,一共有9小段,分为三组,第一组是文件所有人的权限,第二组是文件所有组的权限,第三组是其它人的权限,其中字母代表意义如下:
r 对文件:是符可以查看文件中的内容 ---> cat file
对目录:是否可以查看目录中有什么子文件或者子目录 ---> ls dir
w 对文件:是否可以改变文件里面记录的字符
对目录:是否和以对目录中子文件或者子文件元数据进行更改
x 对文件:是否可以通过文件名称调用文件内记录的程序
对目录:是否可以进入目录
更改文件的权限如下:
#更改方式
[root@localhost ~]# chmod ugo-rwx /mnt/westos1 #u表示所有人,g表示所有组,o表示其他人
[root@localhost ~]# chmod u+r /mnt/westos1 #给所有人加上r权限
[root@localhost ~]# chmod o+w /mnt/westos1 #给其他人加上w权限
[root@localhost ~]# chmod +r /mnt/westos1 #给所有都加上r权限
[root@localhost ~]# chmod +w /mnt/westos1 #在更改w权限没有指定用户时,只对所有人的w权限进行更改,rx是全部进行更改
[root@localhost ~]# chmod o=---,ug=rw /mnt/westos1
除了用r w x表示外,还可以用数字表示,r=4,w=2,x=1,修改方式如下图:
4.umask系统默认预留权限修改
默认情况下,我们在创建文件或者目录时,其权限总是一定的,文件默认权限可以由下面这个公式得出:
文件和目录的默认权限=777-umask操作系统保留权限-文件系统保留的权限
那如何改变umask的值呢,有两种方式,永久的和临时的,临时修改只需要用命令修改,如下图:
临时修改在重新打开shell或者电脑重启之后就会恢复原来的值,要想永久性的修改需要对配置文件进行编辑:
[root@localhost mnt]# vim /etc/profile #系统文件
[root@localhost mnt]# vim /etc/bashrc #shell文件,需要与系统文件保持一致
对两个文件重新加载后,umask值就会永久修改:
5.特殊权限
1)粘制位sticky,t=1
以上修改文件在一些情况下是不满足生产需求,如下图,在公共目录中,用户可以创建自己的文件,但是却能够删除其它人创建的文件:
那如何能保证文件只能被所有人删除,这是就需要引入粘制为sticky,修改方式如下:
[root@localhost ~]# chmod 1777 /mnt/public/
[root@localhost ~]# chmod o+t /mnt/public/
修改之后other权限最后以一位变为了t,文件的所有人才能删除文件,如下图tom用户不能删除student用户创建的文件:
应该注意粘制位只能针对目录生效,在该目录下的文件只能被所有人删除。
2).sgid强制位,s=2
针对目录,在g+s加上强制位之后,所有在该目录下的文件的所有组与该目录保持一致,如下图:
针对文件,在给执行文件g+s之后,无论任何用户执行该文件时的所有组都与执行文件的所有组保持一致。权限级的权力上升和下降。
上图中,将touch二进制文件所有组修改为student用户,在添加上强制位之后,用touch命令创建的文件所有组都为student组,如下图:
3).冒险位 u+s=4
只针对二进制可执行文件,u+s后,所有用户在执行该文件时都是以该文件的所有人的身份去执行文件,如下图,touch命令的二进制执行文件的所有人为student,所有使用touch命令创建的文件的所有人都都是student:
6.acl权限列表
一旦开启acl权限列表,在查看文件权限的时候,后面会出现一个“+”,此时就不需要再看“+”前面的权限,一切都以acl权限列表中的权限为准,如下图:
使用getacl命令查看acl权限列表:
上图说明/mnt/westos文件所有人权限为rw,对于student用户的权限为rw。
添加使用-m参数,删除使用-x参数,如下图:
关闭acl权限列表使用-b参数,如下图:
acl权限列表中的mask标示能生效的权力值,如果使用chmod去改变mask的值,会损坏acl权限列表,损坏后用命令将mask值修改后就会恢复,如下图:
7.acl默认权限列表的添加
给一个目录设定acl权限列表后,在该目录下重新创建文件或目录的时候,其acl权限列表不会继承上级目录,如下图:
因此,我们可以设置默认权限列表,添加方式如下图:
在添加之后,在/mnt/test/目录下创建的文件和目录都会继承test目录默认的acl值,如下图:
值的注意的是default的值对目录本身不生效,只对该目录下的文件生效,如下图: