「man」は root と user に対して異なる動作をします。

「man」は root と user に対して異なる動作をします。

最近、あるユーザーが私に助けを求めて、次のように書きました。

「通話にman /bin/find誤った文字が表示されるのはなぜですか?」

man私は彼がパスを提供することによってそれを誤って使用していると答えました。つまり、man実行可能ファイルをマニュアルページのソースファイルとして解釈し、パスなしでテーマ名のみを提供する必要があると答えました。言い換えれば、man find彼は私がパニックになる質問を思い出しました。

「では、rootで実行するとなぜ動作しますかsudo man /bin/find?」

私はそれを試しましたが、rootシェルを使用したり、rootsudoシェルからrootとして呼び出すと、実行可能ファイルのsudo man /bin/find代わりにマニュアルページが表示されます。

  • 特別なことはありませんfind。これはすべての実行可能ファイルに適用されます。
  • これはRHEL 7と8で発生しますが、Mac OSではバイナリをrootまたはユーザーとしてマークします。
  • のマニュアルページにこれに関する言及がありませんman
  • 私は現実のチェックを行い、ls -i man同じsudo ls -i manインデックスノードを返しました。についても同様です/bin/find
  • manまだエイリアスが指定されていません。
  • シェルで実行すると、bash -x代替項目は表示されません。

私は間違いなく簡単なものを見落としています。この現象の説明は何ですか?

ベストアンサー1

私はそれをテストし、あなたは正しいです。man /usr/bin/findバイナリではなくディスプレイページを監督します。さらに、追加すると、/binバイナリ$PATHの代わりにページも表示されますman /bin/find。実際のルート(sudoではない)がバイナリを表示していることを確認することもできます。

では、ここで何が起こっているのでしょうか?

  1. Manこのパスが存在する場合は、パラメータからそのパスを削除してください$PATH。実行可能なパスを削除してもバイナリが表示されないことは明らかですman。おそらく、彼らは引数の用語とバイナリ法を区別する他の方法がないかもしれません。
  2. 承認されていないコマンドが実行されるのを防ぐために、sudoはELシステムに独自の定義を持ち、PATHすべてのコマンドは異なる環境で実行されます。secure_path/etc/sudoers/sbin:/bin:/usr/sbin:/usr/binsudoPATH
  3. ELシステムでは、/bin/findこれはハードリンクであり、デフォルト/usr/bin/findでは/bin追加されません$PATH。これはmanこれがバイナリであることを理解していませんでしたが、追加されsudoたので、/bin$PATH理解できるmanようになりました。

おすすめ記事