Эта статья — часть Большого Мануала по настройке lamp-сервера на debian.
Предыдущая часть цикла — учимся генерировать случайные пароли.
Следующая часть цикла — Cинхронизируем время на сервере.
Сегодня мы будем создавать пользователей в системе, которые позднее будут использоваться для доступа к серверу по ssh/ftp и для редактирования файлов наших сайтов.
Всё происходящее ниже — фундамент безопасности нашего сервера (точнее, сайтов, расположенных на нём, если их несколько).
Мы будем преследовать несколько целей:
1) пользователи не должны иметь возможности подсмотреть файлы друг у друга в домашних каталогах под собой.
2) веб-сервер, запущенный от имени пользователя www-data должен иметь возможность просматривать файлы сайтов, но не должен иметь возможности писать в произвольные файлы в докрутах.
3) работающий chroot по sftp/ftp (chroot для sftp мы уже настроили в статье про openssh-server, а chroot для ftp настроим позднее).
4) если мы запустили сайт от имени пользователя через mpm-itk (такое нужно битриксу, например), то пункт 1 должен соблюдаться.
Погнали.
Начнем с грустного — изначально я не очень правильно составил план статей цикла. Пользователь www-data нам нужен уже сейчас, но чтобы корректно создать его — нужны пакеты с apache2. Можно было бы создать пользователя и группы руками, но проще всё же поставить пакеты и пока забыть про них:
Теперь создадим 2 нужные нам группы пользователей:
Группа secure будет использоваться нами для того, чтобы пользователи не могли смотреть чужие файлы, а группу sftponly мы будем использовать для того, чтобы включать-выключать пользователю chroot в ssh-сервере (и, соответственно, по sftp). Освежите память, прочитайте часть 4 мануала, если не помните о чём я.
Теперь начинаем создавать пользователя. Далее считаем, что пользователя зовут username (заменяйте везде username на желаемое имя пользователя).
Создадим ему домашний каталог (обратите внимание, что домашним каталогом у нас будет /home/username/data, а не /home/username):
Создадим пользователя:
Добавим его в группу secure, чтобы он не мог попасть в домашний каталог другого пользователя:
Пропишем ему пароль:
Настроим права и создадим каталог для сайта.
Каталог /home/username должен быть доступен на запись только руту, чтобы работал chroot() в vsftpd и sftp:
Пользователи, состоящие в группе secure, не должны иметь возможности попасть в домашний каталог пользователя, а сам пользователь и пользователи не состоящие в этой группе (в т.ч. и www-data) — должны. При этом сам пользователь в этом каталоге сможет писать, само собой:
Создадим каталоги для временных файлов веб-сервера и для докрутов наших сайтов:
Все каталоги в домашней директории должны принадлежать нашему пользователю:
Но tmp каталог должен принадлежать и пользователю, и группе www-data:
Ну и под конец запрещаем писать всем, кроме самого пользователя, в каталоги в нашем хомяке:
Но разрешаем писать пользователю+группе www-data в каталог mod-tmp:
Теперь переходим к созданию каталога для нашего будущего сайта. В принципе, пофиг, как назвать этот каталог, но я стараюсь называть их по имени основного домена будущего сайта (пусть будет example.com):
Если вы понимаете, что происходит выше — обязательно соблюдайте порядок команд, иначе у вас ничего не выйдет ;)
И последний штрих. Чтобы пользователь не мог зайти по ssh на сервер + чтобы запретить ему выходить за пределы каталога /home/username по sftp/ftp нужно добавить его в группу sftponly:
Если понадобится снова включить ему ssh, то удалите его из этой группы:
На этом всё.
Привет.
> 2) веб-сервер, запущенный от имени пользователя www-data должен иметь возможность просматривать файлы сайтов, но не должен иметь возможности писать в произвольные файлы в докрутах.
Возможно, вопрос немного нубский, но для OwnCloud или Tiny Tiny RSS такая структура не пойдёт? Сервер, запущенный от пользователя www-data не сможет писать в директорию с сайтом, а там это как раз нужно. Как лучше сделать структуру папок для OwnCloud и Tiny Tiny RSS?
Вроде бы разобрался. Не знаю, правильно или нет…
chown -R username:www-data /home/username/data/www/tt-rss и для owncloud также.
> chown -R username:www-data /home/username/data/www/tt-rss и для owncloud также.
Это вы зря.
Нужно выставить chmod 777 именно на те каталоги, куда движку нужно писать из http-рантайма.
В случае tt-rss это каталоги cache, feed-icons, lock.
В случае owncloud — только каталог с самими файлами.
Остальные каталоги лучше чмодить в 777 только на время обновления движка/плагинов.
Спасибо. :)
Права на корневой каталог сайта взад вернуть не забудьте.
опечятка
root@server:~# chown 705 /home/username/data
В чём опечатка?
а, понял, поправил
inkvizitor68sl, да это тестовый сервер. Но на будущее буду иметь ввиду. Постепенно по вашему большому мануалу планирую научиться настраивать LAMP-сервер. Спасибо за статьи, кстати.
Да не за что.
Скоро дальше постараюсь начать писать.
Здравствуйте, скажите пожалуйста если использовать nginx + apache2-mpm-itk то не получится использовать несколько версии php? для связки с несколькими версиями нужен fastcgi верно? пытаюсь настроить nginx + fpm, цель невозможность одному пользователю добраться до файлов другого, плюс разные версии пхп как думаете я на верном пути?
> Здравствуйте, скажите пожалуйста если использовать nginx + apache2-mpm-itk то не получится использовать несколько версии php?
Да.
> как думаете я на верном пути?
На верном, но геморройном.
В Stretch: apt-get install apache2 libapache2-mpm-itk