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

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

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

man (命令,而不是用户)是一个帮助应用程序。 应用程序在其包中提供手册页,但是man需要知道它们的位置以及它们提供的帮助。 为了加快速度 – 当你输入man 时, man不会搜索整个文件系统 – 这些手册页被一个名为mandb的命令索引到数据库中。

在Ubuntu中, mandb/var/cache/man/index.db存储GNU /var/cache/man/index.db数据库中的/var/cache/man/index.db (以及同一目录中的一些特定于语言的版本)。 这是一个键值哈希数据库,与memcache不同,或类似想法的其他一百个实现。 它是二元的,轻快的。 我将举一个如何在最后玩它的例子。

此索引计划在/etc/cron.daily/man-db每天在Ubuntu中运行。 整个脚本以root身份运行并首先进行一些清理,但最后我们看到mandbman用户身份运行:

 # --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." 

虽然从上面不完全清楚,但实际上有一些以制表符分隔的字段:

  ->        

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