SFTP против FTPS: ключевые отличия.

23.05.2019

У меня есть веб сервер без возможности удаленного доступа к нему из вне, обслуживает несколько сайтов. Он стоит за фаерволом, проброшен 80-й порт, для работы сайтов этого достаточно. Понадобилось предоставить оперативный доступ сторонних разработчиков к исходным текстам одного из сайтов. У меня неожиданно возникли затруднения с этим, пришлось повозиться.

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

В один прекрасный день решили обновить один из сайтов. Попросили предоставить доступ к исходникам. В принципе, ничего сложного, думал за 5-10 минут все сделаю. Пошел по простому пути. Решил , благо совсем недавно написал обширную статью на эту тему.

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

Тут началось самое интересное. Я давно не работал с ftp и подзабыл как там с ним и что. А проблем с ним навалом. Простого проброса 21-го порта недостаточно. Я не смог подключиться извне ни в активном, ни в пассивном режиме. На сервере установлен firewall pf, я с ним не очень знаком, почти не работал. Стал читать, как организуют проброс ftp на нем. Оказалось, что необходимо поднять локальный FTP proxy, редиректить на него все подключения и он динамически будет создавать правила для корректной работы ftp.

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

Решил не терять время на ковыряния не нужного для меня фаервола и пойти другим путем. Естественно, подумал сразу на sftp . Там нет таких проблем с пробросом портов. Единственное, чего я не делал раньше, так это ограничение доступа по sftp в пределах какого-то каталога. Но как оказалось это не сложно, задача легко и быстро решается.

Добавляем пользователя ssh в chroot директорию

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

# useradd -s /sbin/nologin sftpuser

# mcedit /etc/ssh/sshd_config #Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp Match User sftpuser ChrootDirectory /var/www/site.ru ForceCommand internal-sftp

Сохраняем и перезапускаем ssh. В случае с centos 6 команда такая:

# service sshd restart

Настройка подключения sftp с ограничением доступа за пределами конкретной папки закончена.

Ошибка ssh bad ownership or modes for chroot directory

Можно пробовать подключаться через sftp клиент. Я в данном случае предпочитаю пользоваться бесплатным WinSCP . Скорее всего вы не подключитесь и получите ошибку в лог файле /var/log/secure :

Apr 11 14:53:20 web sshd: Accepted password for sftpuser from 75.37.234.139 port 40923 ssh2 Apr 11 14:53:20 web sshd: pam_unix(sshd:session): session opened for user sftpuser by (uid=0) Apr 11 14:53:20 web sshd: fatal: bad ownership or modes for chroot directory "/var/www/site.ru" Apr 11 14:53:20 web sshd: pam_unix(sshd:session): session closed for user sftpuser

Ошибка возникает, если владелец необходимой папки не root и права доступа на запись есть у кого-то еще, кроме владельца. Такой вот нюанс. В этом есть некоторое неудобство, но в данном случае лично мне это не помешало. Делаем владельцем каталога /var/www/site.ru рута, у остальных убираем права на запись в него. Дальше в этом каталоге две папки — одна с логами веб сервера для виртуального хоста, другая с исходниками сайта. На эти папки может быть любой владелец и права доступа. Так что подключившийся пользователь сможет без проблем работать с исходниками сайта.

Заключение

На смену ftp приходит sftp. Я давно пользуюсь этим для доступа к отдельным файлам на сервере. Но есть большой минус — скорость по sftp низкая. Когда приходится качать что-то объемное, начинаешь грустить. Это нужно учитывать. Для работы с исходниками сайтов существующей скорости вполне достаточно. Для передачи объемных файлов нужно искать другие варианты подключения, тот же ftp, либо через vpn cifs или nfs.

Еще плюс такого решения — можно настроить авторизацию по сертификату. Получается удобно и безопасно. Легко подключиться по 22-м порту, плюс пароли не нужны, авторизуешься автоматически сертификатом. Настроить это не сложно, в интернете масса инструкций на тему авторизации по ssh с помощью сертификатов.

Онлайн курс "Администратор Linux"

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Проверьте себя на вступительном тесте и смотрите программу детальнее по.

Этот документ поможет Вам выполнить подключение к Вашему виртуальному серверу по протоколам SSH и SFTP.

SSH (англ. Secure SHell - «безопасная оболочка») - сетевой протокол сеансового уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений (например, для передачи файлов). Сходен по функциональности с протоколами Telnet и rlogin, но, в отличие от них, шифрует весь трафик, включая и передаваемые пароли.

