Разное

Ftp яндекс диск – Можно ли работать в Яндекс Диске через FTP

19.01.2020

Содержание

Можно ли работать в Яндекс Диске через FTP

Работать с облачными хранилищами куда удобнее, если к ним можно подключаться через протокол передачи данных FTP. Это очень быстрый протокол, который позволяет передавать файлы на сервер или с сервера на клиент практически моментально, по крайней мере, куда быстрее, чем стандартные загрузочные протоколы Интернета. В данной статье разберем, можно ли подключить свой ПК по FTP на Яндекс Диск, и какие есть альтернативы, а также способы создать сетевой диск у себя на компьютере из удаленного сервера FTP.

Можно ли зайти в Яндекс Диск по протоколу FTP

Во время разработки Яндекс Диска программисты долгое время не могли определиться с протоколом, который выбрать для подключения к сервису. Ведь именно протокол определяет взаимоотношение сервера и клиента, и правила, по которым они будут работать. А значит от выбора протокола зависело то, какие функции будут у Яндекс Диска.

В итоге, выбор был сделан не в пользу протокола передачи данных FTP. Его отбросили, как вариант, вместе с другими мощными протоколами: BitTorrent, Amazon S3 и прочими. В своей статье программисты написали, что хоть и уважают протокол FTP, как один из самых старых и проверенных временем, но его недочеты не позволяют использовать ФТП для такого глобального сервиса, как Яндекс Диск.

А все дело в том, что FTP посчитали небезопасным протоколом для таких целей. Яндекс Диск — это слишком большой сервис, чтобы оставлять в нем дыры, которыми смогут воспользоваться взломщики. Известно, что протокол FTP является открытым, незашифрованным от посторонних глаз, потому при перехвате данных, клиенты с легкостью взламываются. Кроме того, разработчики Яндекс Диска сделали ударение на том, что FTP не поддерживает множество необходимых для работы сервиса операций. В частности, был приведен довод по поводу отсутствия функции передачи файлов вместе с привязанными к ним мета-данными. И последний аргумент против FTP для Яндекс Диска — это надобность использовать посторонние программы для подключения.

Был выбран протокол WebDAV. Его считают достойным продолжением протокола передачи данных FTP, хоть он и работает на базе HTTP и XML.

Разработчики взялись именно за этот протокол, потому что с ним можно работать как при помощи стандартных средств операционной системы, так и при помощи различных программ. А благодаря открытой лицензии, программисты Яндекса подкорректировали протокол под свои нужды, добавив в него отчетность о действиях на сервере, которой ранее не было.

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

Те, кто уже расстроился и сложил руки, из-за того, что по протоколу FTP подключиться не получиться, могут снова встать на ноги — для работы с Яндекс Диском можно использовать FTP-клиенты. Суть в том, что клиенты — это многофункциональные программы. И, как правило, они рассчитаны на работу не с одним протоколом FTP, но и с многими другими. Но поскольку FTP является популярным протоколом, на другие типы подключения пользователи клиентов внимания не обращают.

Даже в популярной программе для работы с FTP — в Total Commander — есть возможность зайти на Яндекс Диск через их протокол WebDAV. Только вам придется предварительно установить в Тотал Коммандер специальный плагин, который добавит эту возможность в программу. После этого у вас появится новая функция, и чтобы ее активировать, вам нужно зайти в сетевое окружение и отыскать папку WebDAV. Внутри этой папки необходимо нажать кнопку F7, которая запустит процесс создания нового соединения.

Далее откроется окно, где вам необходимо прописать данные для входа на Яндекс Диск. Адрес сервера будет фиксированным — вам нужно указать webdav.yandex.ru. Ниже вам необходимо будет указать логин, по которому будете подключаться, а также пароль от аккаунта. Рекомендуется отметить галочкой возле пункта SSL — так вы активируете шифрование данных, чтобы ваши логин и пароль никто не сумел перехватить. На этом настройка соединения может быть завершена — остальные опции можете не трогать. Нажимаете кнопку OK, соединяетесь с сервисом Яндекс Диск — и у вас на экране появляется файловая система этого облачного хранилища. Теперь можете в ней выполнять операции, как если бы вы это делали через стандартный проводник Windows.

