👌 2021-04-22 Linux 文件权限及文件夹说明
在工作中,利用特殊权限,往往可以事半功倍达到很多对于文件以及文件夹权限要求的设置,所以打算总结一下接触过的操作系统所涉及到的特殊文件权限,方便后期查看。本内容大致面向于 Linux 相关的操作系统。
对于 类 Unix
操作系统,这里只涉及到了 CentOS
,其他的操作系统暂未涵盖进来。
[TOC]
类型说明
常规权限「l d r w x」
- l: 链接文件或链接目录标识
- d: 目录标识
- r: 可读标识
- w: 可写标识
- x: 可执行标识
操作系统默认 /
目录的文件夹列表
total 16
lrwxrwxrwx. 1 root root 7 Jan 8 2020 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Jan 8 2020 boot
drwxr-xr-x. 20 root root 3240 Apr 22 23:19 dev
drwxr-xr-x. 75 root root 8192 Apr 22 23:21 etc
drwxr-xr-x. 2 root root 6 Apr 11 2018 home
lrwxrwxrwx. 1 root root 7 Jan 8 2020 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jan 8 2020 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Apr 11 2018 media
drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt
drwxr-xr-x. 3 root root 23 Nov 28 23:32 opt
dr-xr-xr-x. 140 root root 0 Apr 22 23:18 proc
dr-xr-x---. 2 root root 171 Nov 28 23:30 root
drwxr-xr-x. 24 root root 720 Apr 22 23:20 run
lrwxrwxrwx. 1 root root 8 Jan 8 2020 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Apr 11 2018 srv
dr-xr-xr-x. 13 root root 0 Apr 22 23:19 sys
drwxrwxrwt. 9 root root 161 Apr 22 23:19 tmp
drwxr-xr-x. 13 root root 155 Jan 8 2020 usr
drwxr-xr-x. 19 root root 267 Jan 8 2020 var
可读权限
- 对于文件,可读权限:可以对读取文件里的内容
用字符表示:r 用八进制表示:4
- 对于目录,可读权限:可以列出目录下的内容
用字符表示:r 用八进制表示:4
可写权限
-
对于文件,可写权限:可以对文件进行更改 用字符表示:w 用八进制表示:2
-
对于目录,可写权限:可以在目录下创建文件或目录
用字符表示:w 用八进制表示:2
可执行权限
- 对于文件,可写权限:可以执行该文件(脚本或命令)
用字符表示:x 用八进制表示:1
- 对于目录,可写权限:可以cd进入该目录
用字符表示:x 用八进制表示:1
特殊权限「SUID SGID SBIT」
关于 Ss Tt 区别,可见示例部分
SUID 示例
-rwsr-xr-x. 1 root root 27856 Aug 9 2019 /usr/bin/passwd
SGID 示例
-rwxr-sr-x. 1 root root 13 Aug 8 2019 /opt/test/file1
SBIT 示例
drwxrwxrwt. 9 root root 161 Apr 22 23:19 /tmp
SUID「Setuid」
- 对于文件,Setuid:
用字符表示:s 用八进制表示:4000
Setuid最常用的是配合执行权限 x 使用,例如,系统中内置命令 passwd ,它默认是带有 s 权限位, passwd 命令的主要功能是修改用户的密码,而修改密码的流程是:
将加密后的哈希值写入到 /etc/passwd 文件对应的用户条目中。
使用pwconv工具转换到 /etc/shadow 文件中。
而普通用户是没有权限修改 /etc/passwd 和 /etc/shadow 文件
在普通用户尝试执行 passwd,该 passwd 的所有者是root并且设置了 Suid ,因此 passwd 以 root 身份执行。
PS: 当你查看进程时,你会发现,进程不是普通用户,而是passwd工具的所有者(root)
SGID「Setgid」
- 对于目录,Setgid:
用字符表示:s 用八进制表示:2000
当一个目录拥有sgid权限时,其他用户在该目录下创建文件或目录后,它会继承目录的id,即创建的文件或目录的属组为父目录的属组。
[root@localhost data]# mkdir project
[root@localhost data]# chmod 2777 project/
[root@localhost data]# ls -lh
total 0
drwxrwsrwx 2 root root 6 Apr 20 23:42 project
[root@localhost data]# su bob
[bob@localhost data]$ mkdir project/test_for_bob
[bob@localhost data]$ ls -lh project/
total 0
drwxrwsr-x 2 bob root 6 Apr 20 23:42 test_for_bob
SBIT「Sticky 粘滞位」
- 对于目录:
用字符表示:t 用八进制表示:1000
/tmp目录就是使用了粘滞位 t,其作用是,在该目录下创建文件或目录后,仅允许其作者(所有者)进行删除操作。其他用户无法删除。
SELinux 权限「.」
开启 SELinux 后创建的文件和目录都会在权限列显示这个点的,关闭 SELinux 后创建的文件和目录在权限列是不会显示这个点的,之前创建的文件或目录保持不变,权限列的点依然显示。
[root@DCGH ~]# touch DCGH-later
[root@DCGH ~]# mkdir DCGH-later-dir
[root@DCGH ~]# ls -lZ
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 DCGH
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 DCGH-DIR
-rw-r--r-- root root ? DCGH-later
drwxr-xr-x root root ? DCGH-later-dir
ACL 权限「+」
加了ACL权限控制之后,之前具有SELinux属性的文件和目录的权限列最后一个位置全部变成了加号(+)。移除原来的ACL权限之后,恢复原样。如果加号存在,则已经有点的目录或文件,点的显示会被覆盖,但原来的SELinux属性保持不变。
[root@DCGH ~]# setfacl -m u:dcgh:rwx *
[root@DCGH ~]# ls -lZ
-rw-rwxr--+ root root unconfined_u:object_r:admin_home_t:s0 DCGH
drwxrwxr-x+ root root unconfined_u:object_r:admin_home_t:s0 DCGH-DIR
drwxrwxr-x+ root root ? DCGH-DIR-later -rw-rwxr--+ root root ? DCGH-later
[root@DCGH ~]# setfacl -b *
[root@DCGH ~]# ls -lZ
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 DCGH
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 DCGH-DIR
drwxr-xr-x root root ? DCGH-DIR-later -rw-r--r-- root root ? DCGH-later
权限控制举例
文件权限
用户对于文件的访问权限,取决于文件的用户权限部分,以及 特殊权限 和 ACL
文件夹权限
示例,建立如下 目录结构
.
├── level1
│ ├── file1
│ └── level11
│ └── file11
└── level2
3 directories, 2 files
用户能否在 level1
目录下创建或者访问由 level1
的目录权限决定,每个目录权限至管理目录自己的那一层级,例如 level11
目录下等创建文件夹或者访问操作,不受 level1
目录的权限限制。
umask
默认 0022
即使 umask 设置为 0000,后续创建文件的权限依然是 666。出于安全着想,执行权限必须手动添加。所以你会看到,目录权限为 777,而文件权限为 666
示例
lrwxrwxrwx. 1 root root 7 Oct 3 02:33 bin -> usr/bin
- 第一个字符的含义:
-
常规文件
b
块特殊文件
c
字符特殊文件
C
高性能(“连续数据”)文件
d
目录
D
门(Solaris 2.5及以上版本)
l
符号链接
M
离线(“前已”)文件(Cray DMF)
n
网络专用文件(HP-UX)
p
FIFO(命名管道)
P
断开(Solaros 10及以上)
s
套接字
?
其他文件
- 第二个字符的含义:
r
属主的读权限
- 第三个字符的含义:
w
属主的写权限
- 第四个字符的含义:
x
属主的执行权限
S
设置了SUID,没有执行权限(权限无效)
s
设置了SUID,具有执行权限
- 第五个字符的含义:
r
属组的读权限
- 第六个字符的含义:
w
属组的写权限
- 第七个字符的含义:
x
属组执行权限
S
设置了SGID,没有执行权限(权限无效)
s
设置了SGID,具有执行权限
- 第八个字符的含义:
r
其他人的读权限
- 第九个字符的含义:
w
其他人的写权限
- 第十个字符的含义:
x
其他人的执行权限
T
设置了粘滞位,没有执行权限(权限无效)
t
设置了粘滞位,具有执行权限
- 第十一个字符的含义:
.
没有任何其他替代访问方法的SELinux安全上下文(没有设置ACL)
+
具有任何其他组合访问方法的SELinux安全上下文(设置了ACL)
- 第十二个字符的含义:该文件的硬链接数量
- 第十三个字符的含义:该文件的属主
- 第十四个字符的含义:该文件的属组
- 第十五个字符的含义:该文件的大小
- 第十六到第十八个字符的含义:最后一次修改的时间
- 第十九个字符的含义:文件或目录的名称
- 第二十个字符的含义:链接符号
- 第二十一个字符的含义:链接文件的源文件
其他系统的特殊权限标识
macOS
可使用如下命令查看 macOS 系统内相关的特殊权限标识
If the file or directory has extended attributes, the permissions field printed by the -l option is followed by a ‘@’ character. Otherwise, if the file or directory has extended security information, the permissions field printed by the -l option is followed by a ‘+’ character.
如果文件或目录有扩展属性,则使用-l选项执行ls命令时,会在权限许可字段后面附加一个字符@。如果文件或目录有扩展安全信息,则使用-l选项执行ls命令时,会在权限许可字段后面附件一个字符+。
ls -l@ 或者 ls -l+
文件「unkonw.txt
」、目录「Archive
」、替身「Investment
」相关特殊权限标识如下所示
total 24
drwxr-xr-x 44 idoker staff 1408 4 8 16:10 Archive
-rw-r--r--@ 1 idoker staff 888 2 22 17:26 Investment
com.apple.FinderInfo 32
com.apple.lastuseddate#PS 16
drwxr-xr-x 21 idoker staff 672 3 15 00:33 TODO
drwxr-xr-x 197 idoker staff 6304 3 22 11:21 Temp
-rw-r--r--@ 1 idoker staff 952 2 22 17:03 Workspace
com.apple.FinderInfo 32
com.apple.lastuseddate#PS 16
drwxr-xr-x 11 idoker staff 352 3 22 11:21 log
-rw-r--r-- 1 idoker staff 2544 4 12 10:52 unkonw.txt
可使用 xattr
相关命令进行修改
Windows
Windows 开启 SMB 共享或者开启 ftp 共享,在 Linux 系统环境下相关权限如下所示
待补充
参考资料
特殊权限 SUID、SGID、Sticky https://www.cnblogs.com/Q--T/p/7864795.html 刘合栋-Linux 权限位详解 https://www.cnblogs.com/liuhedong/p/10739718.html Linux中权限列中的加号及点的深度解读 https://www.linuxprobe.com/linux-authority-ask.html