0111、0333などの権限の目的

0111、0333などの権限の目的

111または333などのLinux権限(例:ユーザー実行可能、しかし読めないファイル)、実行能力が自動的に読み取り能力を意味しない場合はどうなりますか?

答え1

私はそれで遊んでいて、明らかに実行権限が読み取り権限を意味するわけではありません。バイナリファイルは実行可能ですが、読み取ることはできません。

$ echo 'int main(){ puts("hello world"); }' > hw.c
$ make hw
$ ./hw
hello world
$ chmod 111 hw
$ ./hw 
hello world
$ cat hw
/bin/cat: hw: Permission denied

ただし、読み取りおよび実行権限ビットの両方がないと、スクリプトを実行できません。

$ cat > hw.sh
#!/bin/bash
echo hello world from bash
^D
$ chmod +x ./hw.sh
$ ./hw.sh 
hello world from bash
$ chmod 111 ./hw.sh
$ ./hw.sh
/bin/bash: ./hw.sh: Permission denied

答え2

たとえば、特定のディレクトリに実行可能ファイルを(秘密に)アーカイブし、ユーザーがディレクトリの内容を表示できない状態でそのファイルを呼び出すことを許可する場合(ただし、特定のファイルがディレクトリにあることを知っている場合)ディレクトリに適しています。そこに教えてください!)。 111と比較して、333はディレクトリの内容を見ることなくこれらのディレクトリへのファイルの書き込み/削除を許可します。

答え3

明らかに、すべての組み合わせがそれほど役に立つわけではありませんが、特に言及した組み合わせの観点からは、問題のファイルがスクリプト(シェルスクリプトなど)でない限り、ファイルを実行するためにread実際に権限は必要ありません。権限だけが必要です。 )、Perlスクリプト()など)。一般的なバイナリは、権限がある限り実行できます。 * BSDシステムでは、一部の実行可能ファイルは特に「セキュリティ重要」コマンドに対して許可なしに許可を付与します。execute.sh.plexecuteexecutereadsu

それでは、ユーザーにread権限(およびexecute権限のみ)を付与するとどうなりますか?ユーザーがファイルを読み取れないためです。コピーこのユーザーによるものです!権限を削除すると、readユーザーが後で誤用する可能性のある実行可能ファイルの「プライベート」コピーを作成するのを防ぐことができます(例:get SUID=root on)。

権限がないと、writeファイルが誤って削除されるのを防ぎます。

read所有者に権限を付与しないのはwriteやや珍しいことですが、時にはowner所有者がファイルを削除できないようにするのも良い考えかもしれません。もちろん、これらのアクションはファイルの権限だけでバイパスできるということownerは言うまでもrootありません。chmod

関連情報