dirに777権限がありますが、無効な権限でファイルを生成する

dirに777権限がありますが、無効な権限でファイルを生成する

コマンドの実行中にtouch file エラーが発生しました。

touch: cannot touch 'file': permission denied

ファイルを作成したいディレクトリに対して777権限を持っていても、特定のユーザーとしてファイルを作成することはできませんが、他のユーザーはそのディレクトリからファイルを作成できます。

根本原因を見つけようとしていますが、stracestrace出力を理解できません。私が考えると、strace出力に関連する行は次のとおりです。

open("file", O_WRONGLY|O_CREATE|O_NOCTTY|O_NONBLOCK, 0666) = -1  EACESS (Permission denied)

また、特定の権限を持つファイルを生成しようとしましたが、権限エラーが発生しました。試したコマンドは次のとおりです。

install -b -m 511 /dev/null file

答え1

ファイルシステムアクセス制御リストによってオーバーライドできます。たぶんLinux ACLですか?を使用してこれを決定できますlsfacl

現在のACLのインポート- getfaclを使用して、すべてのファイルまたはディレクトリの権限を確認できます。以下の例をご覧ください。

# getfacl dir/ file: dir owner: root group: root user::rwx group::--- other::---

ACLを使用した権限の設定- アクセス制御リストから継承したディレクトリに対して「モード」0777を設定できます。setfacl -d -m o::rwx /directory

答え2

私もこの問題に直面しました。私にとって問題は、親ディレクトリに必要なrwx権限を与えたことです。

chmod 777 parent_dir

touchしかし、権限のないサブディレクトリのファイルにアクセスしようとしています。

> touch parent_dir/subdir/file.txt
touch: cannot touch 'parent_dir/subdir/file.txt': Permission denied

これが問題であれば、探しているコマンドは次のとおりです。

chmod -R 777 parent_dir

答え3

時には、ファイルを作成する現在のディレクトリに対する十分な権限がありますが、階層の親ディレクトリに対する権限がない場合があります。

ルートディレクトリから現在のディレクトリまで権限の問題があるかどうかを一度確認してください。

もう一つの理由は、selinuxが有効になっていることを確認することです。

関連情報