他のユーザーだけが実行可能で、読み取り/書き込みができないようにファイルを設定するにはどうすればよいですか。これは、ユーザー名で何かを実行しているのに、パスワードを教えたくないためです。私は試した :
chmod 777 testfile
chmod a=x
chmod ugo+x
別のユーザーとして実行すると、引き続き権限が拒否されます。
他のユーザーだけが実行可能で、読み取り/書き込みができないようにファイルを設定するにはどうすればよいですか。これは、ユーザー名で何かを実行しているのに、パスワードを教えたくないためです。私は試した :
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」を呼び出すシェルスクリプトを作成し、/ 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
コマンドを使用してスクリプトユーザーを管理できます。
他のユーザーにプログラムの実行を許可すると、プログラムファイルが読み取り可能かどうかに関係なく、他のユーザーはプログラムが実行しているすべてのことを知ることができます。彼らがする必要があるのは、デバッガ(またはのようなデバッガのようなプログラムstrace
)をポイントすることだけです。バイナリ実行可能ファイルは、実行可能で読み取り不可能であれば実行できます(インタープリターがスクリプトを読み取る必要があるため、スクリプトは実行できません)。ただし、これによってセキュリティが確保されるわけではありません。
あなたが他の人がそれらをプログラムがやっている正確に何を参照させることなく、ブラックボックスとして、あなたのプログラムを実行することができるようにしたい場合は、スクリプトを与える必要が特権を:それは作るsetuidをユーザーに。rootだけがsetuidプログラムでデバッグツールを使用できます。安全なsetuidプログラムを書くのは簡単ではなく、ほとんどの言語は適切ではないことに注意してください。詳細については、シェルスクリプトでのsetuidの許可を参照してください。setuidプログラムを作成する場合は、安全なsetuidスクリプトを可能にすることを明示的に意図したモード(汚染モード)を備えたPerlを強くお勧めします。
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
chmod
です。これは質問の答えにはなりません。