SFTP удобное и безопасное подключение к файлам ресурса используя ssh. Инструкцию можно использовать для любых систем Linux. Отличие только в командах на перезапуск сервисов Nginx, Php-fpm, SSH и путях к файлам настройки.
Содержание:
Введение
Ранее я использовал для работы с файлами сайтов программу ProFTP, но отказался в пользу SFTP из за более стабильной работы и простоты настройки. Настройка показана на примере CentOS 7.
С статье на сайте можете узнать про настройку доступа по FTP к сайтам на сервере VDS под управлением CentOS 7 используя программу ProFTPd. Создание файловой базы пользователей для авторизации с правами от Nginx. Подключение с использованием сертификата для TLS.
Добавление пользователя
Создадим пользователя которому дадим права на файлы ресурса. Удобно использовать имя пользователя пересекающееся с названием сайта.
В нашем случае мы настраиваем доступ к сайту sevo44.ru. Добавим пользователя с нужными параметрами и создадим ему пароль:
useradd -s /sbin/nologin sevo44.ru passwd sevo44.ru
Добавляем пользователя nginx в группу sevo44.ru.
usermod -aG sevo44.ru nginx
Настройка SSH для SFTP
Открываем конфигурационный файл ssh находящийся по пути /etc/ssh/sshd_config. Комментируем один параметр и добавим необходимый код:
vim /etc/ssh/sshd_config = необходимые изменения и добавления = # Закоментируем параметр #Subsystem sftp /usr/lib64/misc/sftp-server # Для работы sftp Subsystem sftp internal-sftp # Для sevo44.ru Match User sevo44.ru X11Forwarding no AllowTcpForwarding no AllowAgentForwarding no PermitTunnel no ForceCommand internal-sftp ChrootDirectory /var/www/sevo44.ru # /sevo44.ru
Перезапускаем службу sshd:
systemctl restart sshd
Доступ к файлам ресурса уже есть и можно подключатся, но могут возникнуть проблемы с правами. Ниже я расскажу как избежать проблем связанных с правами на файлы.
Настройка прав на данные
Назначаем владельцем содержимого сайта пользователя которого мы создали выше:
chown -R sevo44.ru:sevo44.ru /var/www/sevo44.ru/
Возвращаем обратно рута владельцем корня chroot:
chown root. /var/www/sevo44.ru/ chown root. /var/www/sevo44.ru/log/
Внимание! Сначала мы рекурсивно назначаем права на все содержимое директорий, а потом возвращаем владельца root на корень сайта.
Все папки в пути /var/www/sevo44.ru/ должны быть пользователя root!
Только в таком варианте все будет корректно работать!
Для безопасности запретим пользователю редактировать папку log.
Редактирование будет возможно только в папке WWW где находятся все файлы сайта!
Перед выполнением следующего этапа лучше проверить подключение. В случае проблем с подключением смотрим лог выведя последние 10 строчек:
tail -n 10 /var/log/secure
Настройка Logrotate для сайтов
Для просмотра логом сайтов используя подключение по sftp необходимо создать файл со следующим кодом (на основе скопированного файла nginx):
cp /etc/logrotate.d/nginx /etc/logrotate.d/site vim /etc/logrotate.d/site = необходимый код = /var/www/sevo44.ru/log/*.log { daily missingok rotate 15 compress delaycompress notifempty #create 640 nginx adm sharedscripts postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript }
Сохраним и применим изменения без перезагрузки:
logrotate /etc/logrotate.conf
Настройка PHP-FPM
Создадим отдельный pool для php-fpm, который будет обслуживать сайт sevo44.ru. Использование отдельного пула для сайта так же может быть обусловлено специфическими настройками для ресурса. Удобно когда для каждого сайта используется независимый пул в котором можно выставить необходимые значения. Переходим в нужную папку, копируем существующий конфигурационный файл и делаем необходимые изменения:
cd /etc/php-fpm.d/ cp www.conf sevo44.ru.conf
vim /etc/php-fpm.d/sevo44.ru.conf = необходимые параметры = [sevo44.ru] user = sevo44.ru group = sevo44.ru listen = /run/php-fpm/php-fpm-sevo44.sock listen.owner = sevo44.ru listen.group = sevo44.ru pm = dynamic pm.max_children = 20 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3
Осталось указать нужный параметр в настройки хоста для nginx.
Откроем необходимый файл и внесём необходимую настройку:
vim /etc/nginx/conf.d/sevo44.ru.conf = необходимый параметр = fastcgi_pass unix:/run/php-fpm/php-fpm-sevo44.sock;
Проверим правильность настройки Nginx и перезагрузим необходимые сервисы:
nginx -t systemctl reload nginx systemctl restart php-fpm
Детальнейшую работу с файлами, для избежания проблем с правами на файлы, лучше осуществлять используя программу для подключения по SFTP.
Заключение
В результате настроек мы получаем защищённый и удобный доступ для работы с файлами ресурса. Для работы я использую программу FileZilla. Кроме того, из статьи RSA или авторизация SSH по ключу вы можете узнать как используя программу FileZilla можно подключатся по файлу с ключом расширения ppk.
А если у меня один сайт на сервере, я могу назначить владельцем папки с сайтом пользователя nginx и заходить по sftp из под него?
Теоретически возможно. Вероятно придется делать какие то настройки пользователю nginx. Для надежности я бы не стал это делать. Использую способ указанный в статье SFTP настройка для веб хостинга.
Cпасибо, с SFTP разобрался. Получается подключиться с созданного пользователя. Залил файлы сайта. Но получаю ошибку 403 при попытке открыть сайт. Не могу понять почему. Права на папку 755, на файлы 644. Пользователя nginx добавил в паку пользователя sftp, как указано в инструкции. Конфиг по-умолчанию работает нормально, то есть файлы c дефолтного расположения /usr/share/nginx/html отдаёт. А из папки сайта не хочет. Хотя права одинаковые что там, что там, 755. ((
Единственное, я не прописывал пользователя SFTP в конфиге php-fpm. Там у меня пользователь и группа nginx указаны. Может в этом дело…
Именно в этом и дело 🙂
А нет случаем статьи заменяем сервер active directory на calculate linux? В связи с планируемым переходом в гос. секторе на Российское п.о. это статья помогла бы очень многим. Уже какой день бьюсь что бы настроить тестовую станцию на calculate со всеми возможностями но дело идёт туго 😀