権限が拒否された現在のディレクトリにディレクトリを変更できないのはなぜですか?

権限が拒否された現在のディレクトリにディレクトリを変更できないのはなぜですか?

次のコマンドを使用してデータベースを復元しようとします。

$ sudo -u postgres pg_restore -C -d dvdrental dvdrental.tar 
[sudo] password for t: 

ただし、次のエラー メッセージが表示されます。

ディレクトリを次に変更することはできません。"/home/t/mydata/.../relational model/SQL/implementations/Implementations、つまりリレーショナルデータベース管理システム/postgreSQL/general/web/postgresqltutorial/databases":権限が拒否されました

pg_restore:[archiver]は入力ファイル 'dvdrental.tar'を開くことができません:そのファイルまたはディレクトリはありません

権限が拒否された現在のディレクトリにディレクトリを変更できないのはなぜですか?

ファイル権限ビットは次のとおりです。

 -rw-rw-r-- 1 t t 2838016 May 26  2013 dvdrental.tar

親ディレクトリの1つを誰も読んで実行できないからですか?このファイルには親ディレクトリがたくさんあります。どうやって確認できますか?

答え1

あなたはできますが、ユーザーはpostgresできません。

sudo -u postgres user-idをpostgresに変更してコマンドを実行します。これで、ユーザーpostgresは入力ファイルだけでなく現在のディレクトリにもアクセスできません。

代わりに、次の操作を行います。

$ sudo -u postgres pg_restore -C -d dvdrental < dvdrental.tar 

これにより、sudoが開始される前にファイルがユーザーアカウントのシェルで開き、pg_restore標準入力のファイル内容にアクセスされます。

答え2

現在のディレクトリとすべての親ディレクトリにはユーザーがアクセスできる必要がありますpostgresつまり権限を決定するときに、各ディレクトリに適用される所有者/グループ/その他の権限に対して実行可能/検索可能ビットを設定するか、postgresACLを使用してその権限を付与します。

権限を確認するには、以下を使用してくださいnamei

namei -l /path/to/directory

バラよりユーザーが特定のファイルにアクセスできることを確認する方法は?もっと学ぶ。

関連情報