Linux 文件特殊权限
最简单的文件看起:
例如:
$ ls -lah
total 948K
drwxrwxr-x 4 supra supra 4.0K Apr 19 21:02 .
drwxrwxr-x 14 supra supra 4.0K Dec 6 21:16 ..
-rw-rw-r-- 1 supra supra 69 Nov 6 2022 Dockerfile
-rwxrwxr-x 1 supra supra 16K Apr 19 21:02 a.out
-rwxrwxr-x 1 supra supra 11K Sep 18 2021 hello
-rw-rw-r-- 1 supra supra 217 Jun 14 2022 hello.c
读写执行权限
第一个字符表示文件类型:
-
:普通文件d
:目录l
:符号链接
其他字符表示其他特殊类型的文件,如管道:
p
、套接字p
等。接下来的三个字符表示文件所有者(owner)的权限:
- r:读权限(可以查看文件内容)
- w:写权限(可以修改文件内容)
- x:执行权限(可以运行文件作为程序)
- 紧接着的三个字符表示文件所属组(group)的权限,含义同上。
- 最后三个字符表示其他用户(others)的权限,含义同上。
- 如果权限字符被替换为特殊字符,如
s
或S
,则表示设置了SUID或SGID位。如果是t
或T
,则表示设置了粘滞位(sticky bit).
在Linux系统中,SUID(Set User ID)是一种特殊的文件权限设置,当应用于可执行文件时,它允许用户以文件所有者的身份运行该文件。通常,当一个程序运行时,它继承了启动它的用户的权限。但是,如果该程序具有SUID权限,那么不管是谁运行它,它都会以文件所有者的权限来执行。
然而,SUID也带来了潜在的安全风险。如果SUID程序存在漏洞,那么它可能被利用来提升权限,因此只有在确实需要时才应该设置SUID权限,并且需要确保相关程序是安全的。系统管理员应该定期审查具有SUID权限的文件,并确保它们来自可信的源并且是最新的。
SUID & SGID
SUID权限通常用八进制代码 4000 表示,或者在 ls -l 命令的输出中,可以看到在文件所有者的执行权限位上有一个 s 字符(例如 -rwsr-xr-x)。
SUID的意义在于它允许用户执行一些通常需要更高权限的操作,而不必给予用户那些权限。这是通过让特定的程序以更高权限(通常是root权限)运行来实现的。
为什么要这么做:
1. 安全性:SUID允许系统管理员授予用户执行特定高权限任务的能力,而不必给用户更广泛的权限。这有助于遵循最小权限原则,减少安全风险。
2. 功能性:某些程序需要访问系统资源或执行任务,这些资源或任务通常只能由系统管理员(root用户)访问或执行。例如,passwd 程序需要修改shadow 文件,该文件包含加密的用户密码,通常只有root用户才有权限修改它。
3. 用户便利性:SUID使得普通用户可以方便地执行某些需要特殊权限的操作,而无需切换到root用户。
Sticky权限
Sticky权限(也称为粘滞位或粘着位)是Linux和类Unix操作系统中的一种特殊权限设置,它可以应用于目录。当一个目录设置了sticky权限,这意味着只有文件的所有者、目录的所有者或者超级用户(root)才能删除或重命名目录中的文件。其他用户即使有该目录的写权限也不能删除或重命名其中不属于他们的文件。
Sticky权限通常用于共享目录,如/tmp,这个目录是所有用户都可以写入的。由于任何用户都可以创建临时文件,没有sticky权限的话,就可能出现一个用户删除或修改了另一个用户的文件的情况。通过设置sticky权限,系统管理员可以防止这种情况发生,确保用户只能管理自己的文件。
设置
有2种: 符号方式和数字方式
符号方式
chmod WhoWhatWhich file | directory
- Who - represents identities: u,g,o,a (user, group, other, all)
- What - represents actions: +, -, = (add, remove, set exact)
- Which - represents access levels: r, w, x, s, t(read, write, execute, SUID/SGID, sticky)
ex:
chmod ug+rw test.txt
chmod g+s
数字方式
通常使用3位数字分别表示 owner, group, others.
chmod ### file | directory
- If the read permission should be set, add 4
- If the write permission should be set, add 2
- If the execute permission should be set, add 1
特殊权限
使用4位, 第一位代表特殊权限, 后面3位表示 owner, group, others.
SUID = 4
SGID = 2
Sticky = 1
chmod 2770 test.txt