防止创建特定目录

防止创建特定目录

我想介绍一个漏洞的基础,该漏洞尝试下载自身并将结果保存在/tmp/目录内新创建的目录中。

为了安全起见,我希望无法在 内创建文件夹/tmp/。或者,如果不可行,我想阻止在 内的一个特定目录中创建文件夹/tmp

答案1

使用ls -l -d /tmp/,您将看到权限设置为drwxrwxrwt,即d:目录,rwx:允许所有者、组和其他人(按此顺序)的读、写和执行权限,t粘性位,即仅允许文件所有者删除文件(尽管有权限,但不是该组)。让我们暂时把粘性位放在一边,并提到目录需要可执行才能访问。

现在,如果您想限制其他人的写入权限(所有者和组是root),则使用chmod o-w /tmp/(作为root,即使用sudo

但是:/tmp/对于可能需要临时数据的进程来说相当重要,因此我建议根本不要限制此文件夹的权限!

由于您要前往特定文件夹,最简单的方法是手动创建该文件夹(以 root 身份),然后限制其权限:

sudo mkdir /tmp/badfolder
sudo chmod -R o-w /tmp/badfolder/

关于 chmod 的旁注:-R递归执行 u、g、o:用户、组、其他、+- 添加/删除 r、w、x 读、写、执行权限。即,为了允许组成员写入文件,请使用chmod g+w file.


更新:

如果进程以 root 身份运行,您还需要设置“i”属性。从man chattr

具有“i”属性的文件无法修改:无法删除或重命名,无法创建到该文件的链接,也无法向该文件写入任何数据。只有超级用户或拥有 CAP_LINUX_IMMUTABLE 能力的进程才能设置或清除该属性。

如果该文件夹不属于 root,这也适用。只需使用

chattr +i /tmp/badfolder

用于chattr -i /tmp/badfolder删除它以及-R递归地执行任一操作。

答案2

除了 Fixman 的想法之外,您也可以将其设为自身的符号链接。

sudo ln -s foo /tmp

$ touch /tmp/foo/bar
touch: cannot touch ‘/tmp/foo/bar’: Too many levels of symbolic links

#Or
sudo mkdir -m 000 /tmp/foo  # create with mode 000, no permissions at all.

将它们创建为 root 将阻止非 root 恶意软件删除/重命名它们。

模式 444(读取,但不写入或执行)将防止软件抱怨它无法列出目录(如果您ls -R /tmp或同等人员)。

不过,与创建目录之前chattr相比, rootkit 尝试尝试的可能性要小得多。rm -rf /tmp/foo

相关内容