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

Казалось бы, что может быть проще, чем добавить пользователя на сервере? Напечатал в консоли команду 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

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

Добавить комментарий

  1. Олег

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

    Ответить