我知道拥有世界可写文件可能很危险,许多人建议不要在系统上拥有世界可写文件。
为了“保护”我的 Linux,我使用find / -perm -0002 -type f
.感谢这个命令,我在 root_directory 下找到了一个全局可写的文件/root/a_directory/world_writable_file
。由于我的/root
目录是700,其他用户无法编辑世界可写文件。
所以我的问题是,如果我在其他用户无法访问的目录下有世界可写文件(缺乏其他用户的 x 权限),那么风险是什么?
例如,如果/root/directory1/world_writable_file.sh
是777,并且/directory1/
是700,我安全吗?这种情况下没有风险吗?
答案1
您对权限的理解似乎是正确的,但可能并不完整。
为了访问文件,发出请求的用户需要访问该文件的所有路径元素。对于目录,这意味着需要x
权限才能遍历该目录。
因此,非目录所有者的任何人都无法访问777
具有权限的目录中具有权限的文件。700
例如:
$ sudo ls -al XX
total 40
drwx------ 2 root root 4096 Dec 21 07:43 .
drwxrwxrwt 13 root root 36864 Dec 21 07:43 ..
-rwxrwxrwx 1 root root 0 Dec 21 07:43 yy
我无法读取或写入该yy
文件,因为无法遍历该XX
目录。
$ cat XX/yy
cat: XX/yy: Permission denied
$ echo test >> XX/yy
/bin/ksh: XX/yy: cannot create [Permission denied]
然而,传统权限并不是授予文件访问权限的唯一方式。有还ACL...
$ sudo setfacl -m u:sweh:rwx XX
$ ls -ld XX
drwxrwx---+ 2 root root 4096 Dec 21 07:43 XX/
$ echo test >> XX/yy
$ cat XX/yy
test
所以现在,即使目录权限看起来是770
,我仍然可以读写该文件,因为 ACL 授予了它。权限列表末尾+
显示有 ACL
drwxrwx---+ 2 root root 4096 Dec 21 07:43 XX/
在您的特定情况下,ACL 和传统权限的重叠方式之间存在重叠。请注意该setfacl
命令将模式设置为770
。如果我们将其设置回您的700
...
$ sudo chmod 700 XX
$ ls -ld XX
drwx------+ 2 root root 4096 Dec 21 07:43 XX/
现在 ACL 仍然存在,但已有效不是授予访问权限:
$ getfacl XX
# file: XX
# owner: root
# group: root
user::rwx
user:sweh:rwx #effective:---
group::---
mask::---
other::---
注意#effective:---
条目。这是因为设置组值时mask
修改了该值 ;chmod
这是 ACL 和文件权限之间的微妙交互。
所以..
$ cat XX/yy
cat: XX/yy: Permission denied
长话短说……700
目录中的世界可写文件应该是安全的,但目录中的类似文件770
可能不安全。