我有一个简单的 Perl 脚本,如下所示:
#!/usr/bin/perl
print "###################################\n";
Run Code Online (Sandbox Code Playgroud)
但是当我尝试从命令行执行它时,我总是看到:
[root@testbox001 tmp]# ./def
-bash: ./def: Permission denied
Run Code Online (Sandbox Code Playgroud)
该脚本可执行:
-rwxr-xr-x 1 root root 88 Dec 22 01:42 def
Run Code Online (Sandbox Code Playgroud)
还有 bash 和 shebang:
[root@testbox001 tmp]# ls -l /usr/bin/bash
-rwxr-xr-x. 1 root root 1150560 Jun 20 2022 /usr/bin/bash
[root@testbox001 tmp]# ls -l /usr/bin/perl
-rwxr-xr-x. 2 root root 12752 Jan 17 2023 /usr/bin/perl
[root@testbox001 tmp]#
Run Code Online (Sandbox Code Playgroud)
原因是什么?
我只能显式运行它:
[root@testbox001 tmp]# /usr/bin/perl def
#########################################################
[root@testbox001 tmp]#
Run Code Online (Sandbox Code Playgroud)
该程序可在/tmp已装入的卷上找到noexec。
$ 安装 | grep '在 /tmp ' /dev/sda3 在 /tmp 类型 ext4 上(rw、nosuid、nodev、noexec、noatime、nodiratime、data=ordered)
这会阻止执行该卷上的程序。
$ mount | grep 'on /tmp ' /dev/sda3 on /tmp type ext4 (rw,nosuid,nodev,noexec,noatime,nodiratime,data=ordered)
目标是帮助中性攻击。