Можно ли установить сетевой диск по FTP на ПК

И все-таки странно, что программисты Яндекса не выбрали в качестве основного протокола Диска FTP. Ведь данный протокол легко может работать и без специальных программ, а при помощи стандартных возможностей Windows. А что касается безопасности, есть специальный модифицированный протокол SFTP, который является смесью FTP и шифрованного SSH.

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

Подключение сервера в качестве сетевого диска не займет у вас много времени. Для начала зайдите в «Мой компьютер». Потом наведите курсор на место, где нет каких-либо элементов для выделения и нажмите правой кнопкой мыши. Выберите пункт «Добавить новый элемент в сетевое окружение». После этого перед вами появится специальный мастер добавления сетевых дисков. Создайте новый сетевой диск, чтобы к нему подключить сервер по FTP. Затем пропишите данные для подключения к серверу: имя хоста или его IP-адрес. На следующем шаге уберите галочку возле «Анонимный вход» и пропишите ваши данные для входа.

На конечном этапе добавления нового сетевого диска система предложит вам выбрать имя для созданного окружения. Пропишите любое удобное имя, выберите букву для диска, и нажмите «Готово». Теперь диск появится в файловой системе и в папке «Мой компьютер». После того, как вы нажмете на него, сервер запросит от вас ввод пароля. Далее перед вами откроется сервер, только он будет выглядеть как любой другой диск на вашем компьютере — на нем будут папки и файлы, будто вы и не подключались к сети. В этом и заключается прелесть работы по FTP через стандартные средства операционной системы. Странно, что программисты не учли такую возможность и не доверили сервис Яндекс Диск проверенному временем протоколу передачи данных FTP.

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

e-webmaster.ru

Информация — Используем Яндекс.Диск по полной

Всем привет !

В этой статье мы рассмотрим как использовать такой замечательный сервис как Яндекс.Диск по полной, начиная от подключением его к своему серверу и заканчивая подключению его к своему домашнему компьютеру…

upload_2016-1-15_14-38-1.png

Зачем это нужно:

Ну вот я например в силу того-что ограничен в финансах немогу позволить себе мощный сервер с терабайтом на винте, я обычно арендую VPS 30-40 гиг SSD, НО возникают вопросы:

1. Где хранить беккапы;

2. Если проект разросся, что кстати и случилось с этим форумом, не много не мало 10 гигов отжирает места, где всё это хранить ?

Если использовать платные хранилища, опять-таки влетает в копеечку, Яндекс-же на бесплатном тарифе даёт 15-ть гиг, можно в принципе докупить, там не дорого…

3. Если Вы счастливый обладатель например домашнего ПК, тоже-самое это хранение беккапов, домашнего порно и т.д. !Dmeh-Smeh-Smeh!!!

Итак давайте рассмотрим как можно подключить, будем считать что аккаунт на Яндекса у Вас уже есть:

1)Как подключить Яндекс-Диск для своего сервера (Доп. место):

Несколько примеров использования Yandex.disk на вашей VDS:

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

— Настроить на нем FTP-хранилище.

Вообще расскажу как сделать на Debian, для других осей ищите самисмех-смех!!!

:

1.Установим пакет davfs2:

2.Создадим точку монтирования:
3.Примонтируем наш диск, введя логин и пароль от нашей почты на Я.ру (use https, Luke!):

Код:

mount -t davfs https://webdav.yandex.ru /mnt/yandex.disk/
Please enter the username to authenticate with server
https://webdav.yandex.ru or hit enter for none.
  Username: lamnya
Please enter the password to authenticate user lamnya with server
https://webdav.yandex.ru or hit enter for none.
  Password:
4.Убедимся, что всё в порядке:

Код:

df -h /mnt/yandex.disk/
Filesystem            Size  Used Avail Use% Mounted on
https://webdav.yandex.ru
                      10G  1G   10G   10% /mnt/yandex.disk
5.Для автоматического монтрования следует внести в /etc/fstab строку:

Код:

