пятница, 24 июля 2009 г.

Домашний сервер (13?): FTP

"File Transfer Protocol (FTP) is a TCP protocol for uploading and downloading files between computers."
А по русски: протокол TCP для передачи файлов - это FTP; доступ к ftp (чтобы скачать что-то или свои файлы залить) бывает анонимным (когда вводится имя anonymous и адрес эл.почты вместо пароля) и авторизованным (когда на сервере должна быть заведена учетная запись для пользователя).
Я себе конечно же установлю 2-й вариант, свой сервер я стараюсь прятать, так что лишняя дырка "заходите гости дорогие" мне ни к чему. Устанавливать буду vsftpd (потому как серверов разных много, почему этот - а какая разница какой, если нет предпочтений?):
   1: sudo apt-get install vsftpd
После установки сервер настроен для работы в анонимном режиме; в папке /home появилась папка ftp - папка созданного для ftp пользователя; все файлы/папки, созданные в этой папке, будут доступны всем желающим, правда прав на запись в эту папку ни у кого же, кроме пользователя ftp нет, так что придется или переписывать с sudo, или изменить права на папку (или поменять папку, про это дальше). Проверим (с виндового компьютера для чистоты эксперимента):
   1: C:\Documents and Settings\VMware>ftp ubuntu
   2: Connected to ubuntu.
   3: 220 (vsFTPd 2.0.7)
   4: User (ubuntu:(none)): anonymous
   5: 331 Please specify the password.
   6: Password:
   7: 230 Login successful.
   8: ftp> ls
   9: 200 PORT command successful. Consider using PASV.
  10: 150 Here comes the directory listing.
  11: IMG_1120.jpg
  12: IMG_1135.jpg
  13: IMG_1179.jpg
  14: IMG_1193.jpg
  15: 226 Directory send OK.
  16: ftp: 56 bytes received in 0,00Seconds 56000,00Kbytes/sec.
  17: ftp>exit # в виндовом ftp-клиенте не сработало
  18: ftp>quit
Файлы *.jpg я туда для наглядности кинул из-под админа, пользователь, подключившийся анонимно, ничего, кроме как скачать файлы, не может:
   1: ftp> put
   2: Local file c:\temp\putty.exe
   3: Remote file putty.exe
   4: 200 PORT command successful. Consider using PASV.
   5: 550 Permission denied.
   6: ftp>
Командой put я пытался загрузить в текущую папку на ftp-сервере файл из папки c:\temp - не получилось, правов нету.. Последнее про анонимный ftp - если не устраивает папка /home/ftp для хранения файлов - можно "переназначить" ее на любую другую:
   1: sudo usermod -d /mnt/media ftp
Все, с этого момента я разрешил любому пользователю анонимно зайти на мой ftp и скачать любой файл из моей папки с медиа.. Единственное, что я забыл - если повторять все мною написанное, то зайти на ftp по какой-то причине не получится - файрволл не пустит! Я забыл о правиле в /etc/shorewall/rules, которое бы разрешило работу с ftp:
   1: FTP/ACCEPT    loc    $FW
этим разрешается доступ из локальной сети, если нужен доступ из интернета - то
   1: FTP/ACCEPT    net    $FW
С анонимным доступом все; но перед тем, как идти дальше, надо разобраться с кириллиицей: вот я в винде создал файл, обозвал его "Новый текстовый документ.txt", скопировал в папку /mnt/media, смотрю теперь список файлов в ftp:
   1: 230 Login successful.
   2: ftp> cd media
   3: 250 Directory successfully changed.
   4: ftp> ls
   5: 200 PORT command successful. Consider using PASV.
   6: 150 Here comes the directory listing.
   7: pictures
   8: ╨Э╨╛╨▓╤Л╨╣ ╤В╨╡╨║╤Б╤В╨╛╨▓╤Л╨╣ ╨┤╨╛╨║╤Г╨╝╨╡╨╜╤В.txt
   9: 226 Directory send OK.
  10: ftp: 62 bytes received in 0,00Seconds 62000,00Kbytes/sec.
  11: ftp>
