---
title: 'FTP'
sidebar_label: 'FTP'
sidebar_position: 1
description: 'Как осуществляется доступ к хранилищу по протоколу FTP, как подключиться и работать с хранилищем по FTP'
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import {CustomTable} from '@selectel/docux/components'
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import {TabItemLabel} from '@selectel/docux/components'

# FTP

:::info

Работать по FTP можно только с бакетами в [пулах](/infrastructure/locations.mdx#pool) ru-1 и ru-7.

При работе с бакетами необходимо использовать явное шифрование TLS/SSL (TLS/SSL Explicit encryption).

:::

Для работы протокола FTP используется два соединения:

* управляющее соединение — по нему передаются команды и ответы, это текстовые строки;
* соединение для передачи данных.

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

Запись в конец файла не поддерживается — при попытке сделать это вернется код ответа 426.

## Данные для подключения \{#access-data}

Для подключения к S3 по FTP используется:

* [хост FTP](/s3/manage/domains.mdx#ftp-host) в нужном пуле;
* порт 21 (control port);
* диапазон портов 10100-12000 (data ports).

Аутентификация происходит с помощью S3-ключа — [Владелец аккаунта](/access-control/user-types.mdx#account-owner) или пользователь с ролью [`iam.admin`](/access-control/role-reference.mdx#iam-admin) должен [выдать ключ](/access-control/manage/edit-user-data-or-role.mdx#issue-s3-key) сервисному пользователю.
При подключении по FTP поля **Access key** и **Secret key** из ключа используются в качестве логина и пароля соответственно.

## Настроить FTP

1. [Настройте доступ к S3](#configure-s3-access).
2. [Подключитесь по FTP](#connect-via-ftp).

### 1. Настроить доступ к S3 \{#configure-s3-access}

Настроить доступ может [Владелец аккаунта](/access-control/user-types.mdx#account-owner) или пользователь с ролью [`iam.admin`](/access-control/role-reference.mdx#iam-admin).

1. [Создайте сервисного пользователя](/access-control/manage/add-user.mdx#add-service-user) с [ролью с доступом в S3](/s3/about/manage-access.mdx#access-within-roles), кроме роли [`s3.bucket.user`](/access-control/role-reference.mdx#s3-bucket-user) — с ней подключение по FTP работать не будет.

   Если вы используете сервисного пользователя с ролью [`s3.user`](/access-control/role-reference.mdx#s3-user) или [`object_storage_user`](/access-control/role-reference.mdx#object-storage-user), в бакете должна быть настроена [политика доступа](/s3/buckets/bucket-policy/) и ее [правила](/s3/buckets/bucket-policy/about-bucket-policy.mdx#rules) должны разрешать доступ этому пользователю.
2. [Выдайте пользователю S3-ключ](/access-control/manage/edit-user-data-or-role.mdx#issue-s3-key).

### 2. Подключиться по FTP \{#connect-via-ftp}

Для подключения по FTP можно использовать только клиенты, которые поддерживают безопасное подключение по TLS/SSL (FTPS).

<Tabs queryString="os">
  <TabItem value="windows" default>
    <TabItemLabel>
      Windows
    </TabItemLabel>

    <Tabs queryString="win-tool">
      <TabItem value="total-commander" default>
        <TabItemLabel>
          Total Commander
        </TabItemLabel>

        1. Откройте Total Commander.
        2. В меню **Сеть** выберите **Соединиться с FTP-сервером**.
        3. Нажмите **Добавить**.
        4. На вкладке **Общие** в поле **Имя соединения** введите любое имя (например, Selectel).
        5. В поле **Сервер** введите [хост FTP](/s3/manage/domains.mdx#ftp-host) в нужном пуле.
        6. Отметьте чекбокс **SSL/TLS**.
        7. В поле **Учетная запись** введите значение поля **Access key** из [S3-ключа](#configure-s3-access).
        8. В поле **Пароль** введите значение поля **Secret key** из S3-ключа.
        9. Отметьте чекбокс **Пассивный режим обмена (как Web-браузер)**.
        10. Откройте вкладку **Расширенные**.
        11. В поле **Кодировка имен файлов** выберите **UTF-8**.
        12. Нажмите **OK**. Профиль будет сохранен.
        13. Нажмите **Соединиться**.
      </TabItem>

      <TabItem value="far-manager">
        <TabItemLabel>
          FAR Manager
        </TabItemLabel>

        1. Откройте FAR Manager.

        2. Чтобы открыть меню перехода:

           * для левой панели — нажмите **Alt + F1**;
           * для правой панели — нажмите **Alt + F2**.

        3. В меню перехода выберите **NetBox**.

        4. Нажмите **Enter**.

        5. Нажмите **Shift + F4**. Откроется экран создания нового соединения.

        6. В поле **File Protocol** выберите **FTP**.

        7. В поле **Encryption** выберите **TLS/SSL Explicit encryption**.

        8. В поле **Host name** введите [хост FTP](/s3/manage/domains.mdx#ftp-host) в нужном пуле.

        9. В поле **Port number** введите `21`.

        10. В поле **User name** введите значение поля **Access key** из [S3-ключа](#configure-s3-access).

        11. В поле **Password** введите значение поля **Secret key** из S3-ключа.

        12. Нажмите **OK**.

        13. Выберите созданный профиль.

        14. Нажмите **Enter**.
      </TabItem>

      <TabItem value="winscp">
        <TabItemLabel>
          WinSCP
        </TabItemLabel>

        1. Откройте WinSCP.
        2. В поле **Протокол передачи** выберите **FTP**.
        3. В поле **Шифрование** выберете **Явное шифрование TLS/SSL(TLS/SSL Explicit encryption)**.
        4. Введите имя хоста — [хост FTP](/s3/manage/domains.mdx#ftp-host) в нужном пуле.
        5. В поле **Порт** введите `21`.
        6. Введите имя пользователя — значение поля **Access key** из [S3-ключа](#configure-s3-access).
        7. Введите пароль — значение поля **Secret key** из S3-ключа.
        8. Нажмите **Еще**.
        9. Выберите раздел **Среда**.
        10. В поле **Кодировка UTF-8 для имен файлов** выберите **Вкл**.
        11. Нажмите **OK** → **Сохранить**.
        12. Введите название подключения.
        13. Если вы хотите сохранить пароль, отметьте чекбокс **Запомнить пароль**.
        14. Опционально: отметьте чекбокс **Создать ярлык на “Рабочем столе”**.
        15. Нажмите **OK** → **Войти**.
      </TabItem>

      <TabItem value="filezilla">
        <TabItemLabel>
          FileZilla
        </TabItemLabel>

        1. Откройте FileZilla.
        2. В меню **Файл** выберите **Менеджер Сайтов**.
        3. Нажмите **Новый сайт**.
        4. На вкладке **Общие** в поле **Хост** введите [хост FTP](/s3/manage/domains.mdx#ftp-host) в нужном пуле.
        5. В поле **Порт** введите `21`.
        6. В поле **Шифрование** выберите **Требовать FTP через TLS (явный)**.
        7. В поле **Тип входа** выберите **Нормальный**.
        8. В поле **Пользователь** введите значение поля **Access key** из [S3-ключа](#configure-s3-access).
        9. В поле **Пароль** введите значение поля **Secret key** из S3-ключа.
        10. Откройте вкладку **Настройки передачи**.
        11. В поле **Режим передачи** выберите **Пассивный**.
        12. Откройте вкладку **Кодировка**.
        13. Выберите кодировку **UTF-8 принудительно**.
        14. Нажмите **ОК**.
        15. В меню **Передача** выберите **Режим передачи** → **Двоичный**.
        16. В меню **Файл** выберите **Менеджер Сайтов**.
        17. Выберите созданный сайт.
        18. Нажмите **Соединиться**.
      </TabItem>
    </Tabs>
  </TabItem>

  <TabItem value="linux">
    <TabItemLabel>
      Linux
    </TabItemLabel>

    <Tabs queryString="lin-tool">
      <TabItem value="nautilus" default>
        <TabItemLabel>
          Nautilus
        </TabItemLabel>

        1. С помощью Nautilus откройте любую директорию.
        2. В меню **Файл** выберите **Подключение к серверу**.
        3. В поле **Адрес сервера** введите `ftps://<ftp_host>`. Укажите `<ftp_host>` — [хост FTP](/s3/manage/domains.mdx#ftp-host) в нужном пуле.
        4. Нажмите **Подключиться**.
        5. Выберите пункт **Зарегистрированный пользователь**.
        6. Введите логин — значение поля **Access key** из [S3-ключа](#configure-s3-access).
        7. Введите пароль — значение поля **Secret key** из S3-ключа.
        8. Опционально: отметьте чекбокс **Запомнить навсегда**.
        9. Нажмите **Подключиться**.
      </TabItem>

      <TabItem value="filezilla">
        <TabItemLabel>
          FileZilla
        </TabItemLabel>

        1. Откройте FileZilla.
        2. В меню **Файл** выберите **Менеджер Сайтов**.
        3. Нажмите **Новый сайт**.
        4. На вкладке **Общие** в поле **Хост** введите [хост FTP](/s3/manage/domains.mdx#ftp-host) в нужном пуле.
        5. В поле **Порт** введите `21`.
        6. В поле **Шифрование** выберите **Требовать FTP через TLS (явный)**.
        7. В поле **Тип входа** выберите **Нормальный**.
        8. В поле **Пользователь** введите значение поля **Access key** из [S3-ключа](#configure-s3-access).
        9. В поле **Пароль** введите значение поля **Secret key** из S3-ключа.
        10. Откройте вкладку **Настройки передачи**.
        11. В поле **Режим передачи** выберите **Пассивный**.
        12. Откройте вкладку **Кодировка**.
        13. Выберите кодировку **UTF-8 принудительно**.
        14. Нажмите **ОК**.
        15. В меню **Передача** выберите **Режим передачи** → **Двоичный**.
        16. В меню **Файл** выберите **Менеджер Сайтов**.
        17. Выберите созданный сайт.
        18. Нажмите **Соединиться**.
      </TabItem>
    </Tabs>
  </TabItem>
</Tabs>

## Работа с FTP \{#working-with-ftp}

### Авторизация \{#authorization}

<CustomTable>
  <table data-sticky>
    <thead>
      <tr>
        <th>Команда</th>
        <th>Аргументы</th>
        <th>Обозначение</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <th>USER</th>
        <td>Access key из S3-ключа</td>
        <td>Передать логин</td>
      </tr>

      <tr>
        <th>PASS</th>
        <td>Secret key из S3-ключа</td>
        <td>Передать пароль</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

### Защита \{#protection}

<CustomTable>
  <table data-sticky>
    <thead>
      <tr>
        <th>Команда</th>
        <th>Аргументы</th>
        <th>Обозначение</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <th>AUTH</th>
        <td>Не требуются</td>
        <td>Установить защищенное TLS-соединение. Аргументы будут проигнорированы</td>
      </tr>

      <tr>
        <th>PROT</th>
        <td>P / C</td>
        <td>Установить режим защиты. P for Private, C for Clean. По умолчанию P будет использовать TLS</td>
      </tr>

      <tr>
        <th>PBSZ</th>
        <td>Размер буфера</td>
        <td>Установить размер буфера защиты. Сервер ответит 200 OK</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

### Разное \{#other}

<CustomTable>
  <table data-sticky>
    <thead>
      <tr>
        <th>Команда</th>
        <th>Аргументы</th>
        <th>Обозначение</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <th>FEAT</th>
        <td>Не требуются</td>
        <td>Отобразить список поддерживаемых дополнительных функций</td>
      </tr>

      <tr>
        <th>SYST</th>
        <td>Не требуются</td>
        <td>Отобразить операционную систему сервера</td>
      </tr>

      <tr>
        <th>NOOP</th>
        <td>Не требуется</td>
        <td>Пустая операция, сервер в ответ передаст 200 ОК</td>
      </tr>

      <tr>
        <th>OPTS</th>
        <td>Согласно RFC2389</td>
        <td>Передать серверу дополнительные опции</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

### Доступ к файлам \{#access-to-files}

<CustomTable>
  <table data-sticky>
    <thead>
      <tr>
        <th>Команда</th>
        <th>Аргументы</th>
        <th>Обозначение</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <th>SIZE</th>
        <td>Имя файла</td>
        <td>Получить размер файла</td>
      </tr>

      <tr>
        <th>STAT</th>
        <td>Не требуются</td>
        <td>Получить статистику соединения</td>
      </tr>

      <tr>
        <th>MDTM</th>
        <td>Путь</td>
        <td>Получить дату и время изменения файла</td>
      </tr>

      <tr>
        <th>RETR</th>
        <td>Имя файла</td>
        <td>Скачать файл. Сработает только после перехода в пассивный режим командой PASV. Поддерживается докачка</td>
      </tr>

      <tr>
        <th>STOR</th>
        <td>Имя файла</td>
        <td>Загрузить файл в пассивном режиме</td>
      </tr>

      <tr>
        <th>APPE</th>
        <td>Имя файла</td>
        <td>Сообщить серверу принять удаленный файл. Команда сработает только если такого файла еще не существует в хранилище. Если файл существует, то будет возвращена ошибка</td>
      </tr>

      <tr>
        <th>DELE</th>
        <td>Имя файла</td>
        <td>Удалить файл</td>
      </tr>

      <tr>
        <th>RNFR</th>
        <td>Имя файла</td>
        <td>Выбрать файл для переименования</td>
      </tr>

      <tr>
        <th>RNTO</th>
        <td>Новое имя файла</td>
        <td>Задать новое имя файла. Только после того как был выбран командой RNFR</td>
      </tr>

      <tr>
        <th>ALLO</th>
        <td>Размер в байтах</td>
        <td>Вернуть ответ о наличии доступного места. Вне зависимости от аргумента ответ будет 202 OK</td>
      </tr>

      <tr>
        <th>REST</th>
        <td>Смещение в байтах</td>
        <td>Команда «перемотки» к определенной позиции в файле. Требуется для докачки с помощью RETR</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

### Работа с бакетами \{#working-with-buckets}

<CustomTable>
  <table data-sticky>
    <thead>
      <tr>
        <th>Команда</th>
        <th>Аргументы</th>
        <th>Обозначение</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <th>CWD</th>
        <td>Имя директории</td>
        <td>Перейти в указанную директорию</td>
      </tr>

      <tr>
        <th>PWD</th>
        <td>Не требуются</td>
        <td>Показать текущий рабочий каталог</td>
      </tr>

      <tr>
        <th>CDUP</th>
        <td>Не требуются</td>
        <td>Перейти в родительскую директорию</td>
      </tr>

      <tr>
        <th>NLST</th>
        <td>Не требуются</td>
        <td>Возвратить список файлов директории в более кратком формате чем LIST. Только в режиме пассивного соединения</td>
      </tr>

      <tr>
        <th>LIST</th>
        <td>Путь</td>
        <td>Вывести содержимое текущей или предоставленной директории. Поддерживается как относительный, так и абсолютный путь</td>
      </tr>

      <tr>
        <th>MLSD</th>
        <td>Путь</td>
        <td>Вывести содержимое текущей директории. Главное отличие от LIST — метки времени с точностью до секунды, время указывается в UTC</td>
      </tr>

      <tr>
        <th>MKD</th>
        <td>Имя директории</td>
        <td>Создать директорию</td>
      </tr>

      <tr>
        <th>RMD</th>
        <td>Имя директории</td>
        <td>Удалить директорию</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

### Установление соединения \{#establishing-connection}

<CustomTable>
  <table data-sticky>
    <thead>
      <tr>
        <th>Команда</th>
        <th>Аргументы</th>
        <th>Обозначение</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <th>TYPE</th>
        <td>A / I</td>
        <td>Сменить режим передачи данных. Имеется два варианта — ASCII(A) или Binary(I). Любой аргумент игнорируется, команда используется для обратной совместимости. Поддерживается только Binary-режим</td>
      </tr>

      <tr>
        <th>PASV</th>
        <td>Не требуются</td>
        <td>Перейти в пассивный режим передачи данных</td>
      </tr>

      <tr>
        <th>EPSV</th>
        <td>Не требуются</td>
        <td>Инициировать соединение для передачи данных в пассивном режиме. В ответ сервер передаст номер порта для соединения</td>
      </tr>

      <tr>
        <th>EPRT</th>
        <td>Версия протокола / адрес / порт</td>
        <td>Инициировать соединение для передачи данных. Команда исключительно для активного режима передачи данных, поэтому на эту команду сервер сообщит, что активный режим не поддерживается</td>
      </tr>

      <tr>
        <th>PORT</th>
        <td>Не требуются</td>
        <td>Перейти в активный режим передачи данных. Команда исключительно для активного режима передачи данных, поэтому на эту команду сервер сообщит, что активный режим не поддерживается</td>
      </tr>

      <tr>
        <th>QUIT</th>
        <td>Не требуются</td>
        <td>Отключиться от сервера</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

<Formbricks />