https://webdav.yandex.ru /mnt/yandex.disk/ davfs user,noauto,uid=username,file_mode=600,dir_mode=700 0 1
Атак же создать файл:
В формате:

Код:

/mnt/yandex.disk/ <login> <pass>
2)Как создать сетевой Яндекс.Диск в проводнике Windows:

Шаг 1.

Первым делом отрываете проводник. Далее, в левой панели выберите раздел «Компьютер», а в правой панели нажмите правую кнопку мыши, и в контекстно-зависимом меню выберите пункт «Добавить новый элемент в сетевое окружение».

upload_2016-1-15_14-34-19.png


Добавление нового элемента в сетевое окружение

Шаг 2 и 3.

Здесь ваша задача нажать на кнопку «Далее». Больше выбирать ничего не надо.

Шаг 4.

На этом шаге нужно ввести адрес сервера для подключения:

И нажать кнопу «Далее».

upload_2016-1-15_14-34-46.png
Адрес сервера

Шаг 5.

Далее, нужно ввести название почтового ящика Яндекс (до знака @) и пароль от него.

upload_2016-1-15_14-36-4.png
Ввод логина и пароля

Шаг 6.

Теперь вводите имя для сетевого диска. Назвать вы его можете как угодно. Разницы это не имеет.

upload_2016-1-15_14-36-19.png
Название сетевого диска

Нажимаете кнопку «Далее» и всё готово. Ваш сетевой диск подлечен.

upload_2016-1-15_14-36-56.png
Сетевой диск — подключен.


ru-sfera.org

Монтирование Яндекс Диск и ftp в Centos — Записи обо всём

Монтирование FTP хранилища как папки в CentOS.

Шаг 1. Установим пакет CurlFtpFS

Доступен в EPEL-репозитории. Начиная с версии CentOS 6.7

 репозиторий вшит в ОС.

yum install curlftpfs

Шаг 2. Подключение FTP

На данном этапе создадим папку, куда будет монтироваться хранилище и подключим его.

mkdir -p /home/ftp_share
curlftpfs ftp://user:[email protected] /home/ftp_share
Проверим успешное монтирование хранилища:

[[email protected] public_html]# df -H

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/vg_test-lv_root

8,9G 4,9G 3,6G 58% /

tmpfs 2,1G 0 2,1G 0% /dev/shm

/dev/sda1 500M 59M 415M 13% /boot

curlftpfs#ftp://testhost:[email protected]/

8,2T 0 8,2T 0% /home/ftp_share

Шаг 3. Автоматическое монтирование

Для автоматического монтирования хранилища при запуске системы, необходимо добавить строчку в /etc/fstab

curlftpfs#ftp://testhost:[email protected] /home/ftp_share fuse defaults 0 0

Шаг 4. Настройка Iptables

Если на сервере включен Firewall, необходимо прописать правила, позволяющие работать протоколу FTP как в активном, так и в пассивном режимах, для этого сначала загрузим модуль modprobe ip_conntrack_ftp, а затем добавим правила в таблицу:

iptables -A INPUT -p tcp -m tcp —dport 21 -m conntrack —ctstate ESTABLISHED -j ACCEPT -m comment —comment «Allow ftp connections on port 21»

iptables -A OUTPUT -p tcp -m tcp —dport 21 -m conntrack —ctstate NEW,ESTABLISHED -j ACCEPT -m comment —comment «Allow ftp connections on port 21»

iptables -A INPUT -p tcp -m tcp —dport 20 -m conntrack —ctstate ESTABLISHED,RELATED -j ACCEPT -m comment —comment «Allow ftp connections on port 20»

iptables -A OUTPUT -p tcp -m tcp —dport 20 -m conntrack —ctstate ESTABLISHED -j ACCEPT -m comment —comment «Allow ftp connections on port 20»

Подключение Яндекс.Диска по WebDav для бэкапов или обмена файлами в CentOS.

1. Установим необходимые пакеты

yum install davfs2

2. Создаем папку для монтирования

mkdir -p /backup/yandex

3. Подключаем Яндекс.Диск

mount -t davfs https://webdav.yandex.ru /backup/yandex
В качестве логина/пароля используем доступы от Яндекса.

