Ответы:
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>
Вы можете прочитать больше о фактическом содержании поля в техническом руководстве .