日新计划6月更文 Day 5
在上一篇使用ls -l查看文件详细信息的时候,我们看到的结果大致如下:
ls -l
-rw-r--r-- cat cat 0 B Sun Jun 4 19:36:41 2023 bar
drwxr-xr-x cat cat 40 B Sun Jun 4 19:36:36 2023 foo
一开始的十个字符表示这个文件的类型与权限:
- 第一位表示文件类型,如普通文件(
-)、目录(d)、字符文件(c)、块文件(b)、符号链接(l)等 - 后九位分三组,三组分别表示文件所有者、文件所在组、其他用户对文件是否有读取(
r)、写入(w)、执行(x)权限(-表示没有对应权限)
后面是文件的所有者与所在组、大小、修改时间与文件名。
- 可使用
id查看当前用户与该用户所在组
可以使用chmod命令修改文件权限,其其修改参数应符合[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+,如:
-
直接使用权限代码覆盖文件权限:
# 将 foo 的权限改为 rwxr-x--- chmod 750 foo -
使用“ugoa”+“+-=”+“rwxXst”的方式增删改某组权限:
# 去掉 foo 所在组(g)和其他用户(o)的写(w)权限 chmod go-w foo
- "权限代码"的计算方法(以“rwxr-xr-x”为例):
- 将该九位字符转换为是否有该权限的二进制数111101101
- 将该二进制数转换为八进制755
- “权限代码”不可直接进行算术运算,增加权限应进行按位或运算;删除权限则更加复杂
在上述 chmod 的使用中,除了“rwx”我们还发现了“s”和“t”这两个怪东东,这是“SUID”、“SGID”与“SBIT”:
- SUID:“Set UID” ,文件所有者和执行者对该文件有 r 和 x 权限且时,设置 SUID 的文件被执行时执行者暂时取得文件所有者的权限(仅对二进制文件有效),用于
passwd(修改密码)、sudo(管理员权限审批)等 - SGID:“Set GID” ,与 SUID 类似,使用者可暂时进入该文件所在组(可用于目录)
- SBIT:“Sticky Bit”,仅对目录有效,使用者对该目录有 w 和 x 权限时,可在该目录下创建属于自己的文件和目录且仅自己和root有权删除,常用于
/tmp等全局公共读写目录
当然还有更细化的权限管理方式——ACL(Access Control Lists,访问控制列表),可使用getfacl与setfacl查看/修改文件的ACL。