Приблизительный вывод:

mount -t davfs https://webdav.yandex.ru /backup/yandex

Please enter the username to authenticate with server

https://webdav.yandex.ru or hit enter for none.

Username: [email protected]

Please enter the password to authenticate user [email protected] with server

https://webdav.yandex.ru or hit enter for none.

Password:

/sbin/mount.davfs: Warning: can’t write entry into mtab, but will mount the file system anyway


Проверяем.

df -h

Filesystem Size Used Avail Use% Mounted on

https://webdav.yandex.ru 46G 3.9G 43G 9% /backup/yandex


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

!/usr/bin/expect

spawn mount.davfs https://webdav.yandex.ru /backup/yandex

expect «Username:»

send «[email protected]\r»

expect «Password:»

send «YOURPASSWORD\r»

expect eof

Troubleshooting

Warning: can’t write entry into mtab, but will mount the file system anyway

Не пугаемся данной ошибки.

Дословно: “Внимание : не могу записать данные в mtab , но в любом случае файловая система будет смонтирована”

xakinfo.ru

Однонодовый файловый сервер | Яндекс.Облако

Сценарий описывает создание однонодового файлового сервера с использованием Samba и NFS.

Чтобы создать однонодовый файловый сервер:

  1. Подготовьте облако к работе
  2. Создайте виртуальную машину для файлового сервера
  3. Настройте Samba и NFS
  4. Протестируйте работу файлового сервера
  5. Удалите созданные облачные ресурсы

Подготовьте облако к работе

Перед использованием Compute Cloud нужно зарегистрироваться в Облаке и создать платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Облако или зарегистрируйтесь, если вы еще не зарегистрированы.
  2. На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет находиться ваш бакет. Перейдите на страницу облака и выберите или создайте каталог, в котором вы хотите создать бакет. Подробнее об иерархии ресурсов Облака.

Необходимые платные ресурсы

В стоимость поддержки статического сайта входит:

Создайте облачные сети и подсети

Перед тем, как создавать виртуальную машину:

  1. Перейдите в консоль управления Яндекс.Облака и выберите каталог, в котором будете выполнять операции.
  2. Убедитесь, что в выбранном каталоге есть сеть с подсетью, к которой можно подключить виртуальную машину. Для этого на странице каталога выберите сервис Virtual Private Cloud. Если в списке есть сеть — нажмите на нее, чтобы увидеть список подсетей. Если ни одной подсети или сети нет, создайте их.

Создайте виртуальную машину для файлового сервера

Чтобы создать виртуальную машину:

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

  2. В поле Имя введите имя виртуальной машины — fileserver-tutorial.

  3. Выберите зону доступности, в которой будет находиться виртуальная машина.

  4. Выберите публичный образ Ubuntu или CentOS.

  5. В блоке Вычислительные ресурсы:

    • Выберите платформу.
    • Укажите необходимое количество vCPU и объем RAM.

    Рекомендованные значения для файлового сервера:

    • Гарантированная доля vCPU — 100%.
    • vCPU — 8 или больше.
    • RAM — 56 ГБ или больше.
  6. В блоке Диски нажмите Добавить диск. В окне Добавление диска укажите параметры диска для хранения данные:

    • Имяfileserver-tutorial-disk;
    • Размер — 100 ГБ;
    • Тип диска — SSD;
    • Наполнение — Пустой.

    Нажмите Добавить.

  7. В блоке Сетевые настройки выберите, к какой подсети необходимо подключить виртуальную машину при создании.

  8. Укажите данные для доступа на виртуальную машину:

    • В поле Логин введите имя пользователя.
    • В поле SSH ключ вставьте содержимое файла открытого ключа. Пару ключей для подключения по SSH необходимо создать самостоятельно. Для создания ключей используйте сторонние инструменты, например утилиты ssh-keygen в Linux и macOS или PuTTYgen в Windows.
  9. Нажмите кнопку Создать ВМ.

Создание виртуальной машины может занять несколько минут. Когда виртуальная машина перейдет в статус RUNNING, вы можете настроить NFS и Samba.

