CIS 安全基准建议/tmp
在单独的分区上挂载和所有其他世界可写目录,以便可以使用noexec
标志挂载它。
由于我已经将我的/tmp
安装在同一个分区中,/
并且我希望避免重新分区的喧嚣,我想知道chmod -R -x /tmp
使用noexec
标志安装单独的分区之间有什么区别(在安全方面 - 意思是风险)。
CIS 安全基准建议/tmp
在单独的分区上挂载和所有其他世界可写目录,以便可以使用noexec
标志挂载它。
由于我已经将我的/tmp
安装在同一个分区中,/
并且我希望避免重新分区的喧嚣,我想知道chmod -R -x /tmp
使用noexec
标志安装单独的分区之间有什么区别(在安全方面 - 意思是风险)。
您实际上是在讨论三种不同的强化技术。
单独的分区
单独的分区为您做两件事。它首先隔离系统。这在许多方面都是有益的,而不仅仅是安全性,例如存储问题。从安全的角度来看,您隔离了那些全局访问的目录,并且可以轻松地删除、重建和重新部署,而无需完全重建引导分区的工作。
第二,备份。跨分区主目录运行备份系统并在根系统上使用配置管理工具(例如 Chef 或 Puppet)并不少见。Roots 系统配置很少更改,在完全重建的情况下,部署基于 Chef 或 Puppet 的“/”文件来维护标准通常比恢复用户文件更有益,而不是从备份中恢复配置文件。
安装
已经有一段时间了,我面前没有我的 Nix 系统,但应该能够进入 fstab 文件并编辑 /tmp 目录以使用 NOEXEC 标志。这应该不需要单独的分区。MAN PAGES 中的标志:
无执行
不允许在已挂载的文件系统上直接执行任何二进制文件。(直到最近,仍然可以使用 /lib/ld*.so /mnt/binary 之类的命令运行二进制文件。自 Linux 2.4.25 / 2.6.0 以来,这个技巧就失败了。)
它做它所说的。
频道模组
更改模式用于更改文件/目录级别的权限。如果您阅读 chmod 的手册页,您会看到 -x 授予文件的可执行权限和目录的访问权限。
在/tmp
withchmod -R -x /tmp
中递归删除执行位不会阻止从/tmp
.
首先,它只适用于当前在/tmp
. 运行后创建的新文件chmod
将没有任何限制。
其次,如果您从另一个用户的文件中删除执行位,它不会阻止用户执行它。用户可以在更改后重新添加执行位。
第三,目录中的执行位实际上称为“搜索”,与文件的含义不同。鉴于此目录结构:
.:
total 8
drwxrwxr-x 2 root root 4096 ago 25 13:54 dir1
drwxrwxr-x 2 root root 4096 ago 25 13:54 dir2
./dir1:
total 0
-rw-rw-r-- 1 root root 0 ago 25 13:54 file1
-rw-rw-r-- 1 root root 0 ago 25 13:54 file2
./dir2:
total 0
-rw-rw-r-- 1 root root 0 ago 25 13:54 file1
-rw-rw-r-- 1 root root 0 ago 25 13:54 file2
如果您从 dir1 中删除“搜索”位,chmod -x dir1
则会得到以下信息:
$ chmod -x dir1
$ ls -l dir1
ls: no se puede acceder a 'dir1/file2': Permiso denegado
ls: no se puede acceder a 'dir1/file1': Permiso denegado
total 0
-????????? ? ? ? ? ? file1
-????????? ? ? ? ? ? file2
$ cat dir1/file1
cat: dir1/file1: Permiso denegado
如果您在 /tmp 上执行此操作,您将获得一个无法使用的临时目录,并且一些程序会在您身上崩溃。
所以noexec
挂载选项不能被chmodding代替。
如果您真的想在不添加新分区1或使用 tmpfs/loop-mounted 文件(如 Shane 建议)的情况下执行此操作,您可以尝试在此 SF 答案中使用 bind-fu
1:我还认为如果您使用逻辑卷,您不会遇到这个问题;)
有些文件,也在 temp 中,实际上需要不需要运行就可以执行。用 标记分区noexec
仍然允许您设置+x
,但禁止执行(通过 shell,ld-linux-x86-64.so)。正如您所说,这会导致额外的安全层。
我知道几种方法,但觉得使用setfacl
(ACL) 效果最好。Apache 以无人身份运行,并且要在 temp 中执行 shell 脚本,您需要 bash。
setfacl -m u:nobody:r bash
Apache 仍然可以读写,/tmp
但不能执行。