グループに属しているときに 640 権限でファイルを cat することはできません

グループに属しているときに 640 権限でファイルを cat することはできません

なぜうまくいかないのかを探るのに何時間も費やしましたが、もう諦めたのでここにいます。

私の設定/問題: SSH (pub/priv キー、パスワードなし) 経由で接続するリモート VPS があります。
ユーザーは debian です。
この VPS で、docker コンテナを実行しますpostgres:14.3-alpine

このDockerには、/home/debianにマウントされた2つのボリュームがあります:
postgres-certs
postgres-data

Docker 内のユーザーのユーザー/グループ ID は 70 です。詳細情報ここ:
ご存知のとおり、証明書にはセキュリティ ルールがあるため、上記のリンクで説明されているように、postgres-certsフォルダーに権限 640 を設定しました。

drw-r-----  2    0   70 4096 jun  7 22:45 postgres-certs
drwxr----- 19   70 1000 4096 jun 11 20:40 postgres-data

ご覧のとおり、両方のフォルダーにはグループの読み取り権限があります。
私のグループを見つけてください:

debian@db-dev:~$ id
uid=1000(debian) gid=1000(debian) groups=1000(debian),70(docker-pg-alpine),998(docker)

ご覧のとおり、私は 2 つのフォルダーで同じ定義のグループ 70 と 1000 にいます。
これらのフォルダーのいずれかでファイルを cat しようとすると、次のようになります (もちろん sudo を実行すれば機能します)。

debian@db-dev:~$ cat postgres-certs/server.crt 
cat: postgres-certs/server.crt: Permission denied

ファイルが彼のディレクトリと同じ権限を持っていることを証明するために:

debian@db-dev:~$ sudo ls -ln postgres-certs/server.crt 
-rw-r----- 1 0 70 2903 jun  7 22:44 postgres-certs/server.crt

はい、ログアウトしました (ssh を切断し、再起動もしました)。また、問題が発生しないことを確認するためにコンテナを停止しました。
グループの読み取り権限があり、自分がグループに属しているのに、これらのフォルダー内のファイルを cat できない理由がわかりません...
何が間違っているのか見つけることができれば、それは素晴らしいことです。

答え1

ファイルにアクセスするには、xディレクトリを設定する必要があります。

  • ファイルの場合、(x) を使用すると、ファイルがプログラムであれば実行できます。

  • ディレクトリの場合、(x) を使用するとディレクトリに入り、ファイルにアクセスできます。


によるとマンchmodページ、(x) はディレクトリの検索権限を許可します。

文字 rwxXst は、影響を受けるユーザーのファイル モード ビットを選択します: 読み取り (r)、書き込み (w)、実行 (またはディレクトリの検索) (x)、ファイルがディレクトリであるか、すでに一部のユーザーに実行権限がある場合のみ実行/検索 (X)、実行時にユーザーまたはグループ ID を設定 (s)、削除制限フラグ、またはスティッキー ビット (t)。

これによればUnix ファイルシステムドキュメント(x) を使用すると、ディレクトリに入り、ファイルにアクセスできます。

ディレクトリの場合、実行権限があれば、ディレクトリに入る (つまり、ディレクトリに cd する) ことができ、その中の任意のファイルにアクセスできます。


今後の参考のために次のようなものを使用できます。

sudo chmod g+x ~/postgres-certs

ディレクトリ上のグループに (x) 権限を追加します。

ただし、権限を 650 に変更する代わりに、次のようにする必要があります。

sudo cat postgres-certs/server.crt

代わりに、ディレクトリのデフォルトの権限セットを維持できるようにします。

関連情報