文件权限只执行

c0m*_*ade 14 linux security permissions executable

如何将文件设置为仅对其他用户可执行但不可读写,原因是我正在使用我的用户名执行某些操作,但我不想给出密码。我试过 :

chmod 777 testfile
chmod a=x
chmod ugo+x
Run Code Online (Sandbox Code Playgroud)

以其他用户身份执行时,我仍然获得权限被拒绝。

san*_*ana 17

前面的陈述有一半是真的。您可以设置一个脚本,使其无法被用户读取,但仍然可以执行。这个过程有点冗长,但可以通过在 /etc/sudoer 中创建一个例外来实现,这样用户就可以临时以自己的身份运行脚本而不会被提示输入密码。下面的例子:

我想与用户分享的一些脚本:

me@OB1:~/Desktop/script/$ chmod 700 somescript.pl
me@OB1:~/Desktop/script/$ ls -l somescript.pl
-rwx------ 1 me me 4519 May 16 10:25 somescript.pl
Run Code Online (Sandbox Code Playgroud)

制作一个调用“somescript.pl”的shell脚本并将其保存在 /bin/ 中:

me@OB1:/bin$ sudo cat somescript.sh
[sudo] password for me: 
#!/bin/bash
sudo -u me /home/me/Desktop/script/somescript.pl $@
Run Code Online (Sandbox Code Playgroud)

可选步骤在 /bin/ 中创建指向 somescript.sh 的符号链接:

sudo ln -s /bin/somescript.sh /bin/somescript
Run Code Online (Sandbox Code Playgroud)

确保 shell 脚本对用户可读/可执行(无写访问权限):

sudo chmod 755 /bin/somescript.sh
me@OB1:/bin$ ls -l somescript*
lrwxrwxrwx 1 root root  14 May 28 16:11 somescript -> /bin/somescript.sh
-rwxr-xr-x 1 root root 184 May 28 18:45 somescript.sh
Run Code Online (Sandbox Code Playgroud)

通过添加以下行在 /etc/sudoer 中创建例外:

# User alias specification
User_Alias  SCRIPTUSER = me, someusername, anotheruser

# Run script as the user 'me' without asking for password
SCRIPTUSER ALL = (me) NOPASSWD: /home/me/Desktop/script/somescript.pl
Run Code Online (Sandbox Code Playgroud)

布丁中的证明:

someuser@OB1:~$ somescript
***You can run me, but can't see my private parts!***

someuser@OB1:~$ cat /home/me/Desktop/script/somescript.pl
cat: /home/me/Desktop/script/somescript.pl: Permission denied
Run Code Online (Sandbox Code Playgroud)

这种方法应该比试图混淆Filter::CryptoPAR::Filter::CryptoAcme::Bleach可以由确定的用户进行逆向工程更好。将脚本编译为二进制文件也是如此。如果您发现此方法有问题,请告诉我。对于更高级的用户,您可能希望完全删除 User_Alias 部分并用 '%groupname' 替换 SCRIPTUSER。这样您就可以使用usermod命令来管理您的脚本用户。


Eig*_*ony 13

您需要对脚本具有读取和执行权限才能执行它。如果您无法读取脚本的内容,您也无法执行它。

tony@matrix:~$ ./hello.world
hello world
tony@matrix:~$ ls -l hello.world
-rwxr-xr-x 1 tony tony 17 Jul 13 22:22 hello.world
tony@matrix:~$ chmod 100 hello.world
tony@matrix:~$ ls -l hello.world
---x------ 1 tony tony 17 Jul 13 22:22 hello.world
tony@matrix:~$ ./hello.world
bash: ./hello.world: Permission denied
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 6

如果你让其他用户执行一个程序,那么他们就可以知道程序在做什么,程序文件是否可读。他们所需要做的就是指向一个调试器(或类似调试器的程序,例如strace)。如果二进制可执行文件可执行但不可读(脚本不能,因为解释器需要能够读取脚本),则它可以运行,但这不会给您任何安全性。

如果你希望别人能够执行程序作为一个黑盒子,没有让他们看看到底是什么程序做的,你需要给你的脚本提升权限:使它的setuid到您的用户。只有 root 可以在 setuid 程序上使用调试工具。请注意,编写安全的 setuid 程序并不容易,而且大多数语言都不适合;有关更多说明,请参阅在 shell 脚本上允许 setuid。如果您要编写 setuid 程序,我强烈推荐 Perl,它有一个模式(污点模式),明确旨在使安全的 setuid 脚本成为可能。