SFTP (англ. SSH File Transfer Protocol) - протокол прикладного уровня, предназначенный для копирования и выполнения других операций с файлами поверх надёжного и безопасного соединения. Существует заблуждение, что SFTP это просто обычный FTP, работающий поверх SSH. В действительности SFTP - это новый протокол, разработанный с нуля.

Данные для подключения к виртуальному серверу

Все данные, необходимые для подключения к Вашему виртуальному серверу по SSH, Вы можете получить на главной странице панели управления .

Нам необходимо знать IP адрес виртуального сервера (1) и пароль для пользователя root (2).

Получив необходимые данные для подключения, можно приступать непосредственно к процессу.

Подключение к виртуальному серверу по SSH из Mac OS X или Linux

Пользователи операционных систем Mac OS X или Linux могут использовать стандартное приложение terminal для подключения к виртуальному серверу по SSH протоколу. Для подключения к Вашему виртуальному серверу используйте следующую команду (измените 188.127.236.62 на IP адрес вашего виртуального сервера):

Ssh [email protected]

Так выглядит процесс подключения к виртуальному серверу в терминале Unix или Mac OS X:

Ssh [email protected] The authenticity of host "188.127.236.62 (188.127.236.62)" can"t be established. RSA key fingerprint is 4f:e8:84:42:51:80:48:70:45:6c:69:47:79:e7:c0:56. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added "188.127.236.62" (RSA) to the list of known hosts. [email protected]"s password: #

Подключение к виртуальному серверу по SSH из Windows

Пользователи операционной системы Windows могут использовать для соединения с виртуальным сервером по протоколу SSH программу PuTTY. PuTTY - очень популярный telnet/ssh клиент, распространяется бесплатно.

Официальный сайт программы - http://www.chiark.greenend.org.uk/~sgtatham/putty/ Русскоязычный сайт поддержки - http://putty.org.ru/

После запуска программы вы увидите следущее окно:

Введите в поле “Host Name (or IP address)” IP-адрес Вашего виртуального сервера (на примере вводится helios.asu). Убедитесь, чтобы в пункте “Protocol” была выбрана радио-кнорка “SSH”.

Также, для того, чтобы каждый раз не вводить адресс и тип протокола вы можете сохранить сессию. Для этого введите ее название в поле “Saved Sessions” и нажмите кнопку “Save”.

После этого ваша сессия появится ниже в списке. Для того чтобы загрузить сохраненную сессию нужно выбрать ее из списка и нажать кнопку “Load”.

Для подключения нажмите кнопку “Open” внизу формы. Может появиться следующее сообщение:

Если вы уверены в том, что подключаетесь к нужному хосту, то нажмите кнопку “Yes/Да”. Появится следующее:

Введите свой логин (root), затем пароль. Перед вами консоль системы:

Для выхода введите:

Подключение к виртуальному серверу по SFTP

По умолчанию вам не нужно настраивать FileZilla, мы просто сразу начнём работать с программой.

