Man

為什麼人有自己的使用者?

  • November 23, 2021

我只是好奇為什麼man有自己的使用者。

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

我正在使用 Debian Buster。

man(至少,在 中實現的版本man-db)可以由它自己的使用者設置,以便它的“記憶體”(包括索引,例如由使用whatis)可以由該使用者擁有和更新(而不是root)。

此外,man可以為該使用者設置 setuid,允許它寫入其記憶體目錄而無需使用者的特定權限:

$ 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,並且man擁有/var/cache/man

在 Debian 衍生產品中,可以使用sudo dpkg-reconfigure man-db. 那裡給出的解釋是

man 和 mandb 程序可以在設置 set-user-id 位的情況下安裝,以便它們以“man”使用者的權限執行。這允許普通使用者從預格式化的手冊頁(‘cat pages’)的記憶體中受益,這可能有助於較慢機器的性能。

記憶體手冊頁僅在您使用 80 列終端時才有效,以避免一個使用者導致 cat 頁面以不方便其他使用者的寬度保存。如果您使用寬終端,則可以通過設置 MANWIDTH=80 來強制將手冊頁格式化為 80 列。

啟用此功能可能存在安全風險,因此預設情況下將其禁用。如有疑問,您應該將其禁用。

“cat pages”現在已經沒有用了,所以在不支持它們的情況下配置系統不會導致任何問題。也可以支持 cat 頁面,不允許任意使用者創建它們,因此需要man使用者和 setuid 二進製文件;過去設置了各種 Unix 系統,以便它們定期生成所有失去的 cat 頁面(請參閱 參考資料catman)。

即使沒有 setuid manman使用者也可以用於man相關的 cron 作業(whatis索引等)。

引用自:https://unix.stackexchange.com/questions/678664