Доступ по FTP до файлов сайта
Писал намедни инструкцию для предоставления доступа при помощи FTP до файлов сайта, расположенных на своем Linux сервере, а не на хостинге с админкой управления. Решил выложить, дабы самому не вспоминать.
Кратко: поставить и настроить FTP сервер, создать пользователя, сбиндить каталог сайта в каталог пользователя, назначить права.
Подробнее:
0. Поставить и настроить vsftpd:
apt-get install vsftpd
Заполнить файл /etc/vsftpd.conf
следующим содержимым:
listen=YES # Разрешить вход для зарегистрированных в системе пользователей local_enable=YES # Зачрутить (запереть) пользователя в своем домашнем каталоге chroot_local_user=YES # проверка на наличие шелла пользователя (из /etc/passwd) в файле /etc/shells check_shell=NO # Разрешить закачку файлов write_enable=YES # Включить логирование uploads/downloads файлов xferlog_enable=YES # Использовать порт 20 для передачи данных connect_from_port_20=YES # Изменить владельца закачанных файлов на указанного chown_uploads=YES chown_username=nobody # закрыть доступ к файлам, подходящим под следующий шаблон (если есть необходимость) #deny_file={mod_order.*,configuration.php}
Перезапустить демон
service vsftpd restart
1. Создать пользователя
Создать пользователя newuser
в домашний каталог которого будет монтироваться каталог сайта:
adduser newuser
2. Создать каталог для монтирования файлов сайта
Монтируется только потому, что для FTP не работают симлинки:
mkdir /home/newuser/site mount --bind /var/www/site /home/newuser/site
Теперь в /home/newuser/site
появились файлы лежащие в /var/www/site
.
Они там будут до перезагрузки сервера. Специально не настраиваю автоматическое монтирование 1) по соображению безопасности 2) во избежание проблем загрузки системы при отключении питания. По желанию можно сделать запись в fstab, если это необходимо.
Запись в fstab
для монтирования каталога при загрузке:
/var/www/site /home/newuser/site none defaults,bind 0 0
ВНИМАНИЕ. Это не копия файлов. Это реальные файлы сайта. Перед тем как дать доступ подрядчикам, обязательно стОит сделать бэкап. Поэтому и все изменения в них будут видны на сайте сразу.
3. Назначить права
Дать права пользователю вебсервера и группе пользователя на файлы и каталоги сайта, чтобы он мог их скачивать, менять и заливать обратно.
chown www-data:newuser /var/www/site/ -R find /var/www/site -type d -exec chmod 775 {} \; find /var/www/site -type f -exec chmod 664 {} \;
Убрать права на чтение configuration.php, conf, config и других файлов или каталогов, хранящих в себе настройки CMS. Дабы подрядчик не мог узнать пароли от базы сайта и прочие настройки. Пример только для configuration.php:
chown www-data:www-data /var/www/site/configuration.php chmod 600 /var/www/site/configuration.php
4. Запретить писать в корень домашнего каталога
Иначе пользователь не сможет зайти по FTP и клиент выдаст ошибку 500 OOPS: vsftpd: refusing to run with writable root inside chroot
:
chmod a-w /home/newuser/
Готово.
Добрый день.
А как правильно сделать запись в fstab для данного примера?
Запись в fstab для монтирования каталога при загрузке
/var/www/site /home/newuser/site none defaults,bind 0 0
Добавил в статью.
Добрый день, при таких настройках можно заливать, перезаливать и модифицировать файлы, но нельзя удалить какой-либо каталог или файл
Приветствую!
Удаление работает, но только для уже существующих файлов. Но новые файлы и каталоги на самом деле невозможно удалить из-за неверных прав при их создании. Для исправления следует добавить в конфиг строку
local_umask=0002
и перезапустить vsftpd. Заработет только для новых файлов. Чтобы дать права к уже существующим, надо повторить шаг 3 для назначения верных прав.