回答:
man
(ユーザーではなくコマンド)は、ヘルプアプリケーションです。アプリケーションは、パッケージ内のマニュアルページを提供しますがman
、それらがどこにあるのか、また何を提供するのかを知る必要があります。速度を上げるためにman
(入力時にファイルシステム全体を検索しないように)、man <command>
これらのmanページはと呼ばれるコマンドによってデータベースにインデックス付けされますmandb
。
Ubuntuでは、mandb
インデックスをGNU gdbmデータベースに格納します/var/cache/man/index.db
(同じディレクトリにいくつかの言語固有のバージョンがあります)。これは、memcacheに似ていないキー値ハッシュデータベース、または同様のアイデアに関する他の100の実装です。バイナリ、軽量、高速です。最後にそれをどのようにプレイするかの例を紹介します。
このインデックスは、Ubuntuで毎日実行されるようにスケジュールされてい/etc/cron.daily/man-db
ます。スクリプト全体がルートとして実行され、最初にいくつかのクリーンアップmandb
が行われますが、最後にはman
ユーザーとして実行されていることがわかります。
# --pidfile /dev/null so it always starts; mandb isn't really a daemon,
# but we want to start it like one.
start-stop-daemon --start --pidfile /dev/null \
--startas /usr/bin/mandb --oknodo --chuid man \
$iosched_idle \
-- --no-purge --quiet
グループを変更するわけではないため、グループの所有権はすべて/var/cache/man
ルートのままです。
しかし、なぜmandb
別のユーザーとして実行されるのでしょうか?これは、(おそらく)と全く同じように実行することができますroot
が、それはだ入力の処理(見た目でさまざまなソースからmanpath
)。独自のユーザーとして実行することにより、システムが、異常な、破損した、または悪意のあるmanページによって悪用されるプロセス(またはさらに悪いことに)から隔離されます。
起こりうる最悪の事態は、man
ページインデックスにのみ影響します。ブーフー。次のようなものでそれを確認できます。
sudo -u man find / -writable 2>/dev/null
また、そのアプローチを使用して、ユーザーがシステムに与えるダメージを確認できます。ファイルのアクセス許可を監査することをお勧めします(たとえば、ユーザーは音楽コレクション全体を削除できることがわかりました)。
でデータベースを覗くことができますaccessdb
。いくつかのランダムなレコードは次のとおりです。
$ accessdb | shuf -n3
fpurge -> "- 3 3 1380819168 A - - gz purge a stream"
fcgetlangs -> "FcGetLangs 3 3 1402007131 A - - gz Get list of languages"
ipython -> "- 1 1 1393443907 A - - gz Tools for Interactive Computing in Python."
上記から完全に明確ではありませんが、実際にはタブで区切られたフィールドがあります。
<name> -> <ext> <sec> <mtime> <ID> <ref> <comp> <whatis>
実際のフィールドの内容については、テクニカルマニュアルを参照してください。