我想介绍一个漏洞的基础,该漏洞尝试下载自身并将结果保存在/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