ファイルを実行可能にし、他のユーザーが読み書きできないようにすることはできますか?その理由は、私のユーザー名を使用して操作を実行しますが、パスワードを提供したくないからです。私は試した:
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'を呼び出すシェルスクリプトを作成し、/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
ユーザーがシェルスクリプトを読み取って実行できることを確認してください(書き込みアクセス権なし)。
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::Crypto
か、決定されたユーザーがリバースエンジニアリングできるよりもPAR::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
)。バイナリ実行可能ファイルが実行可能で読み取れない場合は実行できますが(インタプリタがスクリプトを読み取ることができる必要があるため、スクリプトは実行できません)、セキュリティは提供されません。
他の人がプログラムが何をしているのかを正確に見ることができないように、ブラックボックスのようにプログラムを実行できるようにするには、スクリプトに高い権限を与える必要があります。設定値あなたのユーザーに。ルートのみ利用可能デバッグツールsetuidプログラムから。安全なsetuidプログラムを書くのは簡単ではなく、ほとんどの言語は適切ではありません。シェルスクリプトでsetuid設定を許可するもっと説明したい。 setuidプログラムを作成したい場合は、安全なsetuidスクリプトを有効にするために明示的に設計されたモード(taintモード)を持つPerlを強くお勧めします。
答え4
chmod コマンドを使用してファイル権限を設定できます。 root ユーザーとファイル所有者の両方でファイル権限を設定できます。 chmodには、シンボルモードと数値モードの2つのモードがあります。
まず、ユーザー(u)、グループ(g)、その他(o)、または3つすべて(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