文件权限仅执行

文件权限仅执行

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

chmod 777 testfile
chmod a=x
chmod ugo+x

当我以另一个用户身份执行时,我的权限仍然被拒绝。

答案1

前面的说法只说对了一半。您可以设置一个脚本,使其不被用户读取,但仍然可执行。该过程有点冗长,但可以通过在 /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

制作一个调用 '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 $@

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

sudo ln -s /bin/somescript.sh /bin/somescript

确保 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

通过添加以下行在 /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

布丁中的证据:

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

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

答案2

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

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

答案3

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

如果您希望其他人能够像黑匣子一样执行您的程序,而不让他们确切地看到程序在做什么,您需要为您的脚本授予更高的权限:使其设定值给您的用户。只有root才能使用调试工具在 setuid 程序上。请注意,编写安全的 setuid 程序并不容易,并且大多数语言都不适合;看允许在 shell 脚本上设置 setuid以获得更多解释。如果您要编写 setuid 程序,我强烈推荐 Perl,它有一种模式(污点模式),明确旨在使安全的 setuid 脚本成为可能。

答案4

您可以使用 chmod 命令设置文件权限。 root 用户和文件所有者都可以设置文件权限。 chmod 有两种模式:符号模式和数字模式。

首先,您决定是为用户 (u)、组 (g)、其他人 (o) 还是三者 (a) 全部设置权限。然后,您可以添加权限 (+)、删除权限 (-),或者清除以前的权限并添加新权限 (=)。接下来,您决定是否设置读取权限 (r)、写入权限 (w) 或执行权限 (x)。最后,您将告诉 chmod 您要更改哪个文件的权限。

这里有一些例子。

清除所有权限,但为每个人添加读取权限:

$ chmod a=r filename

命令之后,文件的权限将为 -r--r--r--

为组添加执行权限:

$ chmod g+x filename

现在,文件的权限将是 -r--r-xr--

为文件所有者添加写入和执行权限。请注意如何同时设置多个权限:

$ chmod u+wx 文件名

之后,文件权限将为-rwxr-xr--

删除文件所有者和组的执行权限。再次注意如何同时设置它们:

$ chmod ug-x 文件名

现在,权限是-rw-r--r--

这是在符号模式下设置文件权限的快速参考:

Which user?
u   user/owner
g   group
o   other
a   all
What to do?
+   add this permission
-   remove this permission
=   set exactly this permission
Which permissions?
r   read
w   write
x   execute

相关内容