Linux

文件權限僅執行

  • May 29, 2013

如何將文件設置為僅對其他使用者可執行但不可讀取/可寫,原因是我正在使用我的使用者名執行某些操作,但我不想給出密碼。我試過了 :

chmod 777 testfile
chmod a=x
chmod ugo+x

以其他使用者身份執行時,我仍然被拒絕權限。

您需要對腳本具有讀取和執行權限才能執行它。如果您無法閱讀腳本的內容,您也無法執行它。

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

前面的陳述有一半是真的。您可以設置一個腳本,使其不被使用者讀取,但仍可執行。這個過程有點冗長,但可以通過在 /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::CryptoAcme::Bleach可以被確定的使用者進行逆向工程的混淆更好。將腳本編譯為二進制也是如此。如果您發現此方法有問題,請告訴我。對於更高級的使用者,您可能希望完全刪除 User_Alias 部分並將 SCRIPTUSER 替換為 ‘%groupname’。這樣您就可以使用usermod命令管理您的腳本使用者。

引用自:https://unix.stackexchange.com/questions/16623