Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 我可以阻止用户执行二进制文件吗?_Linux_Sh - Fatal编程技术网

Linux 我可以阻止用户执行二进制文件吗?

Linux 我可以阻止用户执行二进制文件吗?,linux,sh,Linux,Sh,如果我想创建一个二进制可执行文件,并且我想阻止某人在我的目录中执行它,但我仍然希望他们能够将它复制到自己的区域,我必须给他们读权限,而不是执行权限 现在我意识到,对于用高级语言(如python)编写的文件,执行权限并不是一个真正的概念。任何具有读取权限的人都可以简单地使用命令(例如python,例如.py文件)运行它们,这就是有人“执行”它们时实际发生的情况 但我认为二进制文件是不同的。它们可以在没有读取权限的情况下执行,因为它们实际上是在执行,而不仅仅是转移到需要读取权限的解释器命令 但是后来

如果我想创建一个二进制可执行文件,并且我想阻止某人在我的目录中执行它,但我仍然希望他们能够将它复制到自己的区域,我必须给他们读权限,而不是执行权限

现在我意识到,对于用高级语言(如python)编写的文件,执行权限并不是一个真正的概念。任何具有读取权限的人都可以简单地使用命令(例如python,例如.py文件)运行它们,这就是有人“执行”它们时实际发生的情况

但我认为二进制文件是不同的。它们可以在没有读取权限的情况下执行,因为它们实际上是在执行,而不仅仅是转移到需要读取权限的解释器命令

但是后来我了解了sh命令,它似乎能够处理二进制文件(不像bash那样拒绝)。有没有办法禁用此功能,或者屏蔽二进制文件


yac@rainbowdash % vim a.c
yac@rainbowdash % gcc a.c
yac@rainbowdash % ./a.out
a
yac@rainbowdash % ls -l a.out
-rwx------ 1 yac yac 11877 Oct 10 02:27 a.out*
yac@rainbowdash % chmod -x a.out
yac@rainbowdash % ./a.out
zsh: permission denied: ./a.out
yac@rainbowdash % sh ./a.out
./a.out: ./a.out: cannot execute binary file
yac@rainbowdash % cat a.c
#include <stdio.h>
void main(void) {printf("a\n");}
复印件

如果你关心的是“在我的目录中执行”,他们可以

% cd your/directory && ./their/executable/copy

你说sh“似乎能够处理二进制文件”是什么意思?你能举个例子吗?例如,如果我键入
sh/bin/rm
,它会报告一个语法错误(因为它不是有效的sh脚本)。链接器和加载程序仍然需要加载一个二进制文件才能执行它。不,没有+r的+x不足以执行……而且不,
sh
在任何方面都不能绕过这一点。也许你想到的是目录,没有
+r的
+x
是有意义的。@KeithThompson也许我被搞糊涂了。我从.cpp代码生成了一个名为a.out的文件,然后执行该文件以获得代码的输出。bash断然拒绝对二进制文件执行操作,但sh只给出语法错误。我想可能是文件被破坏了,这就是语法错误的原因。现在我尝试了,我仍然可以执行它。您可能还需要静态链接它,否则您可以像使用任何其他解释程序一样使用ELF动态链接器/加载程序。请参阅man ld.soOkay,但如果他们没有对我的主目录的写入权限,则最后一部分将无法工作。你是说他们可以先将cd刻录到我的主页目录,然后再复制到他们的主页目录?我以前没想过,也许会有同样的效果。是的,他们可以。阅读linux进程的工作原理——fork/exec和继承env等。因此,他们可以使用CWD ANYWE执行任何操作。在这里,他们可以
cd
to,但当然,如果他们在那里没有写权限,他们就不能在那里写。
% cd your/directory && ./their/executable/copy