为什么 /etc/passwd 中有一个 man 条目

为什么 /etc/passwd 中有一个 man 条目

我注意到我的/etc/passwd文件中有一个 man 用户的条目。这个用户的用途是什么?

man:x:6:12:man:/var/cache/man:/bin/sh

答案1

man(命令,而不是用户)是一个帮助应用程序。应用程序在其软件包中提供手册页,但man需要知道它们在哪里以及它们提供什么帮助。为了加快速度 — — 因此man在键入时不会搜索整个文件系统man <command>— — 这些手册页由名为 的命令索引到数据库中mandb

在 Ubuntu 中,mandb索引存储在 GNU gdbm 数据库中/var/cache/man/index.db(以及同一目录中的一些特定于语言的版本)。这是一个键值哈希数据库,与 memcache 或类似想法的其他一百个实现没有什么不同。它是二进制的、轻量级的和快速的。我将在最后给出一个如何使用它的示例。

此索引计划于 每天在 Ubuntu 上运行/etc/cron.daily/man-db。整个脚本以 root 身份运行,并首先进行一些清理,但在最后我们看到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仍然是 root。

但为什么要mandb以不同的用户身份运行呢?它可能运行得一样好,root但它处理输入来自各种来源(请参阅manpath)。以自己的用户身份运行可使系统免于进程崩溃 — — 或更糟 — — 被格式错误、损坏或恶意的手册页利用。

最糟糕的情况也只会影响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> 

您可以在以下位置阅读有关实际字段内容的更多信息技术手册

相关内容