だから、最近見つけるのが難しい権限の問題が発生しました。権限が与えられない理由を見つけるためのツールや方法はありますか?私はこれがいかに働くか想像する:
sudo why <user> <command to test>
sudo why voidcrawler touch foo
voidcrawler is not the owner or part of groups: root, other_user
そんなことがありますか?
答え1
これには2つの部分があり、私が知っている限り2つを同時に実行できるツールはありません。
- 許可拒否エラーが発生した場合、コマンドは何をしますか?
- 権限拒否エラーが発生するのはなぜですか?
コマンドは何をしていますか?
通常、このようなコマンドを使用することは非常に明白ですrm
が、他のコマンドの出力はあまり良くなく、実際に権限拒否エラーに関連する内容を教えてくれません。
注文するストレスこれに非常に便利です。発行されたすべてのシステムコールとプロセスによって受信された信号を一覧表示します。この情報の一部を人間が読める出力にデコードできます。
デフォルトでは、すべてをstderrに書き込みますが、スイッチを使用してファイルに書き込むように設定できます-o
。
簡単な例を見てください。簡単な失敗ケースを設定できますrm
。
$ sudo mkdir foo
$ sudo touch foo/bar
$ rm -rf foo
rm: cannot remove 'foo/bar': Permission denied
ここで、straceがどのように役立つかを示すために、同じrm
コマンドを実行します。
$ strace -o trace_file rm -rf foo
$ grep EACCES trace_file
unlinkat(4, "bar", 0) = -1 EACCES (Permission denied)
だからこれは呼び出しを示しています解くbar
開いているディレクトリからファイルを削除できません。
こういうことが起きていることが分かったにもかかわらず、私たちはそれが失敗するようにしました。これは、出力が悪いより複雑なコマンドを診断するのに役立ちます。
権限拒否エラーが発生する理由を確認するツールはありませんが、その理由は比較的少ないです。
ファイル権限が最も一般的です。時間これらはよく文書化されていますしたがって、ここに記載する価値はありません。
定期的に人々を見つけることができる他の2つの情報源は次のとおりです。
答え2
コマンドが何をすべきかを知る必要があるため、コマンドに基づいて確認することはあまり意味がありません。
- 新しいファイルまたはディレクトリの作成
- 既存のファイルを読む
- 既存のファイルに書き込む
- 既存ファイルの実行
- 既存のファイルまたはディレクトリの削除または名前変更
- ディレクトリに変更
権限は、どのプログラムがこれらの操作を試みるかは関係ありません。同じコマンドであっても、引数や環境によって異なる操作を実行できます。