05 августа 2010

FTP-сервер своими руками? Это просто!

В интересное время живем! Технический прогресс понемногу проникает в широкие массы населения, никогда об этом и не слышавшие. Что такое сервер? Многие скажут, что это такой шкаф, или специальный компьютер, стóит кучу денег, очень мощный, предназначен для массового хранения информации размером в несколько сот терабайт. Некоторые добавят, что у сервера нету мышки, клавиатуры и монитора. В общем, сервер — это что-то не из обычного, повседневного, мира.

Все опрошенные будут отчасти правы, если иметь ввиду только продукцию корпорации Майкрософт®™. На сервер устанавливается специальная, серверная, версия Windows®™. Пользователи обычной, домашней, версии даже не могут подумать о том, чтобы сделать из своего домашнего компьютера сервер.

Я оставлю Майкрософт®™ с их Windows®™ в стороне, а поговорю сегодня о том, как легко это делается в Linux. Линуксоиды в своем большинстве — люди увлеченные, технического склада мышления, и создали за годы развития Linux много полезных технических инструментов. Это уже потом в Linux добавляются игры, офисы и красивые рабочие столы...

Один из таких инструментов — FTP-сервер Pure-FTPd. Что такое FTP? Это протокол, при помощи которого можно обмениваться файлами. Подключившись по сети к FTP-серверу, мы увидим «на том конце» папки и файлы, всё в точности так же, как и на любом домашнем компьютере. В простейшем случае «зайти» на FTP-сервер можно просто из браузера (испытано на Opera™ и Firefox). Браузер покажет содержимое папок и позволит скачать файлы. Если хочется большего (для профессиональной работы), то нужно использовать FTP-клиент, например, встроенный в TotalCommander™ или свободный gFTP, или даже дополнение к Firefox — FireFTP.

Итак, что у меня есть? Нетбук Acer AspireOne, установленная операционка SliTaz 3.0, соединение с интернет через мобильного оператора (тут можно улыбнуться, или даже расхохотаться :)

SliTaz имеет богатые репозитории, удобный пакетный менеджер с поиском, маленькие по размеру пакеты (благодаря сжатию lzma™), я к нему привык, и всё описанное делается действительно очень быстро. Есть информация, что описанные дальше программы идут «из коробки» в дистрибутиве PuppyRus, что ж, значит им немного легче :)

Установка программ, подключение дисков и выход в интернет — удел суперпользователя, также известного как root. Поэтому, открываем терминал XTerm и становимся этим супер-человеком — вводим команду su, нажимаем Enter, вводим пароль («из коробки» этот пароль, как и имя, тоже root; при вводе он не отображается) и снова Enter:


tux@slitaz:~$ su
Password: 
root@slitaz:/home/tux# 

Символ приглашения обычного пользователя ($) сменился на (#), так что задумайтесь об этом :)

Теперь установим сервер Pure-FTPd — маленькую программу (пакет размером всего 72 КБ):


root@slitaz:/home/tux# tazpkg get-install pure-ftpd

Готово!

Буква d в названии Pure-FTPd, к слову, расшифровывается как daemon. Это — процесс, работающий незаметно, в тени. В среде Windows™ такие процессы называются «службы», в среде Linux их называют «демонами», хотя, более подходящее слово — «домовой».

Теперь всё в том же терминале, с правами root, запускаем нашего «домового» следующей командой:


root@slitaz:/home/tux# pure-ftpd -bBADHk 95 -E

Скажу сразу, что этот вариант работает у меня, а тех, кто хочет подробно ознакомится с параметрами запуска PureFTPd, я отсылаю на man-страницу (англ.) или просто в интернет, благо, описаний там хватает. Расскажу лишь, что число 95 в этой команде значит, что сервер откажется принимать файлы извне, когда ваш диск будет заполнен на 95 %. С числом 90 у меня были проблемы, пришлось увеличить :)

Теперь, чтобы другой компьютер мог соединиться с нашим FTP-сервером, мы должны сообщить наш IP-адрес. Посмотреть его можно в свойствах соединения, или, просто перейдя на сайт 2ip.ru. Я узнал свой IP-адрес, в текущей сессии он равен 178.133.64.151 (но стоит мне завершить соединение и начать по-новой, как оператор даст мне другой IP).

