当前位置: 首页>>技术教程>>正文


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

问题描述

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

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

最佳方法

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

在Ubuntu中,mandb将索引存储在/var/cache/man/index.db的GNU gdbm数据库中(以及同一目录中的几种特定于语言的版本)。这是一个键值哈希数据库,与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中的所有组所有权仍为根的原因。

但是,为什么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."

尽管从上面不能完全清楚,但实际上那里有tab-separated个字段:

<name> -> <ext> <sec> <mtime> <ID> <ref> <comp> <whatis> 

您可以在the technical manual中了解有关实际字段内容的更多信息。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/11128.html,未经允许,请勿转载。