8.13. Создание системного пользователя

Проблема

Вы хотите знать, как создать системного пользователя для таких программ, как Postfix, Apache или Squid. Для таких программ рекомендуется создать собственные учётные записи пользователей вместо того, чтобы на скорую руку «свалить» их на универсального пользователя nobody.

Решение

Задача может быть решена как командой adduser, так и useradd. Рассмотрим использование команды adduser:

# adduser --system --no-create-home --group squid
Adding system user squid...
Adding new group squid (109).
Adding new user squid (109) with group squid
Not creating home directory

После выполнения этой команды можно проверить результат:

# cat /etc/passwd | grep squid
squid:x:109:109::/home/squid:/bin/false

Хотя подстрока /home/squid присутствует, домашний каталог не создаётся.

Вот как выполнить ту же задачу с использованием useradd:

# useradd -d /dev/null -g squid -s /bin/false squid

Комментарий

Многие демоны и процессы, которым необходима системная учётная запись, по умолчанию используют пользователя nobody, но всё больше приложений требует создания уникальной учётной записи. Это связано с вопросами безопасности: использование универсальной учётной записи nobody может сделать систему уязвимой для атак, поскольку эта учётная запись используется множеством процессов. Поэтому рекомендуется создавать отдельную учётную запись для каждого сервиса, что значительно повышает безопасность системы.

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

Использование /bin/false или /dev/null в качестве оболочки для таких системных пользователей предотвращает их вход в систему напрямую, что также помогает обезопасить сервер.

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

См. также

adduser(8), adduser.conf(5), useradd(8).