Почему в файле / etc / passwd есть запись man

23

Я заметил, что в моем /etc/passwdфайле есть запись для пользователя man . Какова цель этого пользователя?

man:x:6:12:man:/var/cache/man:/bin/sh
Думитру
источник

Ответы:

31

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ней по-прежнему являются корневыми.

Но почему вообще 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> 

Вы можете прочитать больше о фактическом содержании поля в техническом руководстве .

Оли
источник
3
Может быть, вы могли бы добавить объяснение, почему этот сервис (и многие другие) имеют своего собственного пользователя, а не просто запускаются от имени пользователя root или что-то в этом роде?
Томас Падрон-Маккарти
@ ThomasPadron-McCarthy Достаточно тщательно?
Оли
Это отлично!
Томас Падрон-Маккарти