コマンドの実行中にtouch file
エラーが発生しました。
touch: cannot touch 'file': permission denied
ファイルを作成したいディレクトリに対して777権限を持っていても、特定のユーザーとしてファイルを作成することはできませんが、他のユーザーはそのディレクトリからファイルを作成できます。
根本原因を見つけようとしていますが、strace
strace出力を理解できません。私が考えると、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が有効になっていることを確認することです。