Для того, чтобы подключиться к SFTP-серверу, введите IP-адрес вашего виртуального сервера в поле быстрого подключения (вместо example.com, как показано на рисунке ниже введите sftp://ip_адрес_вашего_vps). Введите порт подключения в соответствующее поле, для SFTP - 22. Введите имя пользователя и пароль, в соответствующие поля. Нажмите на кнопку “Быстрое соединение” или нажмите Enter для подключения.

Отметим, что панель быстрого подключения, как ясно из названия, приспособлена для быстрых подключений, т.е. у вас нет возможности редактировать список из 10-ти последних подключений. Для сохранения параметров подключения используйте Менеджер Сайтов.

Используйте Менеджер сайтов FileZilla для задания определённых параметров сайта и подключения к нужному SFTP-серверу. В Менеджере сайтов у вас есть возможность сохранять свои подключения и настраивать большее число параметров, чем доступно в панели быстрого подключения.

После подключения, в правой стороне главного окна будет отображён список файлов и директорий. Текущая директория будет показана в редактируемом поле в верхней части. Ниже отображается удалённое дерево директорий, а ещё ниже - содержимое текущей удалённой директории. Перейти в другую директорию можно тремя разными путями. Первый: сделайте двойной щелчок на директории в списке. Второй: кликните на директории в дереве. Последний способ: введите имя директории в редактируемое поле и нажмите Enter. Обратите внимание на директорию “..”, присутствующую практически во всех остальных директориях. Эта ссылка позволяет вам перейти к родительскому каталогу текущей директории.

Навигация на вашем компьютере работает почти так же, как и на сервере. Текущая локальная директория и дерево каталогов по умолчанию отображаются на левой стороне главного окна.

Подробную документацию по работе с FileZilla, Вы можете найти на официальном сайте по адресу http://filezilla.ru/documentation/Using

Условия использования документа

Материал представленный на данной странице может быть использован Вами по своему усмотрению. Разрешается копирование и распространение предоставленного материала без изменения содержания и без предварительного уведомления администрации Clodo.ru .

Мы будем признательны Вам за сообщения об ошибках в представленной документации и за предложения об улучшении документации. По этим вопросам необходимо обращаться по адресу [email protected] . При обращении не забывайте указывать URL-адрес публикации.

Сегодня по плану - все о технологии FTP. Расскажу, что такое ftp-серверы и аккаунты (доступы), где используются и как применяется.

FTP — что это такое?

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

Чтобы передать файл по TCP-порту через протокол ФТП, FTP-клиенту нужно связаться с настроенным и запущенным FTP-сервером. Подобная организация передачи файлов наиболее часто используется веб-разработчиками - когда с ПК нужно получить доступ к «внутренностям» сайта и что-нибудь там изменить, улучшить.

Как и HTTP (что это такое?), протокол FTP построен на «клиент-серверной» архитектуре и использует несколько сетевых соединений, чтобы передавать команды и файлы между «клиентом» и «сервером».

Доступ к сайту по фтп аккаунту - что это? Это функция, позволяющая просматривать, изменять, скачивать и загружать файлы. Для получения клиентом доступа к FTP-серверу сайта нужно пройти аутентификацию - ввести логин и пароль. Для отправки имени используется команда «USER», для отправки пароля - команда «PASS».

Если сервер принимает пару логин:пароль, то он отправляет клиенту приглашение. Клиент принимает приглашение и начинается сессия.

У FTP предельно простой синтаксис, описанный в спецификации RFC1738 (данные в квадратных скобках необязательны для заполнения) - ftp://[[:]@][:]/.

Пример 1 - ftp://ftp..txt

Пример 2 - ftp://UNIQUE_USER:[email protected]

Также есть т.н. «анонимный FTP» - когда любой пользователь может анонимно подключиться к ФТП серверу без предоставления данных USER/PASS. Для сессий такого типа предоставляется ограниченный доступ.

Пользователи осуществляют анонимный вход как «anonymous» (имя пользователя), но бывает и так что просят ввести email-адрес вместо пароля. Конечно же, никто не проверяет эти адреса на предмет достоверности.

Анонимный FTP-хосты достаточно популярны, ведь они часто используются для скачивания и обновления ПО на ПК. Более того, доступ может быть организован и через обычные браузеры - ведь они могут напрямую извлекать файлы с FTP-серверов. Происходит это очень просто - при указании FTP-адреса фтп-контент предоставляется точно также как веб-контент при HTTP. А в браузере Фаерфокс можно даже установить полноценный FTP-клиент - FireFTP.

Несмотря на то что работать с FTP можно в браузере, FTP довольно сильно отличается от HTTP:

Особенности протокола FTP:

  1. Использование множественного подключения, минимум - двойного. Один канал - управляющий, через него поступают команды для фтп-сервера и возвращаются ответы; другие каналы используются для передачи данных: одна передача - один канал (для каждого открывается TCP-порт). Благодаря этому свойству, в обоих направлениях одновременно можно передавать несколько файлов, а управляющий поток остается открытым на все время ftp-сессии.
  2. В FTP-протоколе есть двоичный режим передачи данных - при котором уменьшается время передачи файлов и расход трафика. В HTTP такого нет.
  3. По FTP-протоколу проводятся операции в рамках одной сессии с помощью TCP/IP - пока сервер «не забыл» текущее состояние и авторизованного пользователя. В HTTP сессий нет: он просто отдает данные.

FTP имеет три режима передачи данных:

  • Поточный - непрерывная передача данных в виде потока (без обработки, обработка выполняется TCP);
  • Блочный - FTP делит данные на блоки (заголовок, поле данных, размер файла в байтах) и передает их TCP;
  • Режим сжатия данных единым алгоритмом.

Что такое безопасный FTP: FTPS и FTPES, SFTP, SSH-FTP?

Вы наверное уже поняли, что обычный FTP не является безопасным, потому что данные не шифруются при передаче. Это можно исправить, например используя протокол SSH, который зашифрует пару логин:пароль и передаваемое содержимое. Сейчас расскажу подробнее обо всех безопасных FTP - FTPS, SFTP, SSH-FTP.

Откровенно говоря, FTP и не задумывался как безопасный при создании. Так его и сделали с многочисленными уязвимостями, список которых на 1999 год был примерно таким: захват портов и перехват пакетов, сниффинг и спуффинг, брутфорс и скрытые атаки.

FTP был разработан до TLS/SSL и просто физически не может шифровать свой трафик, поэтому любой человек, который способен перехватить пакет по сети, получит данные к именам пользователей, паролям, командам, а значит обретет доступ к приватному FTP-серверу. А доступ к FTP сайта это очень важно - можно много дел натворить.

Решение этой проблемы - использование защищенных версий протокола ФТП. Например, неявный FTPS это TLS-защищенная версия FTP, а SFTP/SCP защищены Secure Shell. Расскажу подробнее о защищенных FTP.

Явный FTPS (FTPES, FTP over Explicit SSL/TLS) - расширенный FTP, создающий возможность «клиентам» требовать шифрование FTP-сессии при использовании команды «AUTH TLS». В ответ на нее, сервер может позволить создать такое соединение или отклонить запрос. Порт - 21. Есть еще неявный FTPS (требует SSL- или TLS-соединение), но он устарел.

SFTP (англ. «SSH File Transfer Protocol») - расширение протокола SSH. Он никак не связан с FTP, но точно также передает файлы и использует те же команды. SFTP использует Secure Shell (SSH) для передачи файлов, т.е. шифрует и файлы, и команды (не передает данные по сети в открытом виде). Порт - 22 или 2222. Функционально SFTP близок к FTP и очень похож на него, но клиенты стандартного ФТП не могут подсоединиться к SFTP-серверу, как и наоборот.

SFTP, используемый как подсистема второй версии реализации протокола SSH, имеет ряд преимуществ перед FTP:

  • Поддержка аутентификации «без пароля» с помощью SSH-ключей более безопасная, чем если хранить пароль на диске или вводить вручную;
  • Поддержка символических ссылок;
  • SFTP-соединение более быстрое и надежное, когда в FTP бывают тормоза и перебои;
  • SFTP-клиенты обладают возможностями прерывания и возобновления передачи файла, его удаления; загруженные файлы могут иметь метки времени, связанные с атрибутами файлов - а в FTP нет условйи для загрузок.

FTP через SSH (обратите внимание, SSH-FTP это не SFTP) - осуществляет обычную FTP-сессию, соединяясь через безопасный SSH-туннель. Такое тунеллирование затруднительно, т.к. FTP открывает несколько TCP-соединений. Это значит, что при установке несколькими SSH-клиентами туннеля для канала управления (по порту 21) защищенным будет только этот один канал, а передача данных пойдет по вновь созданным каналам данных (TCP-соединения), обходящим SSH и от этого являющимися небезопасными.

Еще раз повторю, не нужно путать FTP через SSH с FTPS, SFTP, SCP - последние более безопасные.

Что такое FTP-сервер?

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

Самые популярные ftp-сервера это vsftpd и proftpd. Их настройка осуществляется в файлах.ftpaccess.

ФТП-сервера нужны для того, чтобы размещать на них для публичного и приватного скачивания больших объемов данных: как по количеству файлов, так и по их размеру. Часто такие сервера используются для анонимного (гостевого) доступа к размещенным в открытом виде дистрибутивов ПО, музыки и фото. Доступ для анонимов как правило позволяет только просматривать каталоги и скачивать требуемую информацию, но на некоторых серверах наоборот - есть спецкаталоги, куда любой аноним может загрузить файл для обмена.

При неанонимном доступе возможности пользователя шире (можно загружать файлы), но строго ограничиваются тем каталогом, куда ему предоставлен доступ, даже если «выше» или «по соседству» есть другие каталоги с файлами других пользователей.

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

Ну и кратко о наиболее популярных FTP-клиентах - программах для доступа к FTP-серверам с шифрованием передаваемых данных:

  • WS_FTP;
  • LeechFTP;
  • CuteFTP;
  • FileZilla - самый популярный FTP-клиент для Windows/Mac/Linux. Есть поддержка FTPS, SFTP.
  • FAR Manager - самый «древний» консольный файловый менеджер для Виндоуса. Очень простой, имеет много плагинов, поддерживает SFTP (нужен плагин WinSCP).
  • Total Commander - теряет популярность (на любителя) и поддерживает FTPS. Плагины для SFTP, к сожалению, устаревшие.
  • FireFTP - а это вообще плагин для Мозиллы Фаерфокс. Есть поддержка FTPS, SFTP.
  • Cyberduck - фтп клиент для маков, поддерживает FTP/SFTP.
  • WinSCP - минималистичный и красивый SCP-, FTP- и SFTP-клиент для Виндоуса.

Лично я пользуюсь WinSCP.

Подведу итог. В чистом виде, ФТП не предназначен для безопасной передачи файлов по сети, хоть и является стандартом. Я рекомендую более безопасные протоколы с шифрованием FTPS и SFTP.

Успехов при работе по FTP!

Secure Transfer Protocol или коротко sftp на сегодняшний день довольно широко используется для обмена файлами посредством защищенного SSH канала, между сервером и клиентскими машинами. В некоторых ситуациях удобно организовать иметь возможность обмен файлами между серверами, напрямую, за счет чего достигается оптимальная скорость передачи файлов. Именно о том, как можно подключиться и работать по через консоль мы поговорим в данном посту.
Для подключения к серверу SFTP нам необходимо знать его доменное имя либо IP-адрес.

Подключение к SFTP серверу через консоль

# sftp user@сайт

Довольно часто из соображений безопасности на серверах меняют стандартный порт на другое значение. Для указания значения своего порта вы можете воспользоваться командой ниже.

Подключение к SFTP серверу через другой порт

# sftp -oPort=2222 user@сайт:/home/something

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

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

Основные команды SFTP
cd — серфинг по дирректориям на стороне sftp сервера;
lcd — перемещение по дирректориям на локальном компьютере;
ls — просмотр списка файлов в текущей директории sftp сервера;
lls — просмотр списка файлов в текущей дирретории локального компьютера;
pwd — вывод текущей дирректории на sftp сервере;
lpwd — вывод текущей директории на локальной машине;
exit — выход из sftp-клиента;

Давайте попробуем загрузить файлы с удаленного SFTP – сервера, для этого мы может воспользоваться командой get.

Sftp>get remote-path

В качестве параметра remote-path указывается путь до файлов на сервере. В качестве параметра local-path передается путь на локальной машине, по умолчанию, если параметр не будет указан, загружаться файлы будут в текущую директорию. Так же можно указать отдельные файлы для скачивания.

Sftp>get foo.bar readme.txt

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

Sftp> mget ./*

Так же можно загружать файлы только с конкретным расширением, скажем нам необходимо загрузить все файлы с TXT-расширением.

Sftp> mget ./*.txt

После выполнения команды с директории удаленного сервера будет произведена загрузка всех файлов с расширением txt. Теперь рассмотрим пример загрузки файлов с локальной машины на удаленный сервер. Для отправки файлов на удаленный сервер мы будем пользоваться командой scp.

Есть один очень важный момент, о котором стоит знать. Команда get и mget не копирует нерегулярные файлы из файловой системы удаленного сервера.

Чтобы иметь возможность загружать абсолютно все файлы, вам следует воспользоваться командой scp – это отдельная команда, которая должна выполняться в командной строке сервера, а ни клиента sftp!

Копирование файлов с помощью команды scp.
Синтаксис:

# scp copy_from copy_to

copy_from – откуда отправляется файлы;
copy_to – путь назначения;

Рассмотрим простой пример скачивания файла foobar.txt с удаленного сервера на локальную машину.

Скачиваем файл с удаленного сервера

# scp user@сайт:/path/to/foobar.txt /some/local/directory

Таким же образом происходит отправка файла с вашей локальной машины на удаленный сервер.

Отправляем файл с локальной машины на удаленный сервер

# scp /path/to/foobar.txt user@сайт:/some/remote/directory

Так же есть возможность использования рекурсии при обмене файлами. Рассмотрим пример рекурсивного скачивания файлов с директории tutorial удаленного сервера в корневую директорию локальной машины.

Рекурсивное скачивание файлов

# scp -r user@сайт:~/tutorial ~/

If we want to change default SFTP port we need to change SSH configuration which will also change default SSH port. We need to open SSH config file /etc/ssh/sshd_config and change

#Port 22

To whatever we want. In this example we change to the 2222 . This configuration will be more secure because it is harder to find by attackers.

Port 2222


After we changed the configuration file we need to make active the new configuration. We should restart the SSH services which will reread the configuration file and use new SFTP port number. We will use systemctl command but other service management commands are welcomed.

$ sudo systemctl restart sshd

$ sudo systemctl restart sshd


SFTP vs FTPS/SSL

As stated previous SFTP is a function of the SSH protocol. So it is different than FTP mechanism. As FTP is not a secure or encrypted protocol it provides some security mechanism like SSL tunnelling. FTPS or FTP SSL is secured version of FTP and shouldn’t be confused with SFTP. FTPS listen for regular FTP port 21 or whatever it is configured.

Похожие статьи