Доступ по FTP до файлов сайта

Автор: Admin | 25.03.2016
4 комментария | 8 010 views

Доступ по 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/

Готово.

Комментарии к посту “Доступ по FTP до файлов сайта

  1. Николай

    Добрый день.
    А как правильно сделать запись в fstab для данного примера?

    1. admin Автор записи

      Запись в fstab для монтирования каталога при загрузке
      /var/www/site /home/newuser/site none defaults,bind 0 0
      Добавил в статью.

  2. Григорий

    Добрый день, при таких настройках можно заливать, перезаливать и модифицировать файлы, но нельзя удалить какой-либо каталог или файл

    1. admin Автор записи

      Приветствую!
      Удаление работает, но только для уже существующих файлов. Но новые файлы и каталоги на самом деле невозможно удалить из-за неверных прав при их создании. Для исправления следует добавить в конфиг строку local_umask=0002 и перезапустить vsftpd. Заработет только для новых файлов. Чтобы дать права к уже существующим, надо повторить шаг 3 для назначения верных прав.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *