Linux 文件权限及文件夹权限说明

👌 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