"Такой футбол нам не нужен!" ( (с) Озеров кажется) Хотя с другой стороны - откроем в виндовом эксплорере наш фтп (заходит кстати без переспрашивания имени/пароля - наверное автоматически пробует зайти анонимно): С именем все в порядке.. надо будет позже разобраться, в чем дело, потому что в консоли ls выдает "правильное" имя файла, а в ftp - нет (кстати, поддержка кирилицы в консоль добавляется
   1: sudo apt-get install console-cyrillic
Для того, чтобы настроить сервер "только для белых"только для своих, надо поправить конфиг фтп-сервера, который лежит как обычно в /etc с именем как обычно имя_сервиса.conf (ну есть и исключения, но все же обычное дело):
   1: sudo pico /etc/vsftpd.conf
   2: # запрещаем анонимный доступ
   3: anonymous_enable=NO
   4: # разрешаем доступ юзерам, в т.ч. запись
   5: local_enable=YES
   6: write_enable=YES
Там же можно разрешить запись для анонимов, но делать этого я не буду После перезапуска сервиса (sudo /etc/init.d/vsftpd restart) - отлично, анонима больше не принимают, а я могу зайти, по ls вижу содержимое своей домашней папки - и все остально е в общем-то тоже.. Для большей "секьюрности" можно ограничить пользователей в доступе только к своим домашним каталогам - для этого надо найти и раскоментить строчку
   1: chroot_local_user=YES
Ну и вообще там есть немножко настроек, которые можно потюнинговать (что и для чего можно почитать вот здесь) Осталось только все же разобраться с русскими названиями файлов.. Есть оказывается русский комьюнити, который занимается модами этого ftp-сервера, в т.ч. и связанными с кодировками здесь; только форум я посмотрел и не понял до конца, решит ли модденый сервер проблему, когда виндовые клиенты видят русские имена нормально, а консольные ftp-клиенты - нет.. вот обсуждение
Пока оставлю как есть, если сильно понадобится и дойдут руки/сообразят мозки - будет продолжение..

2 комментария:

  1. Этот комментарий был удален автором.

    ОтветитьУдалить
  2. Добрый день fat.hamster
    Прежде всего хочу поблагодарить за Ваш блог. Я внимательный его читатель. И все Ваши инструкцию воплащаю в жизнь. Также хочу сказать, что проблемой FTP я уже занимаюсь несколько дней и был очень рад увидеть эту статью. Однако вижу, что проблемы русских названий файлов не решена в этой статье также.

    По поводу "русских букв"... Есть у меня друг, который уже давно "сидит" на линухе. Так вот, как объясняет мой друг, проблема состоит в том что на сервере Ubuntu установлена кодировка UTF-8 а в винде Win1251. Должен быть механизм перекодировок названий файлов. Что касается проги "vsftpd" это замечательный FTP который быстро настраивается и работает "с коробки" однако:
    - В программе vsftpd есть проблема "первой буквы" если в названии файла первая буква идет латиницей , или например нижнее подчеркивание , то файл с названием "_текстовый файл.txt" будет отображаться нормально (сам не проверял, это со слов друга).
    - Если использовать программу из сайта http://vsftpd.devnet.ru то эта программа решает частный случай. В файле настройки явным образом указывается кодировка на сервере ( у нас это UTF-8) и на клиенте (например win1251) и перекодировка производится "строго". Возникнут вопросы когда к серверу подключаются клиенты с разными кодировками.
    - Если к серверу подключается машина с windows то проблему можно решить на стороне клиента используя специальную программу (например http://www.filezilla.ru ) которая умеет передвавать на сервер названия файлов в UTF-8. Однако не каждому клиенту объяснишь что ему использовать. :)

    А теперь внимание !!! По совету моего друга, нужно использовать как FTP сервер программу ProFTPd именно она умеет понимать "кто подключился" и на стороне сервера коректно решает вопрос кодировок. ProFTPd более сложная программа с точки зрения настроек, но и возможности и скорость работы выше чем vsftpd.

    Надеюсь мои комментарии будут полезны автору блога.
    С наилучшими пожеланиями
    Gurom

    ОтветитьУдалить