Создаём пользователей для веб-сервера

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

Создаём пользователей для веб-сервера

Затем, вручную, приходится создавать папки. Например, одну для сайта. Другую — для временных файлов, чтобы не бросать их в общий /tmp в целях защиты. Ещё одну — для сессий, если не настроено кэширование в Redis. А ещё же нужно скопировать нужные файлы настроек, типа публичного ssh ключа для аутентификации.

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

Первичные настройки, определяемые при использовании команды adduser, берутся из файла /etc/adduser.conf.

Изменяем домашнюю папку

Изначально домашние папки всех пользователей размещаются в разделе /home. Но мы можем заранее переопределить местоположение, используя любую другую папку, например /var/www. Для этого отредактируем параметр DHOME.

DHOME=/var/www

Следует обратить внимание на параметр SKEL=/etc/skel. Он определяет, откуда будут скопированы файлы настроек и папки для каждого конкретного пользователя. Наверняка вы видели в папках пользователей своего сервера файлы .profile.bashrc. Они как раз скопированы из этого источника. :)

Добавление пользователей в единую группу

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

Когда создаётся юзер для размещения сайтов, право на редактирование/удаление файлов должно принадлежать только ему. Веб-сервер, будь то nginx или apache, должны запускаться от имени другого пользователя, которому доступно только чтение файлов. Остальные же пользователи никаких прав иметь не должны.

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

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

В файле adduser.conf нам нужно сначала отключить создание одноимённой группы при создании пользователя.

USERGROUPS=no

А, затем, указать ID группы www-data.

USERS_GID=33

Как правило, идентификатор равен 33. Но следует перепроверить командой, запускаемой от root: id www-data.

И последний параметр, изменяемый в этом конфигурационном файле:

DIR_MODE=0710

Он определяет права на домашнюю папку пользователя /var/www/username. Тут мы разрешаем все действия владельцу файлов, только исполнение для группы и не даём никаких прав всем остальным.

Права для конкретного пользователя и дополнительные файлы

Теперь нам нужно продолжить выдачу корректных прав, но уже в рамках одного пользователя. Чтобы при создании файлов и папок им сразу присваивались нужные права, отредактируем соответствующим образом параметр umask в файлах .bashrc и .profile.

umask 027

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

А для файлов 0640: чтение/изменение для владельца и только чтение для группы. Рекомендую самостоятельно изучить статью о правах доступа в Linux.

Также не забываем в каталоге /etc/skel обновить права на существующие файлы и папки командой chmod.

В завершение создаём дополнительные папки: для сайтов, временных файлов, сессий и т.д. Файл authorized_keys с вашим публичным ключом к ssh нужно расположить в папке .ssh пользователя. В итоге структура будет выглядеть примерно так:

/etc/skel   -.ssh/   --authorized_keys   -sessions/   -tmp/   -www/   -.bashrc   -.profile

Всё это будет скопировано в домашний каталог пользователя при его создании.