您发现此文件位于系统上:
[user@localhost]$ ls -la executable -rwsr-xr-x 1 foo group 41836 2012-10-14 19:19 dangerous.exe
你发现有什么不对劲吗?
答案1
我已经写好了答案,但这似乎是一个“家庭作业”问题。我认为这没什么不好,但我建议在问这样的问题时提供你目前已经弄清楚的细节。这既可以让你得到最有用的答案,又可以帮助你将教师想要的教学优势与互联网社区提供的教学优势结合起来——例如,告诉我们你已经学到了什么和还没有学到什么,或者让你自己仍然可以找到一些解决方案。
ACL 代表访问控制列表。这里的问题似乎与普通的 Unix 风格权限(也可以看看文件权限),而不是 ACL。具体来说,这是关于 setuid 可执行文件的练习,以及关于 团体和其他类。(如果这是你目前正在做的练习,那么这可能足以为你提供解决它的线索。)
为什么我认为这与 ACL 无关? 在 的输出中,没有关于文件上设置的 ACL 的信息ls -l
。即使 存在与 ACL 相关的问题dangerous.exe
,也没有给出任何指向或以其他方式暗示它的信息。
此外,至少在 Ubuntu 中,ls
会检查文件的权限是否通过 ACL 自定义,如果是,则将其附加+
到符号权限字符串的末尾。
ek@Ilex:~$ ls -l foobar # no + in the output of ls
-rw-rw-r-- 1 ek ek 0 Sep 14 13:16 foobar
ek@Ilex:~$ setfacl -m g:adm:r foobar
ek@Ilex:~$ ls -l foobar # now there's a + in the output
-rw-rw-r--+ 1 ek ek 0 Sep 14 13:16 foobar
(但请注意,某些类 Unix 系统可能具有不同的 ACL 实现和/或默认ls
可执行文件不会检查文件上是否存在 ACL 规则。)
有关 Ubuntu 中 ACL 的更多信息,请参阅文件权限ACL对于其余问题,下文将进行详细分析。
首先,对问题的设计进行一些评论,以帮助我们记住在练习中很常见但在“现场”遇到时不应忽视的事情。
在现实生活中,虽然这不太可能是练习的重点:
foo
接到生产系统电话的用户很奇怪。
(虽然这可能属于 Fordham Oo, Jr.)更极端的是,有一位用户致电
user
(如$PS1
) 基本上不是一个好主意。这些名字可能会被解释为元句法上在同事之间的交流中,甚至可能在深夜被正在解决一个几乎不相关的问题的系统管理员意外地看到。
同样地,组建一个团体
group
基本上从来都不是一个好主意。我不知道其历史记录的文件
dangerous.exe
令人担忧。它要么命名不当,要么不应该放在那儿。
那么,在这种情况下,通常主要的安全相关问题是什么?
在现实生活中以及在提出这个问题的人的心中:
这
s
意思是-rwsr-xr-x
dangerous.exe
setuid 可执行文件.这可以通过chmod
:ek@Ilex:~$ ls -l dangerous.exe -rwxr-xr-x 1 ek ek 0 Sep 14 12:29 dangerous.exe ek@Ilex:~$ chmod u+s dangerous.exe ek@Ilex:~$ ls -l dangerous.exe -rwsr-xr-x 1 ek ek 0 Sep 14 12:29 dangerous.exe
由于
dangerous.exe
是 setuid,因此无论谁执行它,它都会以其所有者的身份运行。有时这是合适的,但除非谨慎使用,否则它可能会导致非常严重的安全问题,从而为拥有可执行文件的帐户提供不必要的访问。但这还不是全部。我们知道这尤其有可能出现安全问题。(如果系统上运行的任何用户或服务应该被阻止执行其可以执行的操作
foo
,那就是这种情况。这是有可能的。请记住,只有一个人类用户的系统默认会使用其他用户帐户来执行具有较低权限的操作。)这是由于 上设置的其他权限
dangerous.exe
。由于其可执行位的设置方式,任何人可以执行dangerous.exe
!-rwsr-xr-x 1 foo group 41836 2012-10-14 19:19 dangerous.exe | \ \ This x indicates all users other than foo and members of \ 'group' may execute the file! That's almost definitely bad! \ This x indicates anyone in the 'group' group may execute the file. Depending on what the 'group' group means and who's in it, that might be bad.
我们如何通过检查来了解这一点
-rwsr-xr-x 1 foo group 41836 2012-10-14 19:19 dangerous.exe
?第一个字符(用于-
普通文件、d
目录和l
符号链接)之后是九个字符。前三个表示拥有该文件的用户是否可以
r
读取、w
写入和x
执行该文件。(-
答案为否时显示 A。)接下来的三个表示文件组所有者(用户所有者除外)的成员是否可以r
读取、w
写入和x
执行该文件。最后一个三个表示既不拥有该文件也不属于其组所有者的其他用户是否可以r
读取、w
写入和x
执行该文件。所以全部系统上的用户可以运行——当他们运行时,他们是以系统身份而不是以自己的身份
dangerous.exe
运行!foo
为了安全地设置文件为 setuid (或 setgid),它必须是精心撰写以确保它只能用于执行适当的操作。例如,
/usr/bin/passwd
当用户使用命令更改密码时运行的可执行文件passwd
是 setuid,由 root 拥有,因此即使受限用户运行它,它也会以 root 身份运行。这是必要的,因为它可以更改密码数据库。但它经过精心编写,因此它只会进行授权更改。根据
foo
系统上的权限,这个问题可能比 root 拥有的 setuid 可执行文件存在错误导致其被以非预期方式使用的问题要小。但这仍然值得警惕。如果您是这种情况下的系统管理员,您可能希望咨询用户,
foo
以查看他们设置的权限是否dangerous.exe
有误。(根据情况的背景和其他因素,您可能会采取更直接的行动。)