При создании виртуальной машине назначаются IP-адрес и имя хоста (FQDN). Эти данные можно использовать для доступа по SSH.

Настройте Samba и NFS

После того как виртуальная машина fileserver-tutorial перейдет в статус RUNNING, выполните:

  1. В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины.

  2. Подключитесь к виртуальной машине по протоколу SSH. Для этого можно использовать утилиту ssh в Linux и macOS и программу PuTTY для Windows.

    Рекомендуемый способ аутентификации при подключении по SSH — с помощью пары ключей. Не забудьте настроить использование созданной пары ключей: закрытый ключ должен соответствовать открытому ключу, переданному на виртуальную машину.

  3. Скачайте и установите Samba:

    $ sudo apt-get update
    $ sudo apt-get install nfs-kernel-server samba
    
    $ sudo yum check-update
    $ sudo yum -y install nfs-utils nfs-utils-lib samba nano
    $ sudo chkconfig smb on
    $ sudo chkconfig nfs on
    
  4. Подготовьте и смонтируйте файловую систему на диске для хранения данных:

    $ sudo mkfs -t ext4 -L data /dev/vdb
    $ sudo mkdir /data
    $ echo "LABEL=data /data ext4 defaults 0 0" | sudo tee -a /etc/fstab
    $ sudo mount /data
    
  5. Задайте конфигурацию NFS в файле /etc/exports. Вы можете отредактировать файл с помощью утилиты nano:

    Добавьте в файл следующие строки:

    /data <IP-адрес>(rw,no_subtree_check,fsid=100)
    /data 127.0.0.1(rw,no_subtree_check,fsid=100)
    

    Вместо <IP-адрес> укажите IP-адрес компьютера, к которому вы будете подключать по NFS сетевой диск с данными.

  6. Задайте конфигурацию Samba в файле /etc/samba/smb.conf. Вы можете отредактировать файл с помощью утилиты nano:

    $ sudo nano /etc/samba/smb.conf
    

    Приведите файл к виду:

    [global]
       workgroup = WORKGROUP
       server string = %h server (Samba)
       dns proxy = no
       log file = /var/log/samba/log.%m
       max log size = 1000
       syslog = 0
       panic action = /usr/share/samba/panic-action %d
       server role = standalone server
       passdb backend = tdbsam
       obey pam restrictions = yes
       unix password sync = yes
       passwd program = /usr/bin/passwd %u
       passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
       pam password change = yes
       map to guest = bad user
       usershare allow guests = yes
    [printers]
       comment = All Printers
       browseable = no
       path = /var/spool/samba
       printable = yes
       guest ok = no
       read only = yes
       create mask = 0700
    [print$]
       comment = Printer Drivers
       path = /var/lib/samba/printers
       browseable = yes
       read only = yes
       guest ok = no
    [data]
       comment = /data
       path = /data
       browseable = yes
       read only = no
       writable = yes
       guest ok = yes
       hosts allow = <IP-адрес> 127.0.0.1
       hosts deny = 0.0.0.0/0
    
    [global]
       workgroup = MYGROUP
       server string = Samba Server Version %v
       log file = /var/log/samba/log.%m
       max log size = 50
       security = user
       passdb backend = tdbsam
       load printers = yes
       cups options = raw
       map to guest = bad user
    [homes]
       comment = Home Directories
       browseable = no
       writable = yes
    [printers]
       comment = All Printers
       path = /var/spool/samba
       browseable = no
       guest ok = no
       writable = no
       printable = yes
    [data]
       comment = /data
       path = /data
       browseable = yes
       read only = no
       writable = yes
       guest ok = yes
       hosts allow = <IP-адрес> 127.0.0.1
       hosts deny = 0.0.0.0/0
    
    [global]
            workgroup = SAMBA
            security = user
    
            passdb backend = tdbsam
    
            printing = cups
            printcap name = cups
            load printers = yes
            cups options = raw
    
    [homes]
            comment = Home Directories
            valid users = %S, %D%w%S
            browseable = No
            read only = No
            inherit acls = Yes
    
    [printers]
            comment = All Printers
            path = /var/tmp
            printable = Yes
            create mask = 0600
            browseable = No
    
    [print$]
            comment = Printer Drivers
            path = /var/lib/samba/drivers
            write list = @printadmin root
            force group = @printadmin
            create mask = 0664
            directory mask = 0775
    [data]
       comment = /data
       path = /data
       browseable = yes
       read only = no
       writable = yes
       guest ok = yes
       hosts allow = <IP-адрес> 127.0.0.1
       hosts deny = 0.0.0.0/0
    

    В блоке [data] вместо <IP-адрес> укажите IP-адрес компьютера, к которому вы будете подключать по NFS сетевой диск с данными.

  7. Перезапустите NFS и Samba, для CentOS 6 и 7 предварительно разрешите чтение файлов в директории /data:

    $ sudo service nfs-kernel-server restart
    $ sudo service smbd restart
    
    $ sudo chcon -t samba_share_t /data
    $ sudo semanage fcontext -a -t samba_share_t "/data(/.*)?"
    $ sudo restorecon -R -v /data
    $ sudo service rpcbind restart
    $ sudo service nfs restart
    $ sudo service smb restart
    
  8. Этот шаг нужно выполнять только на виртуальной машине с ОС CentOS 6.

    Разрешите сетевой доступ к виртуальной машине с помощью утилиты iptables:

    $ sudo iptables -I INPUT -p tcp -s <IP-адрес> -j ACCEPT
    $ sudo iptables -I INPUT -p udp -s <IP-адрес> -j ACCEPT
    $ sudo iptables-save | sudo tee /etc/sysconfig/iptables
    

    Вместо <IP-адрес> укажите IP-адрес компьютера, к которому вы будете подключать по NFS сетевой диск с данными.

