为什么man有自己的用户?

为什么man有自己的用户?

我只是好奇为什么man有自己的用户。

$ grep man /etc/passwd
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin

我正在使用 Debian Buster。

答案1

man(至少,实施的版本man-db)可以用它自己的用户来设置,以便它的“缓存”(包括索引,如所使用的例如by whatis) 可以由该用户(而不是 )拥有和更新root

此外,man可以为该用户设置uid,允许其写入其缓存目录,而不需要用户的特定权限:

$ ls -ld /var/cache/man /usr/bin/man
-rwsr-sr-x  1 man man 115600 Feb 19  2021 /usr/bin/man
drwxr-xr-x 31 man man   4096 Nov 23 00:00 /var/cache/man

上面显示man二进制文件是 setuid 和 setgid man,以及manowns /var/cache/man

在 Debian 衍生版本中,可以使用sudo dpkg-reconfigure man-db.给出的解释是

man 和 mandb 程序可以通过设置 set-user-id 位来安装,这样它们将以“man”用户的权限运行。这使得普通用户可以从预格式化手册页(“cat 页面”)的缓存中受益,这可能有助于提高较慢机器上的性能。

缓存手册页仅在您使用 80 列终端时才有效,以避免某个用户导致 cat 页面保存在对其他用户不方便的宽度。如果您使用宽终端,则可以通过设置 MANWIDTH=80 强制将手册页格式化为 80 列。

启用此功能可能存在安全风险,因此默认情况下处于禁用状态。如果有疑问,您应该将其禁用。

“猫页面”现在没有用处,因此配置不支持它们的系统不会导致任何问题。也可以支持 cat 页面,但不允许任意用户创建它们,因此需要man用户和 setuid 二进制文件;各种 Unix 系统曾经被设置为定期生成全部缺少猫页面(参见catman)。

即使没有 setuid manman用户也可以用于man相关的 cron 作业(whatis索引等)。

相关内容