私は以下を言及していますArch Linux Access_Control_Lists ドキュメント
それは次のように言います:
Webサーバーへのプライベートファイルに対する実行権限の付与
次の技術では、Webサーバーなどのプロセスに世界中のアクセス権を付与し、セキュリティを損なうことなくユーザーのホームディレクトリにあるファイルへのアクセス権を付与する方法について説明します。
以下では、Webサーバーがhttpユーザーとして実行されており、geoffreyのホームディレクトリである/home/geoffreyへのアクセスが許可されているとします。
最初のステップは、ユーザーhttpに実行権限を付与することです。
setfacl -m "u:http:--x" /home/geoffrey
注:プロセスの内容を一覧表示するには、ディレクトリに対する実行権限が必要です。
したがって、上記の例では、httpユーザーに対して/home/geoffreyディレクトリの実行権限を設定しました。私が理解しているように、ディレクトリに実行ビットを与えるだけではディレクトリの内容をリストすることはできませんが、ファイルにアクセスすることはできます(ファイル名+ディレクトリ内の特定のファイルに対する権限を知っている場合)。正しい権限を持つことになります))。それでは、httpユーザー(またはそれらが参照するプロセス)はどのようにディレクトリsetfacl -m "u:http:--x" /home/geoffrey
の内容を一覧表示できますか?私は何を見逃していますか?
よろしくお願いします!
ベストアンサー1
-x
ディレクトリとその中のすべてのファイルにアクセスするには、ディレクトリに対する権限が必要です。ただし、ディレクトリの下のファイルへのアクセスは、ディレクトリ自体ではなくファイルの権限によって異なります。親ディレクトリ(ディレクトリ)に対する実行権限がある限り、ここに含まれるファイルにアクセスするために他のものは必要ありません。これは次の例で簡単に説明できます。
$ sudo mkdir dir1 && echo "Hello world!" | sudo tee dir1/file1 && sudo chmod 700 dir1
Hello world!
$ ls -ld dir1/
drwx------ 2 root root 4096 Apr 12 16:09 dir1/
$ sudo ls -l dir1/
total 4
-rw-r--r-- 1 root root 13 Apr 12 16:09 file1
アクセス権のみがあるため、root
ディレクトリまたはcatファイルの内容を一覧表示しようとすると失敗します。
$ ls dir1/
ls: cannot open directory 'dir1/': Permission denied
$ cat dir1/file1
cat: dir1/file1: Permission denied
cat
ファイルへの読み取りアクセス権があっても操作は失敗します。これで、ユーザーにディレクトリへの実行アクセス権を付与して再試行すると、ファイルを読み取ることができます。
$ sudo chmod 711 dir1/
$ ls -l
total 4
drwx--x--x 2 root root 4096 Apr 12 16:09 dir1
$ cat dir1/file1
Hello world!
ディレクトリへの読み取りアクセスが必要なため、まだディレクトリの内容を一覧表示できませんが、そのパスを知っている限り、ディレクトリ内のすべてのファイルを読み取ることができます。
したがって、ここの基本的なアイデアは健全です。混乱したのは最後の説明だけです。エントリを一覧表示するには読み取りアクセスが必要ですが、パスが既知の特定のファイルへのhttp
ユーザーアクセスのみを許可する必要がある場合は、実行アクセスで十分です。
表現が不都合ではありませんが、その意見が完全に間違っているわけではなく、ただ不完全なだけです。実行権限が必要です。完全ディレクトリの内容を一覧表示します。それ以外の場合、ファイル名は表示できますが、プロパティは表示できません。
$ ls -l
total 4
drwxr--r-- 2 root root 4096 Apr 12 16:09 dir1
$ ls -l dir1/
ls: cannot access 'dir1/file1': Permission denied
total 0
-????????? ? ? ? ? ? file1