我在 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
不是每个系统都存在,那么在这种情况下我该怎么办?
当
/tmp
使用标志挂载时会发生这种情况noexec
,这可能是您系统上的情况 - 请参阅mount
./tmp
无论文件的权限如何,这都可以防止存储在其下的任何可执行文件运行。使用此设置挂载和其他世界可写目录背后的想法/tmp
是使在系统上删除二进制文件和执行它们变得更加困难。没有 挂载的卷中的任何目录
noexec
(例如/var
,在大多数情况下)都可用于存储您希望运行的可执行文件。您应该使用哪个目录取决于您的确切用例。