Linux 文件权限
ls -l file_name
-rw-r--r-- 12 linuxize users 12.0K Apr 28 10:10 file_name
|[-][-][-]- [------] [---]
| | | | | | |
| | | | | | +-----------> 7. Group 用户组
| | | | | +-------------------> 6. Owner 所有者
| | | | +--------------------------> 5. Alternate Access Method
| | | +----------------------------> 4. Others Permissions 其他用户权限
| | +-------------------------------> 3. Group Permissions 用户组权限
| +----------------------------------> 2. Owner Permissions 所有者权限
+------------------------------------> 1. File Type 文件类型
文件类型(1. File Type)
文件类型。
-
:文件;
d
:目录;
l
:(L) 链接;
权限组
对于所有者和用户组权限,文件/目录创建时,默认赋值所有者为创建者,用户组为创建者所在组,但它们是可被更改的。
继文件类型之后的 9 个字符,分为 3 个权限组,都使用 -
, r
, w
, x
来组合。
数值授权(推荐)
各权限数值:
-
r
(read 读) = 4
-
w
(write 写) = 2
-
x
(execute 执行) = 1
-
-
(无权限) = 0
由于各个权限组合不会得到相同的数字,因此每一类用户的权限都可以用一个数字表示,修改权限使用命令 chmod
,格式为:
chmod [OPTIONS] NUMBER FILE... # 多个文件使用空格隔开
例:
chmod 760 filename
7
表示所有者权限:4 + 2 + 1 = 7,即 rwx
,所有者拥有全部权限。
6
表示用户组权限:4 + 2 = 6,即 rw-
,用户组拥有读写权限。
0
表示其他用户权限:0,即 ---
,其他用户没有权限。
以数值形式查看文件权限,使用 stat
命令:
stat -c "%a" file_name
符号授权(有特殊用处)
格式:
chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE...
解释:
[ugoa…]
:
-
u
- 所有者。 -
g
- 用户组。 -
o
- 其他用户。 -
a
- 所有用户,等同于ugo
。
[-+=]
:
-
-
- 移除指定权限。 -
+
- 添加指定权限。 -
=
- 赋值指定权限,覆盖原有权限,如果=
后面为空,则为移除所有权限。
perms...
:
-
权限符,可选且多选:
r
,w
,x
,X
,s
,t
。 -
也可以复制其它权限组,但只能单选:
u
,g
,o
;例:
chmod g=u filename
[,…]
:
-
表示分别授权,
,
之间不能有空格。例:chmod u=rwx,g=r,o= filename
FILE...
:
-
为一个或多个文件或目录设置权限,使用空格隔开。
修改用户组
chgrp new_group_name file_or_directory
修改所有者
sudo chown [-R] new_owner_username[:new_group_name] /path/to/file_or_directory
参数:
-
-R
:如果目标是目录,递归修改此目录及所有子目录和文件的所有者。 -
:new_group_name
:用户名:用户组,修改所有者的同时指定用户组,即:同时修改用户组。
特殊权限
特殊权限:s
, S
, t
, T
。
s
:体现在所有者权限组时:setuid (Set User ID up on execution),体现在用户组权限组时:setgid (Set Group ID up on execution),意思是运行时(有 x
权限)提升权限,以文件所有者(setuid)或用户组(setgid)的身份进行运行。
S
:类似于 s
,但没有执行权限(x
)。
-
S
是s
的一个变体,给文件所有者或用户组设置s
权限时,如果文件已经拥有x
权限,则设置之后体现为s
,如果文件没有x
权限,则设置之后体现为S
。
-
没有设置
S
权限的命令,只有设置s
权限的命令,二者之间的体现取决于文件原有的执行权限x
。
t
:set sticky
bit,最常见于像 /tmp
这样的目录上,它允许用户在目录中创建文件或子目录,但只允许文件的所有者或管理者删除或改名自己的文件。
T
:类似于 t
,但没有执行权限(x
),属于 t
的变体。描述参照 S
。
特殊权限授权
使用数值形式设置特殊权限:
-
setuid = 4
-
setgid = 2
-
sticky = 1
-
no changes = 0 (可忽略)
特殊权限数值放在第一位:
sudo chmod 6760 filename
文件权限将展示为 -rwsrwS---
:
第一个数字 6
:setuid + setgid = 4 + 2 = 6,因此在所有者和用户中都体现了 s
权限。由于所有者的权限值为 7
,有执行权限,所以它表示为 s
,而用户组权限为 6
,没有执行权限,因此表示为 S
。
移除特殊权限
移除特殊权限,使其留下常规权限,使用符号授权方式:
sudo chmod u-s /path/to/file_or_directory
参考
参考文章:https://linuxize.com/post/understanding-linux-file-permissions/