我在 Ubuntu 18.04(Bionic Beaver)盒子和其他几个基于 Debian 的系统中注意到了这个奇怪的问题——netcat
为了演示,我将采用静态链接的二进制文件(一个 unix 网络工具),但是结果是相同的任何其他 ELF 可执行文件。
执行它会给出以下消息(来自任何普通目录,例如/tmp
):
/tmp$ ./nc
-bash: ./nc: Permission denied
的权限chmod
对于执行权限是正确的:
/tmp$ ls -lah nc
-rwxr-xr-x 1 user user 2.8M May 19 19:38 nc
我尝试了很多组合,但没有一个有效,直到我的一个朋友建议我将二进制文件放入/var/lib/php/session
(PHPSESSID 所在的位置)并且它有效:
/var/lib/php/session$ ./nc
Ncat: You must specify a host to connect to. QUITTING.
但是,我还没有找到对此的解释,并且php
并非每个系统中都存在,那么在这种情况下我该怎么办?
答案1
/tmp
当使用标志安装时会发生这种情况noexec
,您的系统上可能就是这种情况 - 请参阅 的输出mount
。这可以防止存储在下面的任何可执行文件/tmp
运行,无论文件的权限如何。使用此设置挂载和其他世界可写目录背后的想法/tmp
是使在系统上放置二进制文件并执行它们变得更加困难。
挂载的卷中的任何目录没有 noexec
(例如/var
,在大多数情况下)可用于存储您希望运行的可执行文件。哪个目录你应该使用取决于您的确切用例。