Протестируйте работу файлового сервера

  1. Создайте на виртуальной машине fileserver-tutorial тестовую директорию и файл в ней:

    $ sudo mkdir /data/fileserver-tutorial
    $ sudo setfacl -m u:<имя вашего пользователя>:w /data/fileserver-tutorial
    $ echo "Hello world!" > /data/fileserver-tutorial/test.txt
    
  2. Подключите по NFS сетевой диск к вашему компьютеру и проверьте доступность тестового файла:

    Выполните команду mount -t nfs <внешний IP>:/data /<точка монтирования>.

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

    1. Запустите утилиту cmd.exe. Для этого нажмите комбинацию клавиш Windows+R и выполните команду cmd.
    2. В командной строке выполните команду:
      net use x: \\<публичный IP-адрес виртуальной машины>\data
      

    Тестовая директория и файл должны быть доступны на диске X.

Как удалить созданные ресурсы

Чтобы перестать платить за развернутый сервер, достаточно удалить созданную виртуальную машину fileserver-tutorial.

Если вы зарезервировали статический публичный IP-адрес специально для этой ВМ:

  1. Откройте сервис Virtual Private Cloud в вашем каталоге.
  2. Перейдите на вкладку IP-адреса.
  3. Найдите нужный адрес, нажмите значок ellipsis и выберите пункт Удалить.

cloud.yandex.ru

Как мы выбрали и реализовали WebDAV в Яндекс.Диске / Яндекс corporate blog / Habr

Уже в момент запуска Яндекс.Диск дал многим разработчиками возможность использовать его в своих приложениях и программах. И обеспечивает это то, что протоколом для десктопных клиентов Диска мы выбрали WebDAV.

Так как именно протокол определяет то, как общаются между собой программы и сервер, от его выбора зависит примерно всё. И то, как будут устроены клиенты, и то, какие возможности работы с файлами у них будут.

Сегодня мы хотим рассказать о причинах, которые остановили наш выбор именно на WebDAV и сделали его протоколом для клиентов Яндекс.Диска.

Благодаря API, реализованному на его базе, с нашим сервисом уже работают ABBYY FineScanner, Handy Backup 7, ES Проводник и неофициальный клиент Яндекс.Диска для Linux.

