Debian → Настройка FTP сервера vsFTPd на Debian/Ubuntu
FTP очень полезная вещь, он позволяет легко подключаться к удаленному серверу, для загрузки или скачивания данных.
Со всеми недостатками и изъянами в безопасности, FTP должен был отойти на второй план, как и протокол telnet, однако у него оказалось намного больше преимуществ, по этому он используется по сей день и довольно успешно. К нему появилось довольно много модификаций, которые позволяют например: заворачивать трафик в SSL/TLS для повышения безопасности переделываемых по сети данных, как это сделать можно ознакомиться в статье- Настрока ProFTPd для использования TLS Но на этот раз не о Proftpd.
Данная статья была вынесена в отдельный топик, для того чтобы ее было проще найти на сайте. Раньше она находилась в статье по настройке Nginx+Apache, но думаю что она будет намного полезнее в качетсве самостоятельного материала.
Переходим в режим супер пользователя root:
Для Debian:
Для Ubuntu
Устанавливаем vsFTPd:
Нашей основной задачей является блокирование пользователя внутри своей домашней директории, для того, чтобы не допустить его переход в папки «соседей» по серверу. Для этого мы немного подредактируем конфигурационный файл vsftpd.conf.
Находим и редактируем следующие строчки:
Разрешаем запись:
напишем свой баннер для входа, хотя он и не обязателен( на работу он не влияет):
Запираем пользователей в домашних директориях:
ну под данной записью добавим:
Разрешаем вход локальным пользователям:
Запрещаем анонимный доступ, необходимо найти строку:
И привести ее к виду:
Ну и добавим работу в пассивном режиме:
Её необходимо за комментировать, чтобы она выглядела:
Также, нам необходимо найти строку:
И снять с нее комментарий.
После этого, наш FTP сервер будет доступен по IPv4 и IPv6
Параметр local_umask отвечает за то, какие права будут присвоены файлам, которые были закачаны через FTP, по умолчанию там установлено local_umask=022, маска расчитывается очень просто, по формуле 777-A=X
Где:
777-права полного доступа
А-права которые необходимо получить
Х-маска, которую необходимо выставить
Предположим, нам необходимо получить права 754 что соотвествует drwxr-xr--, тогда 777-754=23 получается local_umask=023.
В любом случае, тот кто закачал файлы является их владельцем и может расширить права доступа к ним.
В общем, находим строку:
И меняем 022 на 023 или на ту которая необходима в вашей ситуации:
Для обеспечения безопасности сервера, пользователям виртуальных хостов будет отключен шелл, как пишут на просторах интернетов, рекомендуется это делать следующим способом:
Создадим для него пароль:
Рассмотрим это выражение более подробно.
Где:
username -имя пользователя(логин)
home-Директория где будет находиться его домашний каталог
ключ -m — указывает на то, что его домашней директории будет присвоено название которое было указано в username.
ключ -U -Указывает на то что необходимо создать одноименную группу.
-s /bin/false -что пользователю будет отключен шелл (это важный и тонкий момент!)
Назначение остальных ключей можно нагуглить за пару минут.
Если пользователю отключить шелл, то он не сможет залогиниться на FTP сервер, его будет просто отфутболивать.
Вдумчивое чтение документации по vsFTPd рассказало мне, что доступ к FTP могут получить пользователи которые имеют работоспособный шелл т.е. /bin/bash, для того чтобы пользователи с /bin/false могли авторизироваться на нашем ftp, нам необходимо отредактировать файл /etc/pam.d/vsftpd
Найти и закоментировать строку (она самая последняя)
чтобы она выглядела:
И перезапускаем vsftpd
И еще немного для общего развития- Пользователь с отключенным шеллом, не сможет подключиться по SSH! Это можно считать дополнительным плюсом к безопастности.
Как отключить шелл уже существующему в системе пользователю:
там находим нужного пользователя и /bin/bash меняем на /bin/false, после перезагрузки, изменения переменятся.
На этом можно закончить.
Чтобы устранить проблему с настройкой vsFTPd на Ubuntu 12.04, воспользуйтесь заметкой: Ремонтируем vsFTPd в Ubuntu 12.04
Со всеми недостатками и изъянами в безопасности, FTP должен был отойти на второй план, как и протокол telnet, однако у него оказалось намного больше преимуществ, по этому он используется по сей день и довольно успешно. К нему появилось довольно много модификаций, которые позволяют например: заворачивать трафик в SSL/TLS для повышения безопасности переделываемых по сети данных, как это сделать можно ознакомиться в статье- Настрока ProFTPd для использования TLS Но на этот раз не о Proftpd.
Данная статья была вынесена в отдельный топик, для того чтобы ее было проще найти
Переходим в режим супер пользователя root:
Для Debian:
su
Для Ubuntu
sudo su
Устанавливаем vsFTPd:
aptitude install vsftpd
Нашей основной задачей является блокирование пользователя внутри своей домашней директории, для того, чтобы не допустить его переход в папки «соседей» по серверу. Для этого мы немного подредактируем конфигурационный файл vsftpd.conf.
nano /etc/vsftpd.conf
Находим и редактируем следующие строчки:
Разрешаем запись:
write_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
напишем свой баннер для входа, хотя он и не обязателен( на работу он не влияет):
ftpd_banner=Welcome to our FTP service
Запираем пользователей в домашних директориях:
chroot_local_user=YES
ну под данной записью добавим:
allow_writeable_chroot=YES
Разрешаем вход локальным пользователям:
local_enable=YES
Запрещаем анонимный доступ, необходимо найти строку:
#anonymous_enable=YES
И привести ее к виду:
anonymous_enable=NO
Ну и добавим работу в пассивном режиме:
pasv_min_port=50000
pasv_max_port=60000
Поддержка IPv6 в vsFTPd
Для того чтобы добавить возможность работы с ip версии 6, то в конфигурационном файле находим строку:listen=YES
Её необходимо за комментировать, чтобы она выглядела:
#listen=YES
Также, нам необходимо найти строку:
#listen_ipv6=YES
И снять с нее комментарий.
После этого, наш FTP сервер будет доступен по IPv4 и IPv6
Права доступа на файлы и директории
Параметр local_umask отвечает за то, какие права будут присвоены файлам, которые были закачаны через FTP, по умолчанию там установлено local_umask=022, маска расчитывается очень просто, по формуле 777-A=X
Где:
777-права полного доступа
А-права которые необходимо получить
Х-маска, которую необходимо выставить
Предположим, нам необходимо получить права 754 что соотвествует drwxr-xr--, тогда 777-754=23 получается local_umask=023.
В любом случае, тот кто закачал файлы является их владельцем и может расширить права доступа к ним.
В общем, находим строку:
local_umask=022
И меняем 022 на 023 или на ту которая необходима в вашей ситуации:
local_umask=023
Авторизация vsftpd и /bin/false
Для обеспечения безопасности сервера, пользователям виртуальных хостов будет отключен шелл, как пишут на просторах интернетов, рекомендуется это делать следующим способом:
useradd username -b /home -m -U -s /bin/false
Создадим для него пароль:
passwd username
Рассмотрим это выражение более подробно.
Где:
username -имя пользователя(логин)
home-Директория где будет находиться его домашний каталог
ключ -m — указывает на то, что его домашней директории будет присвоено название которое было указано в username.
ключ -U -Указывает на то что необходимо создать одноименную группу.
-s /bin/false -что пользователю будет отключен шелл (это важный и тонкий момент!)
Назначение остальных ключей можно нагуглить за пару минут.
Если пользователю отключить шелл, то он не сможет залогиниться на FTP сервер, его будет просто отфутболивать.
Вдумчивое чтение документации по vsFTPd рассказало мне, что доступ к FTP могут получить пользователи которые имеют работоспособный шелл т.е. /bin/bash, для того чтобы пользователи с /bin/false могли авторизироваться на нашем ftp, нам необходимо отредактировать файл /etc/pam.d/vsftpd
nano /etc/pam.d/vsftpd
Найти и закоментировать строку (она самая последняя)
auth required pam_shells.so
чтобы она выглядела:
#auth required pam_shells.so
И перезапускаем vsftpd
/etc/init.d/vsftpd restart
И еще немного для общего развития- Пользователь с отключенным шеллом, не сможет подключиться по SSH! Это можно считать дополнительным плюсом к безопастности.
Как отключить шелл уже существующему в системе пользователю:
nano /etc/passwd
там находим нужного пользователя и /bin/bash меняем на /bin/false, после перезагрузки, изменения переменятся.
На этом можно закончить.
Чтобы устранить проблему с настройкой vsFTPd на Ubuntu 12.04, воспользуйтесь заметкой: Ремонтируем vsFTPd в Ubuntu 12.04
62 комментария
Таже петрушка наблюдается при работе Samba при закачке на него больших файлов, отжерается ОЗУ ровно по размеру файла который был закачан на сервер. Так что, это не проблема.
На это просто не нужно обращать внимания, утечки памяти там нет, память сама освободится-не волнуйтесь.
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_ остальные ___
Чмоды посчитаете сами!
После этого создаем маску для создаваемых файлов, о том как ее рассчитать написано в статье, и пользуетесь.
ключ не правильный у вас, должен быть -d
Вот полный список ключей для запуска.
А как, по вашему, должно быть?
Сама идея чтобы домашняя директория пользователя создавалась в директории /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 права.
Принцип очень простой-запретить все, разрешить только то, что необходимо и не более…
Вроде сделал все так как здесь написано, но при попытке подключиться пользователь видит сообщение:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Не могу понять как закрыть пользователя в домашнем каталоге? Если снимаю параметр chroot_local_user=YES, то пользователь может смотреть все директории, если ставлю параметр, то 500-ая ошибка.
Нужно будет пересмотреть документацию и подправить статью.
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Похоже, за решением надо отправляться в гугл, если эта проблема присутствует у всех =)
Спасибо! Огромнейшее спасибо.
Использовал кучу мануалов, но все как то коряво работало и shell… Я тут все как по полочкам.
pasv_min_port=50000
pasv_max_port=60000
Эти параметры в ручную добавлять надо? в конфиги их нет! Если в ручную, то откуда такие значения?
С потолка-порты из этого диапазона выбираются случайным образом.
Был создан пользователь для скачивания документации, по примеру с useradd username -b /home/ -m -U -s /bin/false
Файлы заливаются другим пользователем через su
в итоге, пользователь username, может удалять файлы с ftp.
Что не так?
установил, Спасибо прошло гладко, есть один момент при установке vsFTPd, запросила удалить dnsmasq-base с фразой «в дальнейшем не требуется», как и просили удалил
но у меня теперь проблема появилась, все порты закрыты, и те правила что прописал в rc.local не срабатывают, как открыть порты? или вернуть dnsmasq-base на место? есть ли вариант утилиты для открытия/закрытия портов, для начала так-как являюсь зеленным новичком и только осваиваюсь в мире консоли :-) (стаж 5 недель)
поставьте этот пакет обратно да и все.
Открывать порты только через iptables, руководств по нему, вагон и большая тележка.
И перепапускаем vsftpd
Надеюсь я помог, а не помешал.
З.Ы. можно было и в личку написать.
Как создать логин и пароль?
Можно растолковать на пальцах? А то беда просто…
например нам нужно добавить пользователя vasia
Тогда все это будет выглядеть так:
В статье все это расписывается, включая ключи, пункт Авторизация vsftpd и /bin/false куда уж понятнее, в чем у вас проблема?
пользователь создается, пароль устанавливается, но только не подключается… (
в чем причина? я не понимаю…
может, здесь кто-нибудь знает? )
я ничего подходящего не нашел здесь /var/log
может, надо организовать запись?
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Если вы ставите на Ubuntu 12.04 / 12.10 то в пакете из репозиториев есть глюк, вам можно скачать версию посвежее, например от debian
Что нужно сделать вам:
1 качаем свежий пакет vsftpd (например для amd64)
2 Устанавливаем:
В vsftpd.conf добавляем следующее:
чтобы выглядело, НАПРИМЕР, так:
3 Перезапускаем vsftpd
Пользуемся…
у меня ubuntu 10.04
vsftpd сами поставили мне.
а лог такой:
Sat Apr 20 22:28:13 2013 [pid 29638] CONNECT: Client «85.26.183.192»
Sat Apr 20 22:28:42 2013 [pid 29637] [sotnik] FAIL LOGIN: Client «85.26.183.192»
остальное отличается только pid
смотрел редактором, хотя пишут, что так нежелательно делать.
— то есть надо взять подходящий сервер?
Preparing to replace vsftpd 2.2.2-3ubuntu6.3 (using ./vsftpd_3.0.2-3_amd64.deb)…
vsftpd stop/waiting
Unpacking replacement vsftpd…
dpkg-deb: file `./vsftpd_3.0.2-3_amd64.deb' contains ununderstood data member data.tar.xz, giving up
dpkg: error processing ./vsftpd_3.0.2-3_amd64.deb (--install):
subprocess dpkg-deb --fsys-tarfile returned error exit status 2
vsftpd start/running, process 17184
Errors were encountered while processing:
./vsftpd_3.0.2-3_amd64.deb
Как от этого избавится?
FileZilla пишет
«Статус: Не удалось установить соединение с „ECONNREFUSED — Connection refused by server“.
Ошибка: Невозможно подключиться к серверу»
В качестве логина использую нового пользователя которого создал, в качестве пароля — пароль который ему присвоил.
В качестве хоста IP сервера к которому подключался по SSH.
Первый раз ковыряюсь в серверах если чесно. прошу помощи и совета в знающих людей.
Спасибо.
мало информации
Что в логах по данному вопросу?
Какая версия ОС и разрядность?
21й порт доступен для внешних подключений?