Найти тему
Журнал «Код»

Что такое FTP и зачем оно нужно

Оглавление

Это очень надёж­но, но очень небез­опас­но.

Когда интер­нет толь­ко зарож­дал­ся, но уже были ком­пью­тер­ные сети, воз­ник­ла потреб­ность пере­да­вать фай­лы от одно­го ком­пью­те­ра к дру­го­му. В 1971 году кана­лы пере­да­чи дан­ных были не такие надёж­ные (и не такие быст­рые), как сей­час, поэто­му нужен был инстру­мент, кото­рый помо­жет обме­ни­вать­ся доку­мен­та­ми друг с дру­гом на рас­сто­я­нии.

Основ­ные тре­бо­ва­ния были такие: про­сто­та рабо­ты и надёж­ность при отправ­ке и полу­че­нии. Таким инстру­мен­том стал FTP-протокол.

Принцип работы

FTP рас­шиф­ро­вы­ва­ет­ся как File Transfer Protocol — про­то­кол пере­да­чи фай­лов. Он отли­ча­ет­ся от дру­гих про­то­ко­лов тем, что если в про­цес­се пере­да­чи воз­ни­ка­ет какая-то ошиб­ка, то про­цесс оста­нав­ли­ва­ет­ся и выво­дит­ся сооб­ще­ние для поль­зо­ва­те­ля. Если оши­бок не было, зна­чит, поль­зо­ва­тель полу­чил имен­но тот файл, кото­рый нужен, в цело­сти и без недо­ста­ю­щих эле­мен­тов.

По FTP-протоколу мож­но ска­чи­вать что угод­но: филь­мы, музы­ку, доку­мен­ты, про­грам­мы, драй­ве­ры и кар­тин­ки. Сей­час мно­гие про­из­во­ди­те­ли желе­за выкла­ды­ва­ют драй­ве­ры от устройств на FTP-серверы, что­бы их мог­ли ска­чать все жела­ю­щие.

В кор­по­ра­тив­ной сре­де FTP исполь­зу­ет­ся для орга­ни­за­ции локаль­но­го хра­ни­ли­ща внут­рен­них доку­мен­тов и фай­лов для рабо­ты. Напри­мер, там могут хра­нить­ся видео­лек­ции или архив­ные ска­ны доку­мен­тов. Ещё FTP поз­во­ля­ет загру­жать свои фай­лы на сер­вер, что­бы их мог ска­чать любой жела­ю­щий.

Про­грам­ми­сты ино­гда исполь­зу­ют такие сер­ве­ры для обме­на фай­ла­ми и для бэка­пов кода, хотя мно­гие для это­го пред­по­чи­та­ют GIT. Про него ещё пого­во­рим отдель­но.

Клиент и сервер

Для рабо­ты по FTP нуж­ны двое: FTP-сервер и FTP-клиент. Что дела­ет сер­вер:

  • обес­пе­чи­ва­ет доступ по логи­ну и паро­лю к нуж­ным фай­лам;
  • пока­зы­ва­ет поль­зо­ва­те­лю толь­ко те фай­лы и пап­ки, кото­рые он может про­смат­ри­вать или загру­жать в них;
  • сле­дит за каче­ством пере­да­чи и смот­рит, что­бы не было оши­бок;
  • управ­ля­ет пара­мет­ра­ми соеди­не­ния в пас­сив­ном режи­ме.

Так как FTP при­шёл к нам из вре­мён UNIX-систем, то любое соеди­не­ние тре­бу­ет логи­на и паро­ля. Если у поль­зо­ва­те­ля его нет, сер­вер его не про­пу­стит. Но что­бы сде­лать фай­лы доступ­ны­ми для всех, исполь­зу­ют ано­ним­ный режим. В нём логи­ном будет сло­во anonymous, а паро­лем — любой адрес элек­трон­ной почты. Совре­мен­ные бра­у­зе­ры уме­ют сами захо­дить на ано­ним­ные FTP-серверы и под­став­лять почту. Со сто­ро­ны это выгля­дит так, как буд­то ника­ко­го логи­на и паро­ля нет, но они есть.

Когда запус­ка­ет­ся FTP-сервер, ему гово­рят: «Ува­жа­е­мый сер­вер, вот спи­сок фай­лов и папок, кото­рые нуж­но пока­зы­вать на сер­ве­ре. Если к тебе посту­чит­ся поль­зо­ва­тель с таким-то логи­ном и паро­лем, то пока­жи ему всё, а если с вот таким логи­ном — то дай ему одну толь­ко эту пап­ку. Ано­ни­мов не пус­кать». Ещё один обя­за­тель­ный пара­метр — адрес сер­ве­ра и порт, по кото­ро­му будет идти пере­да­ча фай­лов.