Теперь передаем другу наш IP, можно сразу в виде ссылки, которую можно открыть в любом браузере ­ftp://178.133.64.151. Друг переходит по ссылке и... (а если это не друг?) наш сервер спрашивает у него имя пользователя и пароль. Что еще за имена? Мы же ничего такого нигде не вводили!

А это просто имя любого пользователя на этом компьютере и его пароль, чтобы войти в систему. По умолчанию, в SliTaz таких пользователей два:

  • пользователь root с паролем root, домашняя папка /root;
  • пользователь tux с пустым паролем, домашняя папка /home/tux.

Введя соответствующее имя и пароль, вы попадете в домашнюю папку пользователя. Хмм! Я задумался об этом и сменил пароли root и tux. Для этого в том же терминале с правами root даем команду на смену пароля, вводим новый пароль, затем вводим новый пароль еще раз. Пароль при этом на экране не отображается. После первого ввода пароля умная утилита может высказать свои комментарии, мол, пароль слишком короткий (Bad password: too short), либо слишком слабый (Bad password: too weak), либо содержит в себе имя пользователя (Bad password: similar to username). Правда, эти комментарии остаются всего лишь пожеланиями, т.к. новый пароль всё равно принимается («я предупредил, а там смотри сам»). Нормальный пароль должен быть не короче шести символов, содержать в себе большие и маленькие латинские буквы и не быть похожим на имя пользователя (в прямом или обратном чтении). Вот, как я сменил пароли tux и root:


root@slitaz:/home/tux# passwd tux
Changing password for tux
New password:
Retype password:
Password for tux changed by root

root@slitaz:/home/tux# passwd root
Changing password for root
New password:
Retype password:
Password for root changed by root

root@slitaz:/home/tux#

Теперь другу можно передать наши IP, имя пользователя и пароль. Для доступа через браузер, имя и пароль можно сразу прописать в ссылку: ftp://имя:пароль@IP-адрес, например, ftp://tux:Hacker@178.133.64.151.

Но всё-равно как-то неуютно :) Каким бы близким и хорошим друг ни был, есть место и для личной жизни со всеми картинками для взрослых, фотографиями и документами, которые не хотелось бы показывать никому. (Да, всё это можно хранить не в домашней папке.) К тому же, в домашней папке пользователя полно файлов и папок, содержащих настройки, в общем, можно споткнуться и сломать ногу :) (А вот с этим уже ничего не поделаешь.)

Простое решение — добавляем нового пользователя в систему, и даем другу его имя и пароль. Вот, опять в том же терминале, от того же root:


root@slitaz:/home/tux# adduser myftp
Changing password for myftp
New password:
Retype password:
Password for myftp changed by root

root@slitaz:/home/tux# 

В результате, в системе появится новый пользователь myftp (вы можете выбрать любое имя), и для него будет создана пустая папка /home/myftp — в нее мы и будем складывать все, что мы хотим отдать друзьям или будем получать от них. Не забывайте следить за правами доступа к файлам, если папка /home/myftp находится не на разделе с файловой системой FAT или NTFS (как у меня).

Можно пойти дальше и создать в этой папке две подпапки:

  • pub — для доступа только на чтение;
  • incoming — для входящих файлов.

Но это уже попахивает профессионализмом и не требуется для наших скромных целей (хотя и не возбраняется). Такой подход (вкупе с анонимным доступом к pub) применяется на многих FTP-серверах в интернете.




На этом статью можно было бы и закончить, но хочется рассказать еще об одной программке, кто же откажется от комфорта? Это программа со страшным названием CurlFTPfs :) Устанавливаем ее (пакет размером 36 КБ):


root@slitaz:/home/tux# tazpkg get-install curlftpfs

Как и при установке Pure-FTPd, могут автоматически установиться пакеты-зависимости общим размером не более пары сотен килобайт.

