删除 `/tmp` 的执行权限或使用 `noexec` 标志挂载它?

信息安全 硬化 权限 代码执行
2021-08-26 17:22:44

CIS 安全基准建议/tmp在单独的分区上挂载和所有其他世界可写目录,以便可以使用noexec标志挂载它。

由于我已经将我的/tmp安装在同一个分区中,/并且我希望避免重新分区的喧嚣,我想知道chmod -R -x /tmp使用noexec标志安装单独的分区之间有什么区别(在安全方面 - 意思是风险)

4个回答

您实际上是在讨论三种不同的强化技术。

单独的分区

单独的分区为您做两件事。它首先隔离系统。这在许多方面都是有益的,而不仅仅是安全性,例如存储问题。从安全的角度来看,您隔离了那些全局访问的目录,并且可以轻松地删除、重建和重新部署,而无需完全重建引导分区的工作。

第二,备份。跨分区主目录运行备份系统并在根系统上使用配置管理工具(例如 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 授予文件的可执行权限和目录的访问权限。

/tmpwithchmod -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但不能执行。