Среда, 18.10.2017, 14:16
Приветствую Вас Гость | RSS

Каталог статей

Главная » 2014 » Декабрь » 12 » FTP сервер на базе Ubuntu за 15 минут
12:03
FTP сервер на базе Ubuntu за 15 минут

Итак появилась очередная задача, надо было сделать корпоративный 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х групп. Дерзайте и все у вас обязательно получится :)

UPDATE:

Иногда после проделывания всех вышеуказанных действий подключиться к ftp все еще не представляется возможным. Просто пишет login incorrect и все тут. Для того чтобы все заработало меняем для пользователя пароль на любой другой (или даже на такой же) выполнив команду sudo passwd имя пользователя. После смены пароля все заработает в штатном режиме.

==============

не хотел вп обновляться
сделал следующее ( в /etc/vsftpd.conf. заменил local_umask=002 на 077, может и зря - не помогло)
потом это сделал и помогло: chown -R user1 /var/www

Категория: Linux | Просмотров: 519 | Добавил: Kerio | Теги: ubuntu, ftp | Рейтинг: 3.3/6

Для борьбы со спамом установлена новая форма комментариев. Для комментирования войдите под одним из ваших аккаунтов в Disqus, Twitter, Facebook или Google+

Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Яндекс.Метрика
Реклама