権限自己検査のためのツール/方法はありますか?

権限自己検査のためのツール/方法はありますか?

だから、最近見つけるのが難しい権限の問題が発生しました。権限が与えられない理由を見つけるためのツールや方法はありますか?私はこれがいかに働くか想像する:

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つを同時に実行できるツールはありません。

  1. 許可拒否エラーが発生した場合、コマンドは何をしますか?
  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

コマンドが何をすべきかを知る必要があるため、コマンドに基づいて確認することはあまり意味がありません。

  • 新しいファイルまたはディレクトリの作成
  • 既存のファイルを読む
  • 既存のファイルに書き込む
  • 既存ファイルの実行
  • 既存のファイルまたはディレクトリの削除または名前変更
  • ディレクトリに変更

権限は、どのプログラムがこれらの操作を試みるかは関係ありません。同じコマンドであっても、引数や環境によって異なる操作を実行できます。

関連情報