本篇讲述linux系统的文件权限。
1. liunx中权限的分类
linux系统中,对权限的管理的逻辑是:
- 只有三种权限:R(读)、W(写)、X(执行)
- 只有三种角色:所属用户、所属组、其他
使用ls -l 命令即可查看某个文件或文件夹的权限:
上图中的:-rw-r–r–,即是权限的详细内容,一共10位,分别表示:
文件类型 | 所属用户权限 | 所属组权限 | 其他用户权限 | 备注 |
- | r w - | r - - | r - - | - 表示没有权限 |
所以上图表示:/tmp/123这个文件,root用户有读写权限、root组内的用户有读权限,其他用户有读权限
2. 三种特殊权限SUID、SGID、Sticky
大部分情况下,上述的权限分类就够了,但是某些情况下,就必须要使用到特殊权限。
特殊权限有三种:
- suid:拥有这个权限的文件(一般指可执行的二进制文件),运行的时候,它的所属用户不变,如/usr/bin/passwd,它不管是哪个用户来运行,运行起来的所属用户都是root。
所属用户权限有个s,说明有suid权限,一般这类权限不设置,除非是特定情况。
赋权限: # chmod u+s
取消权限: # chmod u-s
- sgid:这个权限一般赋给文件夹,拥有这个权限的文件夹,在此文件夹内部创建的文件,所创建的文件所属组都是这个文件夹的所属组,一般常用于文件夹共享的场景
所属组权限有个s,说明sgid权限
赋权限: # chmod g+s
取消权限: # chmod g-s
- sticky:这个权限也多赋给文件夹(一般这个文件夹的权限比较大,比如777),在有这个权限的文件夹下创建文件,所创建的文件其他人无法删除。比如系统自带的/tmp文件夹
所属其他权限有个t,说明有sticky权限
赋权限: # chmod o+t
取消权限: # chmod o-t
3. UMASK的作用
当我们创建一个文件或者文件夹的时候,默认的会有相应的权限,比如:
默认文件权限:600,默认文件夹权限:755,这个默认值是在哪里指定的呢?答案就是umask
修改umask的命令:umask 044
4. 文件系统的ACL
至此,linux的权限已经可以满足绝大部分的需求了,但是还是有一些特殊的要求,比如一个文件,它的所属主和所属组是X,但是却希望A用户可以RW,B用户只可以R,甚至还有其他的条件限制,那么上述的几种权限控制可能就不能满足了,那怎么办呢?答案就是文件系统的ACL。
为什么说是文件系统的ACL?因为这是特定的文件系统所拥有的功能,可幸的事,现在linux大部分的文件系统都支持ACL了。
- 查看linux分区文件系统可以使用命令:df -T
- 查看文件的acl信息: getfacl
- 设置文件的acl信息: setfacl
具体用法的详细信息可以man查看。
5. 文件系统的锁
还有一个命令:chattr,可以修改文件的属性。(如访问时间,不允许追加等等),这个命令只有管理员才可以执行。
- 文件加锁:chattr +i filename
- 文件去锁:chattr -i filename
- 查看文件是否有锁:lsattr filename
比如,我在工作经常遇到的服务器/etc/resolv.conf文件经常被修改掉(受NetworkManager影响的吧),而我并不希望它被修改,则可以: chattr +i /etc/resolv.conf
用lsattr查看文件的属性,有个i,表示文件已经被锁定,不允许任何用户(包括管理员用户)去修改了,如果想修改,需要先去锁了。