Если вы используете Debian 7 и выше, то по этой статье настроить уже ничего не выйдет. Переходите к статье Настраиваем FTP-сервер. Издание второе, улучшенное и дополненное: vsftpd.
Извиняюсь, что давно ничего не писал. Работа и эксперименты с виртуализацией отнимают очень много времени. Пока что ничего нового и особенного не откопал, лишь сделал некоторые выводы, которые напишу в финальной статье про KVM.
А сейчас, пожалуй, напишу как быстро настроить FTP сервер на Debian/Ubuntu. Способ действительно быстрый и не требует особого ковыряния в конфигах и базах.
За основу, как можно догадаться из заголовка, я беру vsftpd. Почему? Ну во-первых его название расшифровывается как very secure ftp daemon. Во-вторых именно его можно установить и настроить максимально быстро.
Что мы получим в итоге:
1) авторизоваться нужно (можно) будет по системным пользователям. То есть список пользователей и их домашние директории будут браться из /etc/passwd. Root в параде не участвует.
2) пользователи не могут выйти выше домашнего каталога в структуре ФС. То есть мы организуем ftp-chroot. Редки случаи, когда он помешает конечным пользователям, а вот безопасность он повышает ощутимо. Рут же может пользоваться sshfs, чтобы работать со всей ФС сразу.
3) Анонимы отключены. В принципе включаются 3мя строчками в конфиге, но в рамках данной статьи они не требуются.
Итак. Проверяем, что у нас не установлено никаких ftpd, если установлены — удаляем. Они нам не понадобятся.
Путь для ленивых:
Путь для пытливых:
Установим vsftpd:
Скопируем стандартный конфиг на всякий случай (необязательно):
Почистим стандартный конфиг от флуда разработчиков =) (вообще там интересно, советую почитать как-нибудь. )
И начнём писать новый. Собственно, чтобы следовать заголовку «Very fast way», предлагаю взять мой готовый конфиг.
Открываем /etc/vsftpd.conf нашим любимым редактором, например:
и вставим в файл следующее:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
ftpd_banner=Welcome to debian.pro ftpd!
#banned_email_file=/etc/vsftpd.banned_emails
chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_list
ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
В файл /etc/vsftpd.chroot_list мы можем записать пользователей, на которых не распространяется правило chroot. Для того, чтобы эта функция заработала — расскоментируйте строку #chroot_list_file=/etc/vsftpd.chroot_list в vsftpd.conf. Ну и не забудьте создать сам файл:
Перезагрузим vsftpd:
Ну и проверим наш ftpd. Много флуда, дальше читать совсем не обязательно) статья, собственно, закончена:
Попробуем зайти под анонимом:
Connected to localhost.
220 Welcome to debian.pro ftpd!
Name (localhost:inky): anonymous
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
Попробуем зайти под локальным пользователем, немного погулять по хомяку и попробовать выйти из chroot:
Connected to localhost.
220 Welcome to debian.pro ftpd!
Name (localhost:inky): inky
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rwxrwxrwx 1 1001 1001 316 Feb 26 17:27 diff.sh
-rwxr-xr-x 1 1001 1001 2281 Feb 26 22:35 diff2.sh
-rw-r--r-- 1 1001 1001 1185 Feb 26 20:26 diff2.sh?
-rw-r--r-- 1 1001 1001 357 Feb 07 14:47 examples.desktop
drwxr-xr-x 5 1001 1001 4096 Feb 23 05:06 iMacros
-rwxr-xr-x 1 1001 1001 57 Jun 09 15:53 script100
drwxr-xr-x 3 1001 1001 4096 Jul 25 13:10 scripts
-rw-r--r-- 1 0 0 30888 Dec 13 2006 thunder.au
-rw-r--r-- 1 1001 1001 22626 Feb 26 20:19 thunder2
-rw-r--r-- 1 1001 1001 1642496 Feb 26 20:11 thunder2.au
drwxr-xr-x 2 1001 1001 4096 Feb 26 17:27 tmp
-rwxr-xr-x 1 1001 1001 7422 Jun 09 15:43 urgent
226 Directory send OK.
ftp> cd iMacros
250 Directory successfully changed.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 1001 1001 4096 Feb 22 01:43 Datasources
drwxr-xr-x 5 1001 1001 4096 Apr 11 16:41 Downloads
drwxr-xr-x 2 1001 1001 4096 Feb 22 01:46 Macros
-rwxr-xr-x 1 1001 1001 188 Feb 27 00:19 iMacros.log
226 Directory send OK.
ftp> cd ../
250 Directory successfully changed.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rwxrwxrwx 1 1001 1001 316 Feb 26 17:27 diff.sh
-rwxr-xr-x 1 1001 1001 2281 Feb 26 22:35 diff2.sh
-rw-r--r-- 1 1001 1001 1185 Feb 26 20:26 diff2.sh?
-rw-r--r-- 1 1001 1001 357 Feb 07 14:47 examples.desktop
drwxr-xr-x 5 1001 1001 4096 Feb 23 05:06 iMacros
-rwxr-xr-x 1 1001 1001 57 Jun 09 15:53 script100
drwxr-xr-x 3 1001 1001 4096 Jul 25 13:10 scripts
-rw-r--r-- 1 0 0 30888 Dec 13 2006 thunder.au
-rw-r--r-- 1 1001 1001 22626 Feb 26 20:19 thunder2
-rw-r--r-- 1 1001 1001 1642496 Feb 26 20:11 thunder2.au
drwxr-xr-x 2 1001 1001 4096 Feb 26 17:27 tmp
-rwxr-xr-x 1 1001 1001 7422 Jun 09 15:43 urgent
226 Directory send OK.
ftp> cd ../
250 Directory successfully changed.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rwxrwxrwx 1 1001 1001 316 Feb 26 17:27 diff.sh
-rwxr-xr-x 1 1001 1001 2281 Feb 26 22:35 diff2.sh
-rw-r--r-- 1 1001 1001 1185 Feb 26 20:26 diff2.sh?
-rw-r--r-- 1 1001 1001 357 Feb 07 14:47 examples.desktop
drwxr-xr-x 5 1001 1001 4096 Feb 23 05:06 iMacros
-rwxr-xr-x 1 1001 1001 57 Jun 09 15:53 script100
drwxr-xr-x 3 1001 1001 4096 Jul 25 13:10 scripts
-rw-r--r-- 1 0 0 30888 Dec 13 2006 thunder.au
-rw-r--r-- 1 1001 1001 22626 Feb 26 20:19 thunder2
-rw-r--r-- 1 1001 1001 1642496 Feb 26 20:11 thunder2.au
drwxr-xr-x 2 1001 1001 4096 Feb 26 17:27 tmp
-rwxr-xr-x 1 1001 1001 7422 Jun 09 15:43 urgent
226 Directory send OK.
И попробуем зайти под рутом:
Connected to localhost.
220 Welcome to debian.pro ftpd!
Name (localhost:inky): root
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
Всё работает. Спасибо за внимание, удачного использования =)
спасибо, все кратко и понятно. Удобно что список пользователей из /etc/passwd.
Такой вопрос, а как с извечной проблемой с кодировками, коректно ли отображаяются имена файлов на русском языке в пользователей виндовс (windows-1251) и если все таки придется немного пошаминать то не помешает ли это пользователям с ОС линукс (как это бывает с Proftpd)
от фтп демона кодировка мало зависит) от фс скорее
если честно — винду я в руки (а тем более чтобы она ещё и в сеть вышла) — года 2-3 не беру… так что и проверить негде.
Добрый день. поставил и настроил по вашей инструкции. с локалки все подключает и работает. а с внешки не никак (( типа подключается а потом вылетает с ошибкой
Ошибка: Превышено время ожидания соединения
Ошибка: Не могу получить список каталогов!
Поясните разницу между «внешкой» и «локалкой» в вашем случае. Скорее всего, шлюз режет соединения по портам 1024+.
хмм, получается надо открыть порты в iptables?
и какое правило и прописать?
локалка это 192,168,150,x
внешка (уже проверяю из дома) 92,x.x.x
Еще смущает один момент сервер не могу перезагрузить потому как он в работе все время, а вылючить iptables тоже не получается (( недавн она дебиан пересел, до этого центос настраивал, там проще отключался iptables
iptables -F же. А после ребута из конфига всё поднимется.
Я не спрашивал IP, я не настолько тупой. Как подключена внешка? VPN, шлюз, проброшенные порты с роутера? Ещё один из миллона вариантов?
извините я не хотел вас обидеть. просто хотел сказать что комп имеет статический адрес выданный местным провайдером.инет идет через шлюз провайдеровский. после команды iptables -F сервак заглох. придется ждать до понедельника ((
Да ничего, стиль у меня такой вопросов — заставляет людей задуматься )
Поднимите — пишите в жаббер, будем разбираться что к чему. Как обычно, welcome после 22 00 по мск.
Здесь http://www.artcom-ufa.ru/?posts/2011/05/19/ustanovka-i-nastroika-proftpd я описал как настроить proftpd на debian для небольшого хостинга, думаю во фряхе будет не сильно различаться ;-)
А как поступить, если нужно создать виртуальных пользователей, привязанных к домашним каталогам (или вложенным в них каталогам) реальных пользователей. Например, есть реальный пользователь user с домашним каталогом /home/user, а нам нужен виртуальный, например user_ftp, «домашним» для которого будет /home/user/www ? Причем, права user_ftp в этом каталоге будут идентичны правам просто user.
Создаете unix пользователя с хомяком /home/user/www, вносите его в группу user. Второй октет chmod становится для них общими правами (umask 002 поставить нужно будет). Шелл — по вкусу, я предпочитаю date.
wget’у не помешает —no-check-certificate
С чего бы он не помешал бы? Сертификат-то валидный.
Уебищный vsftpd, разработчики уроды сраные!!!
Чем они вам не угодили-то ) ?
я новичок в Linuxe, помогите глупому )))
сделал все как написано, но залогиниться на FTP не получается
vadim@debian-test1:~$ ftp localhost
ftp: connect to address ::1: Connection refused
Trying 127.0.0.1…
Connected to localhost.
220 Welcome to debian.pro ftpd!
Name (localhost:vadim): test
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
ftp>
ftp> exit
421 Service not available, remote server has closed connection
vadim@debian-test1:~$
то же самое и из локальной сети происходит.
подскажите, что я неправильно перепутал??? 8)
chroot_local_user=YES
Стала работать по другому в последних версиях vsftpd
Теперь chroot-директория должна принадлежать руту.
Нужно сделать chown root:root /home/test (или где там у него домашний каталог) и внутри создать каталоги нужные пользователю и на них сказать chown test:test /home/test/*
Добрый вечер.
Спасибо за статью, но почему то у меня не хочет ставится:
root@hs-python:~# aptitude install vsftpd
The following NEW packages will be installed:
vsftpd{b}
0 packages upgraded, 1 newly installed, 0 to remove and 16 not upgraded.
Need to get 147 kB of archives. After unpacking 385 kB will be used.
The following packages have unmet dependencies:
vsftpd: Depends: libssl1.0.0 (>= 1.0.0) which is a virtual package.
The following actions will resolve these dependencies:
Keep the following packages at their current version:
1) vsftpd [Not Installed]
Accept this solution? [Y/n/q/?] Y
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 16 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.
root@hs-python:~# /etc/init.d/vsftpd restart
-bash: /etc/init.d/vsftpd: No such file or directory
root@hs-python:~#
apt-get install libssl1.0.0 , потом снова vsftpd ставьте.
Не получилось, пишет:
root@hs-python:~# apt-get install libssl1.0.0
Reading package lists… Done
Building dependency tree
Reading state information… Done
Package libssl1.0.0 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package ‘libssl1.0.0’ has no installation candidate
root@hs-python:~# apt-get install libssl1.0.0
Reading package lists… Done
Building dependency tree
Reading state information… Done
Package libssl1.0.0 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package ‘libssl1.0.0’ has no installation candidate
Релиз дебиана то какой?
root@hs-python:/var/www/webapps/galstuki.biz# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 6.0.8 (squeeze)
Release: 6.0.8
Codename: squeeze
Выкиньте, репозитории для squeeze с основных зеркал удалили.
deb http://archive.debian.org/debian/ squeeze main contrib non-free
вместо всего сорслиста
Спасибо, вроде получилось =)