TheСправочник по системному администрированию UNIX и Linuxговорит:
man поддерживает кэш отформатированных страниц в /var/cache/man или /usr/share/man, если соответствующие каталоги доступны для записи; однако это риск безопасности. Большинство систем предварительно форматируют страницы man один раз во время установки (см. catman) или не форматируют вообще.
В чем здесь «риск(и) безопасности»?
Существует очевидный риск безопасности, что кто-то может изменить страницы руководства, чтобы обмануть (новичка) пользователя и заставить его запустить что-то нежелательное, как указаноУльрих Шварц в своем ответе, но я ищу другие способы использования этого. Спасибо!
решение1
Небезопасно позволять пользователям манипулировать содержимым страниц руководства (или любыми данными), которые также будут использоваться другими пользователями, поскольку существует опасностьотравление кэша. Как гласит старая шутка BOFH:
Чтобы узнать все о своей системе, от корня и до самого верха, используйте команду «read manual» с переключателем «read faster» следующим образом:
rm -rf /
(Чтобы было ясно,не(Запустите эту команду.) Но если я контролирую кэш страницы руководства, вы можете ввести, man rm
чтобы увидеть кэшированную поддельную страницу руководства, которая сообщает вам, rm
что это действительно «rm - read manual», а не «rm - remove files or directorys». Или дажевыходные управляющие последовательности терминала, которые внедряют код в вашу оболочку.
решение2
Предположим, что рассматриваемая система — это веб-сервер. Допустим также, что администратор сервера делает некоторое программное обеспечение, установленное в системе, доступным для широкой публики (или корпоративной интрасети) через веб-страницу. Это может быть что-то простое, например, программа для изменения размера изображения, калькулятор или словарь.
Если бы при установке программного обеспечения с ним были связаны страницы руководства, то администратор, будучи добрым и внимательным человеком, мог бы решить, что предоставление этих страниц руководства пользователям веб-сервиса также было бы хорошей идеей.
Итак, значок «Справка» на веб-странице запускает скрипт, который захватывает один или несколько —кэшированный— страницы руководства и отправляет их в браузер пользователя.
Любой человек или код, имеющие права записи в каталог кэша, могут изменять эти файлы следующим образом:
- внедрить произвольный Javascript, который будет выполнен при посещении браузеров пользователя
- собирать телеметрические данные от всех посещающих пользователей и направлять их в некое хранилище для последующей обработки/профилирования
- собрать учетные данные аутентификации — возможно, даже учетные данные привилегированного пользователя системы (например, администратора)
Каждый из вышеперечисленных пунктов может быть использован многими, многими способами любым человеком с воображением и свободными моральными принципами/этикой.
решение3
Всякий раз, когда каталог делается доступным для глобальной записи, создается уязвимость безопасности. Игнорируя то, каково предполагаемое назначение каталога и как его можно подорвать, просто сделать его доступным для записи — это проблема.
Вот несколько возможных проблем, не связанных с функционированием каталога:
- Если в файловой системе нет других каталогов, доступных для записи пользователю, это предоставит любому пользователю возможность использовать пространство в этой файловой системе, которое он не мог бы использовать в противном случае.
- Любой пользователь может сохранять файлы в каталоге, заполняя файловую систему и вызывая атаку типа «отказ в обслуживании». Если это та же файловая система, что и /var/log, это может помешать записи журналов
- Файлы могут быть скрыты в этом каталоге, за пределами ожидаемых мест. Они могут сохраняться после удаления учетной записи, и если файловая система загадочным образом заполнена, их может быть трудно найти
- Если файлы или каталоги создаются с тем же именем, что и будущие кэшированные файлы, это может помешать правильному функционированию предполагаемого использования каталога (даже если содержимое этих файлов само по себе не является вредоносным). Настройка разрешений для этих файлов может затруднить автоматическое исправление.
решение4
Большинство современных дистрибутивов предварительно кэшируют man-страницы (обрабатывая с помощью troff) при установке соответствующего пакета. Это не проблема.
Проблема возникает, когда исходные файлы man присутствуют, но кэш пуст (т. е. файлы кэша не были предварительно сгенерированы).
Есть два способа справиться с этой проблемой:
- Запустите страницу руководства через troffкаждый разкак пользователь
- Запустите страницу руководства через troff один раз, каккореньи сохранить в каталог кэша
Для запуска от имени root man необходимо иметь setuid. Если бы были какие-либо уязвимости безопасности вчто-либонапример, при анализе командной строки злоумышленник может получить повышенные привилегии
Вот соответствующий источник:https://git.savannah.gnu.org/cgit/man-db.git/tree/src/man.c
К счастью, все основные дистрибутивы теперь предварительно кэшируют страницы руководства, так что беспокоиться не о чем.