Критическая ошибка при передаче файлов vsftpd
FTP очень полезная вещь, он позволяет легко подключаться к удаленному серверу, для загрузки или скачивания данных.
Со всеми недостатками и изъянами в безопасности, FTP должен был отойти на второй план, как и протокол telnet, однако у него оказалось намного больше преимуществ, по этому он используется по сей день и довольно успешно. К нему появилось довольно много модификаций, которые позволяют например: заворачивать трафик в SSL/TLS для повышения безопасности переделываемых по сети данных, как это сделать можно ознакомиться в статье- Настрока ProFTPd для использования TLS Но на этот раз не о Proftpd.
Данная статья была вынесена в отдельный топик, для того чтобы ее было проще найти на сайте. Раньше она находилась в статье по настройке Nginx+Apache, но думаю что она будет намного полезнее в качетсве самостоятельного материала.
Переходим в режим супер пользователя root:
Для Debian:
Для Ubuntu
Нашей основной задачей является блокирование пользователя внутри своей домашней директории, для того, чтобы не допустить его переход в папки «соседей» по серверу. Для этого мы немного подредактируем конфигурационный файл vsftpd.conf.
Находим и редактируем следующие строчки:
напишем свой баннер для входа, хотя он и не обязателен( на работу он не влияет):
Запираем пользователей в домашних директориях:
ну под данной записью добавим:
Разрешаем вход локальным пользователям:
Запрещаем анонимный доступ, необходимо найти строку:
И привести ее к виду:
Ну и добавим работу в пассивном режиме:
Поддержка 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
Для обеспечения безопасности сервера, пользователям виртуальных хостов будет отключен шелл, как пишут на просторах интернетов, рекомендуется это делать следующим способом:
Создадим для него пароль:
Рассмотрим это выражение более подробно.
Где:
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
в этом же гайде написано,
Если при попытке подключения вы видите ошибку:
то вам надо изменить права на домашний каталог локального пользователя
sudo chmod a-w /home/user/
Т.е. изначально следующие права на домашнюю папку:
А при выполнении этой команды стало:
Т.е., на сколько я понял, решение данной ошибки - это снятие атрибута Write c домашней папки. Да, при этом я могу логиниться на FTP, но при передачи файлов появляется ошибка:
Если я в vsftpd.conf комментирую chroot_local_user=YES, тогда я нормально логинюсь и могу передавать файлы, но получается, что пользователь не ограничен только в своей домашней директорией, я правильно понял?
Я полностью запутался и в конф.файле сильно накосячил, поэтому переделал все заново. Файл vsftpd.log:
==Все установлено по дефолту pastebin.com/8pmC18ku==
Thu Oct 16 15:15:20 2014 [pid 9001] CONNECT: Client "192.168.5.75"
Thu Oct 16 15:15:20 2014 [pid 9000] [backupserver] OK LOGIN: Client "192.168.5.75"
Thu Oct 16 15:21:25 2014 [pid 9127] CONNECT: Client "192.168.5.75"
Thu Oct 16 15:21:25 2014 [pid 9126] [backupserver] OK LOGIN: Client "192.168.5.75"
Thu Oct 16 15:21:53 2014 [pid 9133] CONNECT: Client "192.168.5.75"
Thu Oct 16 15:21:53 2014 [pid 9132] [backupserver] OK LOGIN: Client "192.168.5.75"
Thu Oct 16 15:25:32 2014 [pid 9147] CONNECT: Client "192.168.5.75"
Thu Oct 16 15:25:32 2014 [pid 9151] CONNECT: Client "192.168.5.75"
Thu Oct 16 15:25:32 2014 [pid 9146] [backupserver] OK LOGIN: Client "192.168.5.75"
Thu Oct 16 15:25:32 2014 [pid 9150] [backupserver] OK LOGIN: Client "192.168.5.75"
Thu Oct 16 15:32:28 2014 [pid 9169] CONNECT: Client "192.168.5.75"
Thu Oct 16 15:32:28 2014 [pid 9168] [backupserver] OK LOGIN: Client "192.168.5.75"
Thu Oct 16 15:32:39 2014 [pid 9174] CONNECT: Client "192.168.5.75"
Thu Oct 16 15:32:40 2014 [pid 9173] [backupserver] OK LOGIN: Client "192.168.5.75"
Thu Oct 16 15:34:12 2014 [pid 9201] CONNECT: Client "192.168.5.75"
Thu Oct 16 15:34:12 2014 [pid 9200] [backupserver] OK LOGIN: Client "192.168.5.75"
Thu Oct 16 15:34:40 2014 [pid 9204] CONNECT: Client "192.168.5.75"
Thu Oct 16 15:34:40 2014 [pid 9203] [backupserver] OK LOGIN: Client "192.168.5.75"
Побродил по /, пооткрывал папки, при попытке загрузить файл и папки в доманюю папку и в созданную в Filezilla получил ошибку:
Ответ: 227 Entering Passive Mode (192,168,5,50,133,249).
Команда: STOR /home/backupserver/Router/startup-config.txt
Ответ: 550 Permission denied.
Ошибка: Критическая ошибка при передаче файлов
Ответ: 550 Permission denied.
Статус: Начинаю закачивать C:\Users\sya\Desktop\192.168.5.50\Router\startup-config.txt
Команда: CWD /home/backupserver/Router
Ответ: 550 Permission denied.
Команда: MKD /home/backupserver/Lecture
Ответ: 550 Permission denied.
Ответ: 550 Failed to change directory.
Команда: CWD /home/backupserver
Ответ: 250 Directory successfully changed.
Команда: MKD Router
Ответ: 550 Permission denied.
Команда: MKD /home/backupserver/Router
Ответ: 550 Permission denied.
Команда: CWD /home/backupserver/Router
Права на домашнюю папку:
drwxr-xr-x 10 backupserver backupserver 4096 окт. 16 15:35 backupserver
На папки которые я создавал:
drwxrwxr-x 2 backupserver backupserver 4096 окт. 16 15:33
Thu Oct 16 15:50:28 2014 [pid 9268] CONNECT: Client "192.168.5.75"
Thu Oct 16 15:50:28 2014 [pid 9267] [backupserver] OK LOGIN: Client "192.168.5.75"
:~$ sudo chmod a-w /home/backupserver/
:~$ ls -al /home/
итого 28
drwxr-xr-x 4 root root 4096 окт. 16 14:49 .
drwxr-xr-x 22 root root 4096 окт. 16 14:16 ..
dr-xr-xr-x 10 backupserver backupserver 4096 окт. 16 15:47 backupserver
Блин, до меня дошло как эта штука работает. Я когда читал чейнджлог, наверно не правильно понял смысл слова "корень". Оказывается корень это не / А корень это та папка куда ты дал доступ для FTP пользователя. В данном случае (для меня) это будет домашняя папка /home/backupserver/ И вот когда я понасоздавал разных папок в домашней папке, то смог в них загрузить различные файлы и папки, но у меня небыло доступа за пределы домашней папки.
До сих пор я не мог держать пользователя FTP в тюрьме в каталоге их сайта. Есть ли решение, которое исправляет эту ошибку и удерживает пользователя в тюрьме?
Мои настройки vsFTPd, которые я изменил:
В конце файла я добавил:
Я попытался allow_writeable_chroot=YES решение, которое не сработало, и фактически сломал vsFTPd полностью.
Каким-то образом, для меня, по крайней мере с «виртуальными» пользователями ftp, достаточно просто добавить настройку allow_writeable_chroot=YES и работать «как положено» FWIW .
Просто добавьте его, если он еще не существует.
Перезапустите службу vsftpd:
И это должно работать.
Спрашивающий фактически заявляет, что он уже попробовал это, и это не сработало, так что это не ответ на его вопрос.
Реальное решение этой проблемы: домашняя папка пользователя не должна быть доступна для чтения только для чтения.
Это работает отлично! Просто создайте дом для пользователя с помощью chmod 555, а затем внутри него создайте дом для веб-сайта (или веб-сайтов) с помощью chmod 755 или того, который вам нужен: все будет работать, и у пользователя будут права на запись.
ПОЛЬЗОВАТЕЛИ ВСЕГДА ЗАВЕРШИЛИСЬ В ИХ ДОМАШНИЕ КАТАЛОГИ .
Обратите внимание: решение Chris добавит сторонний пакетный сервер в ваш список репозиториев! Зачем устанавливать безопасный FTP-сервер с поддержкой chroot, если вы слепо принимаете иностранные пакеты программного обеспечения для установки в вашей системе. (Крис: я не думаю, что вы воспользуетесь преимуществом, но использование этого решения ИМХО является плохим сисадмином)
у вас есть лучший подход к решению этой дилеммы @reto? Это был небольшой беспорядок, чтобы решить. Спасибо за помощь.
если есть обновленный пакет из дистрибутива, я бы попытался использовать это. Большинство дистрибутивов предоставляют бэкпорты для старых версий. Если это невозможно, я получу исходный код от разработчика и соберу его сам. Если есть плавающий патч, я мог бы применить его (обычно они маленькие и их можно проверить вручную).
Мне не нужно обновляться из репо. Для меня добавление строки "allow_writeable_chroot = YES" исправило ошибку
Согласно предыдущему ответу «РЕАЛЬНОЕ решение этой проблемы: домашняя папка пользователя не должна быть доступна для чтения только для чтения». Общее мышление правильно, но с неправильной реализацией.
Ниже я попытаюсь привести простой пример:
Для начала нам нужно построить топологию пользовательского каталога:
Эта конфигурация прекрасно работает с однопользовательской конфигурацией. Для многопользовательских, директива user_config_dir должна использоваться дополнительно.
Вот хитрый обходной путь, не лучшая идея для использования, но . Если вам нужна корневая папка ftp с возможностью записи, просто вставьте команды изменения разрешения в команды pre-start и post-start.
Предварительный запуск - измените права доступа только для чтения, которые требуются серверу (:
Post-start - поменяйте разрешение на чтение-запись или что вам нужно.
Я перепробовал много вариантов, но не смог заставить его работать на WP-сервере. Это работает для вас в конфигурации WP?
Посмотрите, чтобы обновить раздел, mauby этот вариант может помочь вам, это не совсем безопасно, но если нет других возможностей .
Это в значительной степени то, что упоминал toastboy70. Сделайте ftp-root dir chown'd для ftp.ftp и недоступным для записи (/etc/vsftpd.conf): anon_root = / srv / ftp
Затем создайте доступный для записи дочерний каталог: / srv / ftp / upload
Что-то здесь действительно не работает. У меня есть следующая ошибка при использовании FileZilla для подключения к удаленной машине, работающей vsftpd :
Я пытаюсь настроить службы FTP на 3 компьютерах за домашним брандмауэром интернет-провайдера. Все они являются Ubuntu 12.04 Server LTS, и я не могу использовать порт 21 извне на удаленном сайте.
Ну, ладно, признаюсь, это ограничение накладывает я сам. Я просто хотел звучать так, будто я работаю в настоящей компании. В любом случае, только 1 из 3 систем могла быть назначена 21, так что это все равно будет проблемой.
Я пробовал решения для добавления строк "pasv _. ", но я все еще не могу пройти этап подключения LIST.
Итак, если это не удалось, в чем может быть проблема?
На этом сайте я прочитал, что мне нужно переадресовать порты 20 и 21. Сейчас у удаленных сайтов есть порты, такие как 10000, 11000, 12000, которые перенаправляются на внутренний порт 21 в каждой из систем. Должен ли я переслать несколько дополнительных портов на 20? это не имеет смысла, потому что этот порт даже не открыт, vsftpd только слушает 21.
Все, что я хочу, это для успешного соединения ftp через эти перенаправленные порты, я расстроен, потому что я успешно переадресован для таких служб, как SSH, apache2 и т. Д., И я не понимаю, что здесь сломано.
спасибо Джорен за исправление моего форматирования!
РЕДАКТИРОВАТЬ: я возился с моим тестированием VPS, который напрямую подключен к Интернету, я установил vsftpd, просто чтобы посмотреть, что происходит, и вывод 'netstat -tuna' показывает, что успешное соединение с моим клиентом filezilla выглядит так:
Примечание: FTP-сервер на моем VPS также сначала не работал из-за совершенно не связанной проблемы, связанной с виртуализированными средами ("500 OOPS: priv_sock_get_cmd"). Читайте: я начинаю видеть, что vsftpd в Ubuntu не работает "из коробки", как apache2 и sshd, для любых разочарованных начинающих системных администраторов, не думайте, что вы глупы, если это не так работает первым делом.
У моего тестируемого VPS нет брандмауэра, поэтому все порты напрямую доступны для доступа демону FTP. После выполнения этого теста я вижу, что возможно, что это вторичное соединение блокируется на удаленном сайте, где у меня возникают проблемы (случайные порты, такие как 46403).
По крайней мере, теперь я подтвердил, что с моим Filezilla нет проблем с NAT, потому что filezilla явно открывает случайные порты и общается с моим VPS.
Единственное, что не имеет смысла, это то, что config 'connect_from_port_20=YES' установлен в моей конфигурации VPS FTP, но я не вижу никаких соединений, используя порт 20. Вот почему я даже не знаю, нужно ли перенаправлять этот порт за брандмауэр.
Один из моих недостатков в знаниях - я даже не знаю, что делает порт 20, и я не могу учиться на опыте, потому что я никогда не видел признаков того, что порт когда-либо использовался из-за подключения, загрузки или выгрузки.
Хорошо, я обнаружил некоторые проблемы (явно больше, чем одна вещь не так) - Это связано с переадресацией портов.
Подозреваю оригинальную проблему (перед настройкой vsftpd.conf)
Теперь проблема (ы), которые я создал:
Вторая проблема, которую я создал: я пытался связать порт 21 на этот раз, но я думаю, что испортил filezilla.
Вывод: до тех пор, пока порт изменяется маршрутизатором, FTP-сервер никогда не сможет сообщить клиенту о подключении к нужному порту. Если вы попытаетесь использовать внутренний порт, клиент будет работать против маршрутизатора. Если вы попытаетесь указать внешний порт, маршрутизатор отклонит входящее соединение на другой номер, который сервер не ожидал.
Я опробую решение и сообщу здесь результаты.
Я думаю, поскольку протокол FTP-сервера сообщает клиенту, к какому порту подключаться, это вторичное соединение ДОЛЖНО иметь тот же номер внешнего порта, что и внутренний.
Я назову это "вторичным соединением", и я думаю, что оно как-то связано с портом 20, что я не понимаю.
(примечание: "%" означает, что порт был изменен удаленным маршрутизатором.)
Ubuntu с VSFTPd не качает файлы с сервера
Здравствуйте. Установлена Ubuntu с VSFTPd. Не могу понять почему я не могу скачать с ftp файлы. Папки создаются, файлы копируются на фтп, но скопировать с самого ftp сервера ничего не могу. При этом каталоги копируются а файлы нет. Пробовал и стандартным проводником Windows и тоталом.
Помогите пожалуйста разобраться в чем может быть дело?
В логе пишется:
Fri Apr 22 21:08:13 2011 [pid 2] CONNECT: Client "172.16.15.79"
Fri Apr 22 21:08:13 2011 [pid 1] [arma] OK LOGIN: Client "172.16.15.79"
Fri Apr 22 21:08:20 2011 [pid 3] [arma] FAIL DOWNLOAD: Client "172.16.15.79", "/NRMS1003501-1.lic", 0.00Kbyte/sec
Пользователи виртульные с привелегиями локальных
user_config_dir=/etc/vsftpd_user_conf/arma
cmds_allowed=ABOR,MKD,CWD,DELE,LIST,MDTM,NLST,PASS,PASV,PORT,PWD,QUIT,RETR,RMD,RNFR,RNTO,SIZE,STOR,USER,ACCT,C$APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST,PROT,FEAT,REST,TYPE,OPTS,PBSZ
local_root=/home/vsftpd/arma
write_enable=YES
download_enable=YES
ls -l покажи с какой диреткории не копируеться..
ls -l /var/ | grep ftp
Поробуйте под анонимусами теже действие.
А к примеру прочесть можете фаел каконибудь на фтп?
bagas писал(а): -l пlsокажи с какой диреткории не копируеться..
ls -l /var/ | grep ftp
Поробуйте под анонимусами теже действие.
А к примеру прочесть можете фаел каконибудь на фтп?
drwxr-xr-x 2 vsftpd nogroup 4096 2011-04-22 23:53 arma
adminftp@FTPServer:/home/vsftpd$ ls -l /var/ | grep ftp
dr-xr-xr-x 3 root ftp 4096 2011-03-22 14:03 ftp
Под анонимным пользователем не пробовал.
bagas писал(а): ls -l покажи с какой диреткории не копируеться..
ls -l /var/ | grep ftp
Поробуйте под анонимусами теже действие.
А к примеру прочесть можете фаел каконибудь на фтп?
переделал конфиг под анонимуса. под анонимусом качается. может быть не хватает какой-нибудь фтп команды у юзера arma?
Читайте также: