
なぜうまくいかないのかを探るのに何時間も費やしましたが、もう諦めたのでここにいます。
私の設定/問題: 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
代わりに、ディレクトリのデフォルトの権限セットを維持できるようにします。