Да! Я же не сказал, для чего нужна эта программка. С ее помощью можно подключить (смонтировать) любой удаленный FTP-сервер к папке в своей файловой системе. После этого можно будет перемещаться по папкам FTP-сервера с помощью любимого файлового менеджера, как у себя дома! Вот, это и есть тот самый комфорт :)

Сначала, один раз и навсегда, создадим папку, к которой мы будем подключать FTP-серверы и разрешим к ней доступ всем пользователям нашей системы:


root@slitaz:/home/tux# mkdir /mnt/ftp

root@slitaz:/home/tux# chmod a+w /mnt/ftp

root@slitaz:/home/tux# 

Теперь, например, подключимся к FTP-серверу AltLinux:


root@slitaz:/home/tux# curlftpfs ftp://ftp.altlinux.org/ /mnt/ftp

Теперь можно закрыть терминал — права root нам больше (до конца этой статьи) не понадобятся. Открываем файловый менеджер PCManFM как обычный пользователь (вы же не работаете всё время под root?!), заходим в папку /mnt/ftp и через короткое время видим там две папки — pub и pvt. Это значит, что мы удачно подключились к серверу и теперь можем легко перемещаться по его папкам, скачивать (и закачивать, если позволено) файлы через привычный файловый менеджер.

Если теперь соединить воедино две части статьи, то получается, что друг (или вы сами с удаленного компьютера), введя следующую команду, сможет скачивать и закачивать файлы:


root@slitaz:/home/tux# curlftpfs ftp://myftp:n0crAcK@178.133.64.151 /mnt/ftp -o allow_other

или

root@slitaz:/home/tux# curlftpfs ftp://178.133.64.151 /mnt/ftp -o user=myftp:n0crAcK -o allow_other

Длинные и труднозапоминающиеся команды можно оформить в виде скриптов, вынести значки для них на рабочий стол, либо вообще прописать в автозагрузку — пусть ваша фантазия подскажет это вам!


В заключение статьи говорю большое спасибо DdShurick и RulllJazzz, без которых эта статья бы не появилась.

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

  1. Хочется отметить ещё один момент по поводу ссылки. В ней можно указывать не просто IP, а путь к конкретной директории.

    ftp://имя:пароль@IP-адрес
    ftp://user:1234@ftp.site.com

    ftp://имя:пароль@IP-адрес
    ftp://user:1234@ftp.site.com/folder

    ОтветитьУдалить
  2. Немаловажное дополнение, Павел!
    Оно позволит повторно сразу зайти в нужную папку, не проходя весь путь от «корня».

    Например, ftp://ftp.altlinux.org/pub/distributions/OpenMusic/

    ОтветитьУдалить
  3. Анонимный06 марта, 2011 03:55

    Дружище.
    Я так понял что ты гуру в данном дистре. Не могу настроить VPN - честно плясал с бубном двое суток с применением интернета используя как основной вот этот мануал:
    http://doc.slitaz.org/ru:handbook:networkconf
    Но успеха так и не добился.
    Имеются: AMD850, 456 Mb RAM, RTL8139
    всё становится вроде как для старта нормально сетевая норм - eth0 - отдупляется по DHCP, корректно получает айпишник - И ВСЁ!!!
    VPN не могу прописать хоть тресни -
    1) из протоколов упрямо остаются PAP, CHAP, и EAP - и нихрена не удаляются (как удалить через конфиг файлы - так и не допер)
    2) PPTP протокола для настройки так и не нашел :( только PPOE а у меня инет через PPTP
    Станислав stasichhka@mail.ru

    ОтветитьУдалить
  4. Честно говоря, никакой я не гуру :)
    Я просто поделился с вами одним трюком, который освоил.
    В теперешней системе, Linux Mint 10 через их настройщики ничего не получается. Кстати, когда я пришёл к брату и захотел немного воспользоваться его безлимитом, в Минте так ничего и не получилось. Стряхнул пыль со Слитаза, запустил бокс с настройкой сети, дальше кнопочку, где листик с карандашом, в открывшемся файле изменил IP, маску сети, пуск, всё завелось!
    А эти странные сокращения (VPN, PPTP, PPOE) я вроде бы и слышал, но они мне ни о чём не говорят, увы.

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