Что­бы под­клю­чить­ся к сер­ве­ру, нуж­на спе­ци­аль­ная про­грам­ма, их ещё назы­ва­ют FTP-клиентами. Для каж­дой опе­ра­ци­он­ной систе­мы есть мно­го сво­их кли­ен­тов, напри­мер, FileZilla или CuteFTP. Те, кто рабо­та­ет в Linux-подобных систе­мах, часто исполь­зу­ют команд­ную стро­ку.

Интер­фейс CuteFTP для MacOS.
Интер­фейс CuteFTP для MacOS.
Рабо­та с FTP в команд­ной стро­ке.
Рабо­та с FTP в команд­ной стро­ке.

Такая схе­ма рабо­ты часто исполь­зу­ет­ся в вир­ту­аль­ных хостин­гах, когда нуж­но полу­чить доступ к содер­жи­мо­му сай­та или изме­нить кон­фи­гу­ра­ци­он­ные фай­лы.

В чем смысл вообще

Ну и каза­лось бы — что меша­ет пере­да­вать фай­лы, как обыч­но, через сай­ты по про­то­ко­лу HTTP? Пол­но же сай­тов и фору­мов, на кото­рых лежат фай­лы, и их мож­но спо­кой­но ска­чать.

А раз­ни­ца вот в чем:

  • Для FTP не нужен сайт, то есть веб-интерфейс. Не нуж­но запус­кать веб-сервер, настра­и­вать шаб­ло­ны выво­да спис­ка фай­лов и под­ни­мать отдель­ную про­грам­му, кото­рая будет нам отда­вать эти фай­лы (типа Ворд­прес­са). FTP — это как доступ к уда­лен­ной пап­ке: ты сра­зу видишь фай­лы и можешь их качать, без посред­ни­ков. А в вебе нуж­на какая-то про­грам­ма, кото­рая «нари­су­ет» тебе фай­ло­вую систе­му и поста­вит ссыл­ки на фай­лы.
  • В FTP уже реа­ли­зо­ва­ны вопро­сы авто­ри­за­ции и прав. А в вебе их нуж­но созда­вать: напри­мер, ста­вить тот же Ворд­пресс и к нему при­кру­чи­вать пла­ги­ны с систе­мой досту­па. Или настра­и­вать Apache, гене­ри­ро­вать клю­чи досту­па, рас­кла­ды­вать кон­фи­гу­ра­ци­он­ные фай­лы по пап­кам — это гораз­до менее эле­гант­но, чем настрой­ка FTP.
  • В FTP мож­но раз­ре­шить или запре­тить отдель­ным поль­зо­ва­те­лям загру­жать фай­лы на FTP-сервер. В вебе загруз­ка фай­лов от поль­зо­ва­те­ля на сер­вер — это на поря­док более слож­ная зада­ча.

Уязвимости и надёжность

Сам по себе FTP-протокол надё­жен и гаран­ти­ро­ван­но достав­ля­ет поль­зо­ва­те­лю нуж­ные фай­лы, если с соеди­не­ни­ем всё в поряд­ке.

Про­бле­ма в том, что про­то­кол изна­чаль­но был неза­щи­щён­ный, и пред­по­ла­га­лось, что канал пере­да­чи дан­ных все­гда надё­жен. Поэто­му в FTP всё пере­да­ёт­ся в откры­том виде: фай­лы, паро­ли, име­на поль­зо­ва­те­лей и любые дан­ные.

Сей­час по умол­ча­нию пред­по­ла­га­ет­ся, что каж­дый канал — нена­дёж­ный, и что дан­ные нуж­но допол­ни­тель­но шиф­ро­вать. FTP это­го не под­дер­жи­ва­ет. Если кто-то будет пере­хва­ты­вать ваш Wi-Fi-трафик или под­клю­чит­ся к вашей локаль­ной сети, то он смо­жет пере­хва­тить все эти дан­ные и ска­чать их себе, парал­лель­но с вами.

Ещё есть вопрос без­опас­но­сти вхо­да: по умол­ча­нию у FTP-протокола нет защи­ты от под­бо­ра паро­ля и попы­ток вхо­да, поэто­му кто-то может про­сто пере­брать доступ­ные паро­ли, что­бы полу­чить доступ к пап­кам. Если вы виде­ли в филь­мах про хаке­ров, как они там пере­би­ра­ют паро­ли при вхо­де — это вполне веро­ят­ная ситу­а­ция для FTP.

  • С точ­ки зре­ния совре­мен­ной без­опас­но­сти пра­виль­ным реше­ни­ем будет исполь­зо­вать одну из реа­ли­за­ций шиф­ро­ван­но­го FTP (FTPS, SFTP) или поль­зо­вать­ся FTP через VPN.

Подписывайтесь на наш канал, чтобы разбираться в технологиях!