При необходимости демоны должны корректно обрабатывать появление сигналов SIGTERM и SIGHUP; первый должен приводить к штатному завершению программы, тогда как второй должен служить уведомлением о том, что демону следует заново себя инициализировать, еще раз прочитать конфигурационный файл и повторно открыть любые журнальные файлы, которые он может использовать.

Система syslog предоставляет демонам (и другим приложениям) удобный способ записывать ошибки и прочие сообщения в единый журнал. Эти сообщения обрабатываются демоном syslogd, который распределяет их в соответствии с содержимым конфигурационного файла syslogd.conf. Они могут быть направлены разным адресатам, таким как терминалы, файлы на диске, пользователи, находящиеся в системе, и другие процессы на удаленных компьютерах (которые обычно являются другими демонами syslogd), связь с которыми поддерживается по сети TCP/IP.

Дополнительная информация

Вероятно, лучшим источником информации о написании демонов являются их исходные коды.

37.7. Упражнение

37.1. Напишите программу (похожую на logger(1)), которая записывает произвольные сообщения в системный журнал, используя вызов syslog(3). Помимо аргумента командной строки, содержащего само сообщение, эта программа должна позволять указывать его приоритет (level).

<p>38. Написание безопасных программ с повышенными привилегиями</p>

Привилегированные программы имеют доступ к возможностям и ресурсам (файлам, устройствам и т. д.), недоступным обычным пользователям. Программа может получить повышенные привилегии двумя основными способами.

• Программа была запущена от имени привилегированного пользователя. К этой категории относятся многие демоны и сетевые серверы, которые обычно выполняются от имени администратора.

• Программе был установлен бит доступа с пользовательским или групповым идентификатором. При запуске такие программы меняют действующий идентификатор пользователя (группы) на тот, который имеет владелец (группа) исполняемого файла (впервые программы, устанавливающие идентификаторы пользователя и группы были описаны в разделе 9.3). В этой главе мы рассмотрим программы, которые устанавливают идентификатор администратора (root) и выдают процессу повышенные привилегии.

Если привилегированная программа содержит ошибки или может быть использована злоумышленником, это означает, что безопасность системы или приложения может быть нарушена. Учитывая это, мы должны писать программы таким образом, чтобы минимизировать вероятность потенциального взлома и ущерб, если он все же произойдет. Именно на этих темах мы и сосредоточимся в данной главе. Вы получите целый ряд рекомендаций по написанию безопасного кода и узнаете о различных подводных камнях, которых следует избегать при создании привилегированных программ.

38.1. Нужно ли программе устанавливать идентификаторы пользователя или группы?

Один из лучших советов касательно программ, устанавливающих идентификаторы пользователя (UID) или группы (GID), заключается в том, что их лучше не писать. Если существует возможность выполнить задачу без получения повышенных привилегий, мы должны рассматривать ее в первую очередь, поскольку это позволяет избежать потенциальной угрозы безопасности.

Иногда функциональность, требующую повышенных привилегий, можно изолировать и вынести в отдельную программу, которая выполняет одно единственное действие и при необходимости может быть запущена в дочернем процессе. Такой подход может быть особенно полезен в случае с библиотеками. Одним из примеров является программа pt_chown, описанная в подразделе 60.2.2.

Даже в случаях, когда установка идентификаторов пользователя или группы является необходимой, не всегда обязательно выдавать процессу привилегии администратора. Если программе подходят учетные данные с меньшими возможностями, вы должны отдавать предпочтение именно им, поскольку наличие прав администатора потенциально чревато нарушением безопасности.

Возьмем для примера приложение, которое должно предоставить пользователям возможность обновить файл, прав на запись которого они не имеют. Наиболее безопасным способом это сделать является создание отдельной групповой учетной записи (идентификатора группы) специально для этой программы и назначение этой группы соответствующему файлу (так, чтобы участники группы могли его записывать); после этого можно написать программу, которая будет устанавливать действующий идентификатор этой группы. Поскольку данная группа не имеет никаких других привилегий, это ограничивает потенциальный ущерб на случай, если программа содержит ошибки или может быть использована злоумышленником.

38.2. Работайте с минимальными привилегиями
Перейти на страницу:

Похожие книги