权限简介
- Linux系统上对文件的权限有着严格的控制,如果想对某个文件执行某种操作,必须具有对应的权限方可执行成功。
- Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。
- Linux下权限的粒度有 拥有者 、群组 、其它组 三种。每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以通过
chown
chgrp
命令将该用户加入具备权限的群组,一个用户可以同时归属于多个组。 - Linux上通常使用
chmod
命令对文件的权限进行设置和更改。
基本权限
任何一种文件创建之后,会由umask
来确定其默认权限,这些权限基本都是常用的基本权限,表示码如下:
权限 | 二进制 | 八进制 | 描述 |
---|---|---|---|
--- | 000 | 0 | 无权限 |
--x | 001 | 1 | 只有执行权限 |
-w- | 010 | 2 | 只有写入权限 |
-wx | 011 | 3 | 写和执行权限 |
r-- | 100 | 4 | 读权限 |
r-x | 101 | 5 | 读取和执行的权限 |
rw- | 110 | 6 | 读取和写入的权限 |
rwx | 111 | 7 | 所有权限 |
需要额外说明的是,文件和目录的执行权限是不同的:
- 文件的执行权限指的是该文件可以作为二进制执行程序加载进内核执行
- 目录的执行权限控制的是用户能否进入(
cd
)到该目录和能否访问目录下文件的元数据
特殊权限
Linux文件的特殊权限包括 SET位权限(suid
,sgid
)和粘滞位权限(sticky
)。
如果一个文件被设置了suid
或sgid
位,会分别表现在所有者或同组用户的权限的可执行位上;如果文件设置了suid
还设置了x
(执行)位,则相应的执行位表示为s
(小写)。但是,如果没有设置x
位,它将表示为S
(大写)。
粘滞位权限即sticky
。一般用于为目录设置特殊的附加权限,当目录被设置了粘滞位权限后,即便用户对该目录有写的权限,也不能删除该目录中其他用户的文件数据。一个文件或目录被设置了粘滞位权限,会表现在其他组用户的权限的可执行位上。如果文件设置了sticky
还设置了x
(执行)位,其他组用户的权限的可执行位为t
(小写)。但是,如果没有设置x
位,它将表示为T
(大写)。
FACL
FACL
的全称为filesystem access control list
, 提供传统的owner
, group
, others
的read
, write
, execute
权限之外的具体权限设置,ACL
可以针对单一用户、单一文件或目录来进行r
, w
, x
的权限控制,对于需要特殊权限的使用状况有一定帮助。如,某一个文件,不让单一的某个用户访问。
FACL
利用setfacl
和 getfacl
两条命令进行ACL
权限的添加,删除和获取
需要说明的是,如果文件或目录被赋予ACL
权限,那么它所对应的所属组权限概念将被隐藏,此时权限识别的顺序将为:所有者 -> ACL
用户 -> ACL
用户组 -> 其他
实例
- 修改文件属主
[root@436f5bf59c65 test]# touch test1.txt
[root@436f5bf59c65 test]# ls -l
total 0
-rw-r--r-- 1 root root 0 Aug 11 17:16 test1.txt
[root@436f5bf59c65 test]# chown gentoo test1.txt
[root@436f5bf59c65 test]# ls -l
total 0
-rw-r--r-- 1 gentoo root 0 Aug 11 17:16 test1.txt
- 修改文件属组
[root@436f5bf59c65 test]# ls -l
total 0
-rw-r--r-- 1 gentoo root 0 Aug 11 17:16 test1.txt
[root@436f5bf59c65 test]# chown gentoo:gentoo test1.txt
[root@436f5bf59c65 test]# ls -l
total 0
-rw-r--r-- 1 gentoo gentoo 0 Aug 11 17:16 test1.txt
[root@436f5bf59c65 test]# chgrp root test1.txt
[root@436f5bf59c65 test]# ls -l
total 0
-rw-r--r-- 1 gentoo root 0 Aug 11 17:16 test1.txt
- 修改文件权限
[root@436f5bf59c65 test]# chmod 6666 test1.txt
[root@436f5bf59c65 test]# ls -l
total 0
-rwSrwSrw- 1 gentoo root 0 Aug 11 17:16 test1.txt
- 获取
FACL
信息
[root@436f5bf59c65 test]# getfacl test1.txt
# file: test1.txt
# owner: gentoo
# group: root
# flags: ss-
user::rw-
group::rw-
other::rw-
- 设置
FACL
信息
[root@436f5bf59c65 test]# setfacl -m u:root:rwx test1.txt
[root@436f5bf59c65 test]# getfacl test1.txt
# file: test1.txt
# owner: gentoo
# group: root
# flags: ss-
user::rw-
user:root:rwx
group::rw-
mask::rwx
other::rw-