Итак появилась очередная задача, надо было сделать корпоративный ftp сервер на базе Ubuntu.
Поскольку клиенты и разработчики используют один и тот же сервер,
необходимо сделать так, чтобы к разрабатываемым проектам доступ имели
все разработчики, Однако для каждого клиента должен быть свой аккаунт
доступ к которому должен быть только у него. Покопавшись в сети за
основу я выбрал ftp сервер vsftpd. По независимым
тестам данный сервер показывает отличные результаты в производительности
и безопасности, да и как выяснилось при очень богатом функционале
настраивать его совершенно не сложно.
Принципиально существует несколько подходов к установке и настройке ftp серверов:
- Настройка ftp сервера и связка его с MySQL
- Настройка ftp сервера c виртуальными учетными записями
- Настройка ftp сервера и привязка к локальным пользователям
Первый вариант не приемлем из за использования дополнительной технологии, неудобства управления пользователями (придется постоянно копаться в базе), а также громоздской настройки.
Второй вариант это по сути урезок первого, но все равно придется настроить PAM аутентификацию, сгенерировать специальный файл который будет хранить данные о пользователях, устанавливать не очень то нужные пакеты, вобщем в топку его.
Третий вариант пожалуй самый подходящий. Linux имеет очень гибкую систему управления пользователями, а также разграничения прав, дополнительных пакетов и технологий нам не потребуется, только сам vsftpd и локальные пользователи, поэтому именно на этом варианте мы и остановимся. Теперь перейдем непосредственно к практике…
Установка и настройка vsftpd
Vsftpd есть в репозиториях Ubuntu поэтому поставить его проще простого, в консоли набираем:sudo apt-get install vsftpd
Теперь надо заняться конфигом. Чтобы не мучаться я сделал уже готовый конфиг, можете его скачать и заменить файл на своем сервере в /etc/vsftpd.conf.
Особенности конфига: запрещен анонимный доступ, назначен стандартный порт для прослушивания, разрешены локальные пользователи, umask назначен 002 (это значит что все залитые по фтп файлы будут иметь права 664), разрешено изменение прав доступа к файлам по фтп включая рекурсию, пользователям запрещен выход из домашней папки.
Ну все, настройка ftp сервера на этом заканчивается, быстро правда? Теперь займемся пользователями.
Настройка пользователей
Далее лезем в /etc/shells:sudo gedit /etc/shells
В конец добавляем строку:
/bin/false
Сохраняем, закрываем.
Теперь надо создать 2 группы, одна группа (web-users) будет для пользователей, другая (web-developers) для разработчиков
sudo addgroup web-users && sudo addgroup web-developers
Окей, для полноты картины надо бы добавить сервер apache в каждую из созданных групп (по умолчанию apache работает под пользователем www-user):
sudo useradd www-user web-users && sudo useradd www-user web-developers
Добавили. Теперь можно заняться самими пользователями. Создадим папки для будущих пользователей. Для удобства в папке /home я создаю папки для каждой из групп:
sudo mkdir /home/web-developers && sudo mkdir /home/web-users
Теперь предположим что логины наших пользователей – user1, dev1, dev2 создадим папки для пользователей:
sudo mkdir /home/web-users/user1
sudo mkdir /home/web-developers/dev1
sudo mkdir /home/web-developers/dev2
Теперь создадим пользователей а заодно сразу раскидаем их по нужным группам:
sudo useradd user1 -g web-users -p наш-пароль -d /home/web-users/user1 -s /bin/false
sudo useradd dev1 -g web-developers -p наш-пароль -d /home/web-developers/dev1 -s /bin/false
sudo useradd dev2 -g web-developers -p наш-пароль -d /home/web-developers/dev2 -s /bin/false
Замечание: не делайте пароль состоящий только из цифр он не будет работать (если все таки сделали, переназначьте его через команду passwd имя пользователя).
Такая конструкция создаст пользователей которые не смогут авторизоваться в системе, однако смогут использовать ftp сервер как положено.
Теперь назначим пользователей владельцами папок созданных ранее:
sudo chown user1:web-users /home/web-users/user1
sudo chown dev1:web-developers /home/web-developers/dev1
sudo chown dev2:web-developers /home/web-developers/dev2
Предположим, что есть 2 сайта которые лежат в /var/www – site1.com и site2.com первый принадлежит пользователю, а второй находится на разработке у программеров. Чтобы раздать эти сайты необходимо промонтировать их в домашние директории пользователей. Для этого необходимо сначала создать соответствующие папки в домашних папках пользователей, а потом уже примонтировать туда файлы наших сайтов.
sudo mkdir /home/web-users/user1/site1.com
sudo chown user1:web-users /home/web-users/user1/site1.com
sudo mkdir /home/web-developers/dev1/site2.com
sudo chown dev1:web-developers /home/web-developers/dev1/site2.com
sudo mkdir /home/web-developers/dev2/site2.com
sudo chown dev2:web-developers /home/web-developers/dev2/site2.com
Теперь добавляем точку монтирования для каждого из пользователей, для этого правим fstab:
sudo gedit /etc/fstab
Добавляем нужные пути:
/var/www/site1.com /home/web-users/user1/site1.com none bind 0 0
/var/www/site2.com /home/web-developers/dev1/site2.com none bind 0 0
/var/www/site2.com /home/web-developers/dev2/site2.com none bind 0 0
Все, перезагружаемся и радуемся результату.
Выводы: Мы получили довольно быстрый и безопасный ftp сервер. При этом к одному из сайтов назначен общий доступ для группы разработчиков. Куски кода в данной статье выглядят довольно страшно, но это того стоит, ведь мы разобрали пример не для одного, а сразу для 3х пользователей и 2х групп. Дерзайте и все у вас обязательно получится.
Источник
Под 12.04 работает.
ОтветитьУдалитьпод 14.04 - 500 OOPS: priv_sock_get_result
В инете тонна советов, но вдоль другого метода авторизации, который совсем иной, чем тут.
У меня 14.04 - будет работать этот метод или можно не пытаться исходя предыдущего комента?
ОтветитьУдалитькак можно с Вами связаться по email, очень нужен совет по этой теме
ОтветитьУдалить