0111や0333などのアクセス許可の目的


17

(つまり、ユーザーは、111や333などのLinuxのパーミッションの目的は何で実行することができますが、読み取ることができません実行する能力が自動的に読み取る能力を意味するものではありません場合は、ファイルを)?


1
そのような設定の例はありますか?あなたは正しいと思います。読めないものは実行できません。これらの組み合わせは、0000から0777の間の許可の領域では理論上のものです。数字の8進数を表示するには、先頭に0を追加する必要があることに注意してください。
ikrabbe

6
スクリプト(shell-scriptなど)でない限り、実際にコマンドを実行するために読み取り許可必要ありません。「通常の」実行可能ファイル-たとえば。su、bashまたはvi-実行可能ビットを設定するだけで、ユーザーが実行できるようになります。読み取れないファイル、コピーできないファイル。そのため、ユーザーがセキュリティ上重要なコマンド(suなど)をコピーできないようにすることで、ユーザーはそれを自分でコピーすることも、逆アセンブルすることもできなくなります。* BSDには、実行可能な読み取り権限のないコマンドがいくつかあります。
バールドコッペルド

回答:


25

私はそれをいじったが、どうやらexec許可は読み取り許可を意味しない。バイナリは読み取り可能でなくても実行可能です。

$ 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

4
2番目の例では#!を使用しているため、これは正しいです。ELFヘッダーを見逃して起動するため、使用する実行可能ファイルを推測するためにファイルが読み取り可能である必要があります。これは、ファイルの内容を他の場所にコピーされないように保護するための一般的な状況です。ライセンスマネージャーは、これが表示される一般的な例です。
hspaans

1
実行可能ファイルのみのバイナリを読み取ることができることに注意してください:unix.stackexchange.com/a/34294
小太郎

6
@hspaans:シバンはカーネルによって処理され、カーネルはパーミッションのような古風な小さなものを気にしません。読み取りアクセスが必要なのはシェル(またはインタープリター)です。カーネルが実行され(たとえば)/bin/bash hw.sh、その後bash hw.shが読み取りのためにオープンを試みます(そして失敗します)。
ケビン

2
私は、カーネルパーミッションを気にすることを非常に願っています。他に何もしません。@Kevinの投稿の恐ろしい文が意味することは、シバンを使用するかどうかに関係なく、カーネルはファイルを実行するための実行権限のみを必要とすることです。
エミールイェジャベクはモニカをサポートします

2
@EmilJeřábekカーネルは、アプリケーションプロセスで何ができるかを決定する際に、アクセス許可を考慮します。ただし、アクセス許可を実装するのはコンポーネントであるため、内部的にそれらを無視することもできます。そのため、解釈されたファイルの実行方法を決定するときにシバン行を読み取るか、実行専用バイナリファイルの内容をメモリに読み込むことができます。
バーマー

16

たとえば、特定のディレクトリに(秘密の)実行可能ファイルを保持し、ユーザーがディレクトリの内容を表示せずにそれらのファイルを呼び出すことを許可する場合(ただし、特定のファイルが通知された後に存在することを知っている場合)、ディレクトリに対して意味があります。111と比較して333は、ディレクトリの内容を表示することなく、これらのディレクトリに対してファイルを書き込み/削除できます。


5
私のUniでは、これらの許可を使用して、課題がディレクトリにドロップされるようにしました。講師はオールドスクールでした。
-DarkHeart

@DarkHeart興味深い。ランダムなコンポーネントをファイル名に追加する必要があったことを願っています。そうしないと、クラスメートからコピーしようとするインセンティブでない場合、その内容がわからないからです。
PSkocik

5

明らかにすべての組み合わせがそんなに便利というわけではありませんが、具体的に述べたものを取るために...あなたは実際にreadファイルを実行する許可を必要としません- execute許可のみ-問題のファイルがスクリプト(例えばシェルスクリプト) (.sh)、perl-script(.pl)など)。通常のバイナリは、execute許可だけで実行できます。* BSD-systmesでは、いくつかの実行可能ファイルは、特に「security-important」コマンドでexecute許可なく許可を与えreadますsu

では、なぜユーザーにread-permission(およびexecute-permisson)を付与しないのでしょうか?ユーザーが読み取れないファイル、そのユーザーがコピーすることもできないためです!read許可を削除すると、ユーザーが実行可能ファイルの「個人用」コピーを作成できなくなります-後で悪用(getなどSUID=root on)される可能性があります。

そして、持っていないwrite-permissionを、accedently削除されたファイルを防ぎます。

所有者にread-nor write-permissionのどちらも与えないことは少し珍しいですがowner、ファイルを削除することさえしないようにすることをお勧めします。もちろんownerないもちろんのこと- root-常に回避するなどの措置が、そうでない場合は他の方法では、単純にすることによりchmod、ファイルのパーミッション。


ownerファイルを削除するだけでさえ防ぐことは良い考えかもしれません。」—ただし、ファイルを削除するためにファイルに対する何らかの許可(読み取り、書き込み、または実行)は必要ありません。
セラダ

たとえば、実行可能ファイルにデータベースパスワードが埋め込まれている場合、実行可能ファイルは実行時にデータベースに接続してジョブを実行するが、必ずしもパスワードを公開したくない場合に使用できます。
セラダ

@Celada、それは古い質問ですが、そのようなアプローチは、メモリ領域オフセットを調べてからメモリ/proc/${PID}/mapsの関連セクションを読み取ることでメモリダンプの影響を受けにくい/proc/${PID}/memでしょうか?または、実行可能ファイルのアクセス許可を制限すると、実行中のメモリ内の関連セクションの読み取りアクセス許可も制限されますか?(後者はありそうもない、IMO。)
スペンサーD
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.