Перед тем как выбрать протокол, мы определили для себя важнейшие требования к нему:

  1. Скорость работы;
  2. Открытая лицензия;
  3. Возможность реализации всех необходимых действий: аутентификации, поддержки файловых операций, конкурентного доступа к файлам, докачки с сервера и возобновления закачки на сервер;
  4. Распространённость — он должен работать с целевыми операционными системами (в первую очередь Windows, Mac OS X, Linux) «из коробки» или с минимальными доработками.

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

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

BitTorrent. Так как речь сразу шла о синхронизации между девайсами, то использовать соединение между ними без создания нагрузки на серверы было бы очень полезно, но это потребовало бы двойной работы по разработке клиента. Вдобавок возникли бы проблемы при работе через NAT-ы и firewall-ы, что сильно снизило бы пользу от использования этого протокола.

Amazon S3. Это хранилище использует свой собственный протокол, основанный на HTTP. Мы рассматривали возможность использования API S3, однако отказались от этой идеи из-за отсутствия в нём привычной работы с каталогами и из-за необходимости использовать специальные приложения для доступа.

WebDAV. Основанный на HTTP и XML и нетрудно расширяемый, он поддерживает в спецификациях практически все, что нам нужно. C ним достаточно хорошо работают предустановленные пакеты во всех целевых операционных системах. Кроме того отдел разработки десктопных клиентов Яндекс.Диска, занимавшийся XMPP-сервером Яндекса, на тот момент уже имел опыт работы с открытыми протоколами на базе XML.

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

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

После выбора протокола началась работа над прототипом Яндекс.Диска. Наш WebDAV-сервер мы написали на Erlang. В качестве фреймворка для веб-сервера был выбран mochiweb, достаточно легковесная и хорошо знакомая нашим разработчикам библиотека. Она же была использована в известной статье о подключении миллиона пользователей к одному серверу — A million user comet application. Также мы думали и об использовании веб-сервера Yaws, который можно сравнить с Apache. Это полноценный веб-сервер, умеющий отдавать статику, запускать CGI-скрипты, обрабатывать специальные страницы с серверными скриптами. Но это всё было нам не нужно. Если бы мы начинали делать проект сейчас, выбор пал бы на Cowboy, так как он предоставляет больше возможностей по определению проблем с соединением.

После изучения протокола WebDAV началась работа над операциями листинга файлов и каталогов на сервере. В качестве хранилища для прототипа использовались mysql-база данных, в которой хранилась мета-информация и обычная файловая система для хранения содержимого файлов. Масштабирования и высокой надёжности на этом этапе не требовалось.

Схема была довольно простой, так как это был прототип. Как обычно бывает с файловыми системами, встал вопрос ограничений на пути. Так как максимальная длина пути к ресурсу в протоколе не оговаривалась, было решено сделать длину компоненты пути в 255 символов, а количество уровней вложенности неограниченным. Примерно таблица хранилища файлов выглядела так:

id число, автоинкремент, уникальный идентификатор ресурса
uid пользователь, владелец ресурса
path строка длины 255, имя ресурса
type тип ресурса, файл или каталог
parent число, id владельца
depth число, уровень вложенности ресурса
использовалось для оптимизации запросов на выборку

Одной из первых нетривиальных задач стал листинг корня, в котором ничего нет. Сложность в том, что метод PROPFIND, кроме просто листинга, выполняет ещё и задачу чтения свойств ресурса. Необходимо было правильно разбирать запрос, понимать, что мы можем выдать, а что нет; формировать правильный ответ. В качестве первого клиента использовался встроенный в Ubuntu gvfs. Отладив работу с ним, мы решили проверить работу подключения из Windows 7 и обнаружили, что он с нами не работает. Исследование работы с другими серверами показало, что встроенные в Windows клиенты не обрабатывают пространство имён «DAV:», если оно объявлено дефолтным, без префикса. Другие стандартные клиенты оказались более терпимыми и легко переваривали выдачу, сформированную специально для клиентов Windows. К счастью, это была единственная несовместимость, которую нам удалось найти.

Когда работа над листингом была завершена, мы реализовали тривиальные операции создания каталогов и удаления ресусов.

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

habr.com

Отправить ответ

avatar
  Подписаться  
Уведомление о