Debian → Настройка FTP сервера vsFTPd на Debian/Ubuntu
FTP очень полезная вещь, он позволяет легко подключаться к удаленному серверу, для загрузки или скачивания данных.
Со всеми недостатками и изъянами в безопасности, FTP должен был отойти на второй план, как и протокол telnet, однако у него оказалось намного больше преимуществ, по этому он используется по сей день и довольно успешно. К нему появилось довольно много модификаций, которые позволяют например: заворачивать трафик в SSL/TLS для повышения безопасности переделываемых по сети данных, как это сделать можно ознакомиться в статье- Настрока ProFTPd для использования TLS Но на этот раз не о Proftpd.
Данная статья была вынесена в отдельный топик, для того чтобы ее было проще найти на сайте. Раньше она находилась в статье по настройке Nginx+Apache, но думаю что она будет намного полезнее в качетсве самостоятельного материала.
Переходим в режим супер пользователя root:
Для Debian:
Нашей основной задачей является блокирование пользователя внутри своей домашней директории, для того, чтобы не допустить его переход в папки «соседей» по серверу. Для этого мы немного подредактируем конфигурационный файл vsftpd.conf.
Находим и редактируем следующие строчки:
ascii_upload_enable=YES ascii_download_enable=YES
напишем свой баннер для входа, хотя он и не обязателен( на работу он не влияет):
ftpd_banner=Welcome to our FTP service
Запираем пользователей в домашних директориях:
ну под данной записью добавим:
allow_writeable_chroot=YES
Разрешаем вход локальным пользователям:
Запрещаем анонимный доступ, необходимо найти строку:
Ну и добавим работу в пассивном режиме:
pasv_min_port=50000 pasv_max_port=60000
Поддержка IPv6 в vsFTPd
Для того чтобы добавить возможность работы с ip версии 6, то в конфигурационном файле находим строку:
И снять с нее комментарий.
После этого, наш FTP сервер будет доступен по IPv4 и IPv6
Права доступа на файлы и директории
Параметр local_umask отвечает за то, какие права будут присвоены файлам, которые были закачаны через FTP, по умолчанию там установлено local_umask=022, маска расчитывается очень просто, по формуле 777-A=X
Где:
777-права полного доступа
А-права которые необходимо получить
Х-маска, которую необходимо выставить
Предположим, нам необходимо получить права 754 что соотвествует drwxr-xr—, тогда 777-754=23 получается local_umask=023.
В любом случае, тот кто закачал файлы является их владельцем и может расширить права доступа к ним.
В общем, находим строку:
И меняем 022 на 023 или на ту которая необходима в вашей ситуации:
Авторизация vsftpd и /bin/false
Для обеспечения безопасности сервера, пользователям виртуальных хостов будет отключен шелл, как пишут на просторах интернетов, рекомендуется это делать следующим способом:
useradd username -b /home -m -U -s /bin/false
Рассмотрим это выражение более подробно.
Где:
username -имя пользователя(логин)
home-Директория где будет находиться его домашний каталог
ключ -m — указывает на то, что его домашней директории будет присвоено название которое было указано в username.
ключ -U -Указывает на то что необходимо создать одноименную группу.
-s /bin/false -что пользователю будет отключен шелл (это важный и тонкий момент!)
Назначение остальных ключей можно нагуглить за пару минут.
Если пользователю отключить шелл, то он не сможет залогиниться на FTP сервер, его будет просто отфутболивать.
Вдумчивое чтение документации по vsFTPd рассказало мне, что доступ к FTP могут получить пользователи которые имеют работоспособный шелл т.е. /bin/bash, для того чтобы пользователи с /bin/false могли авторизироваться на нашем ftp, нам необходимо отредактировать файл /etc/pam.d/vsftpd
Найти и закоментировать строку (она самая последняя)
auth required pam_shells.so
#auth required pam_shells.so
И перезапускаем vsftpd
И еще немного для общего развития- Пользователь с отключенным шеллом, не сможет подключиться по SSH! Это можно считать дополнительным плюсом к безопастности.
Как отключить шелл уже существующему в системе пользователю:
там находим нужного пользователя и /bin/bash меняем на /bin/false, после перезагрузки, изменения переменятся.
На этом можно закончить.
Чтобы устранить проблему с настройкой vsFTPd на Ubuntu 12.04, воспользуйтесь заметкой: Ремонтируем vsFTPd в Ubuntu 12.04
62 комментария
А у меня такая проблема с Proftpd, когда кто-то что загружает или скачивает, то оперативная память исчезает со скоростью передачей данных файлов, вот скриншот с чем это может быть связанно?
Это буфферизируемая память, поставьте пакет htop чем top, он выдает более развернутую информацию, вам все станет ясно+ у него есть отличная справка-какой параметр что показывает.
Таже петрушка наблюдается при работе Samba при закачке на него больших файлов, отжерается ОЗУ ровно по размеру файла который был закачан на сервер. Так что, это не проблема.
я не понял вопроса. Он непосредственно принимает файл и пишет его на диск.
На это просто не нужно обращать внимания, утечки памяти там нет, память сама освободится-не волнуйтесь.
Она выделяется системой и не контролируется proftpd да и не имеет смысла, просто не напрягайтесь, она как заполнилась так и освободилась…
для отключения шела по ssh можно еще в /etc/ssh/sshd_config добавить запись DeniGroups groupname например и команда чуть изменится useradd username -b /home/ -m -g groupname -s /bin/false
Всем доброго времени суток! Подскажите где можно почитать или опишите тут как настроить ФТП таким образом:
user1 видит 3 папки с 1 может только качать во 2 только скидывать и в 3 делать все что угодно кроме запуска файлов;
user2 видит все папки user1 и может делать там все что угодно
Заранее спасибо!
FTP не поддерживает удаленный запуск приложений, как например smb, по эту препятствовать запуску приложений на клиентском ПК вы не сможете т.к. у него стоит доступ на чтение, а значит пользователь может забрать файл себе и запустить!
Создаем группу, для примера назовем ее poweruser в нее добавляем пользователей user1 и user2
Создадим 3 папки, назовем их folder1 folder2 folder3 и сделаем их владельцем пользователя user2
расставим на них права доступа folder1 владелец RWX группа poweruser R__ остальные ___
переходим к folder2 владелец RWX группа poweruser _W_ остальные ___
и folder3 владелец RWX группа poweruser RW_ остальные ___
Чмоды посчитаете сами!
После этого создаем маску для создаваемых файлов, о том как ее рассчитать написано в статье, и пользуетесь.
useradd username -b /home/ -m -U -s /bin/false
ключ не правильный у вас, должен быть -d
-b, --base-dir BASE_DIR base directory for the home directory of the new account -c, --comment COMMENT GECOS field of the new account -d, --home-dir HOME_DIR home directory of the new account -D, --defaults print or change default useradd configuration -e, --expiredate EXPIRE_DATE expiration date of the new account -f, --inactive INACTIVE password inactivity period of the new account -g, --gid GROUP name or ID of the primary group of the new account -G, --groups GROUPS list of supplementary groups of the new account -h, --help display this help message and exit -k, --skel SKEL_DIR use this alternative skeleton directory -K, --key KEY=VALUE override /etc/login.defs defaults -l, --no-log-init do not add the user to the lastlog and faillog databases -m, --create-home create the user's home directory -M, --no-create-home do not create the user's home directory -N, --no-user-group do not create a group with the same name as the user -o, --non-unique allow to create users with duplicate (non-unique) UID -p, --password PASSWORD encrypted password of the new account -r, --system create a system account -s, --shell SHELL login shell of the new account -u, --uid UID user ID of the new account -U, --user-group create a group with the same name as the user -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user mapping
Наверно я просто не так уж и понял что вы хотели сказать под «Директория где будет находиться его домашний каталог» (я понял как в папке (директория) /home/ будут его файлы(каталог), что с ключом -b не верно. Просто не привычно когда одно и то же в одном приложении называют двумя разными словами. Простите.
Я так и не понял, что вы хотели сказать 🙂
Сама идея чтобы домашняя директория пользователя создавалась в директории /home автоматически
При попытке залить что-нибудь в домашнюю категорию — все ок, при попытки в другую — начинаются проблемы:
Команда: TYPE A
Ответ: 200 Switching to ASCII mode.
Команда: PASV
Ответ: 227 Entering Passive Mode (46,4,196,249,222,199).
Команда: STOR config.php
Ответ: 553 Could not create file.
chroot отключен: chroot_local_user=NO
В чем может быть проблема?
Спасибо 🙂
Решил проблему через chmod 777 /home/beta и такие же права на подпапку www. С любыми другими правами подпапки была ошибка:
Статус: Получение списка каталогов…
Команда: CWD /home/beta
Ответ: 250 Directory successfully changed.
Команда: CWD www
Ответ: 550 Failed to change directory.
Ошибка: Не могу получить список каталогов!
Это конечно как-то неправильно, но ftp буду пользоваться редко => редко буду и включать 777 права.
Так прав 777 и не должно быть, их необходимо предоставлять ТОЛЬКО на отдельные директории, в целях безопасности.
Права необходимо выставлять только те- которые достаточны для работы, а это права на чтение, а на запись только на определенные директории.
Принцип очень простой-запретить все, разрешить только то, что необходимо и не более…
Добрый день.
Вроде сделал все так как здесь написано, но при попытке подключиться пользователь видит сообщение:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Не могу понять как закрыть пользователя в домашнем каталоге? Если снимаю параметр chroot_local_user=YES, то пользователь может смотреть все директории, если ставлю параметр, то 500-ая ошибка.
на самом деле очень странно, такое решение.
Нужно будет пересмотреть документацию и подправить статью.
Да, подтверждаю слова , в /etc/vsftpd.conf строчка chroot_local_user=YES раскомментирована, при попытке подлкючиться спрашивает логин/пароль, все принимает и выдает
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Похоже, за решением надо отправляться в гугл, если эта проблема присутствует у всех =)
Не лучшее решение — добавил эту строчку, теперь вообще подключиться невозможно — даже до этапа запроса логина/пароля не доходит, а сразу «Не удалось соединиться».
Зарегистрировался что бы сказать:
Спасибо! Огромнейшее спасибо.
Использовал кучу мануалов, но все как то коряво работало и shell… Я тут все как по полочкам.
Ну и добавим работу в пассивном режиме:
pasv_min_port=50000
pasv_max_port=60000
Эти параметры в ручную добавлять надо? в конфиги их нет! Если в ручную, то откуда такие значения?
Появился вопрос по правам на файлы в директории ftp.
Был создан пользователь для скачивания документации, по примеру с useradd username -b /home/ -m -U -s /bin/false
Файлы заливаются другим пользователем через su
-rw-r--r-- 1 root root 16 Авг 28 17:01 user_right.txt
Вернее сформулирую вопрос по другому. Как пользователю запретить в своей домашней директории удалять и переименовывать файлы?
Приветствую!
установил, Спасибо прошло гладко, есть один момент при установке vsFTPd, запросила удалить dnsmasq-base с фразой «в дальнейшем не требуется», как и просили удалил
apt-get autoremove dnsmasq-base
но у меня теперь проблема появилась, все порты закрыты, и те правила что прописал в rc.local не срабатывают, как открыть порты? или вернуть dnsmasq-base на место? есть ли вариант утилиты для открытия/закрытия портов, для начала так-как являюсь зеленным новичком и только осваиваюсь в мире консоли 🙂 (стаж 5 недель)
Откровенно говоря, я впервые слышу чтобы vsftps удалял dnsmasq, у меня данный функционал на нескольких серверах и нигде таких проблем на вызывал.
поставьте этот пакет обратно да и все.
Открывать порты только через iptables, руководств по нему, вагон и большая тележка.
#auth required pam_shells.so