Предыстория
Привет, Хабр!
К написанию этого поста привела довольно странная ошибка, которую вчера вечером на ноутбуке с Linux (да, я из тех странных людей, кто использует GNU/Linux на ноутбуке) я получил вместо содержимого своего Яндекс.Диска:
$ ls -l /mnt/yadisk
ls: reading directory '.': Input/output error
total 0
Первая мысль: сеть отвалилась, ничего страшного. Но при попытке перемонтировать директорию появилась новая ошибка:
$ sudo umount /mnt/yadisk && rclone mount --timeout 30m ya:/ /mnt/yadisk
2020/02/21 20:54:26 ERROR : /: Dir.Stat error: [401 - UnauthorizedError] Unauthorized (Не авторизован.)
Это было уже странно. Токен протух? Не беда, авторизую заново!
$ rclone config
... (опущу тут весь вывод терминала) ..
После перехода на веб и попытки авторизоваться там получаю уже более конкретное сообщение:
Это приложение заблокировано за вредоносные действия, поэтому доступ не разрешён (unauthorized_client).
Первая мысль: чтоооо?
О rclone
Немного справки:
rclone — достаточно известная открытая утилита для работы с облачными хранилищами (неоднократно раз, два, три упоминалась на Хабре). Автор называет её "rsync for cloud storage", что довольно ёмко. Но этим функциональность не ограничивается: помимо функций rsync она ещё может монтировать диски, выполнять функцию ncdu (что, кстати, мне позволило однажды обнаружить неправильный подсчёт свободного места на Яндекс.Диске и успешно решить эту проблему через техподдержку), а также кучу всего ещё. Утилита поддерживает как десятки облачных хранилищ, так и более традиционные протоколы — WebDAV, FTP, rsync и другие. Для доступа к Яндекс.Диску утилита использует официальный публичный API Диска.
Утилита поистине уникальна и (по моему мнению) представляет из себя тот класс программ, которые ставишь один раз, а пользу они приносят постоянно.
Что произошло?
Обратившись к Google я сразу понял, что не одинок. Есть баг в официальном гитхабе, а также обсуждение на официальном форуме.
Краткое содержание: client_id утилиты заблокирован Яндекс.Диском, из-за чего авторизоваться больше нельзя. Можно попробовать поменять client_id, но не факт, что та же участь не постигнет и новый id.
Ответ поддержки опубликован на том же форуме:
Дело в том, что программа Rclone позволяет использовать Яндекс.Диск в качестве инфраструктурного компонента, а Яндекс.Диск — это персональный сервис, который не рассчитан на решение таких задач. Поэтому мы не поддерживаем работу связки Rclone — Яндекс.Диск.
"Инфраструктурный компонент"? Ну раз нельзя, то наверное это описано в правилах подумал я и ничего такого в правилах самого диска или его публичного API я не нашёл.
Ладно, напишем в поддержку.
Первый ответ прилетает 1 в 1 тот, что опубликован выше (про "инфраструктурный компонент"). Окей, мы не гордые.
Я:
А подскажите пожалуйста, какое правило сервиса это нарушает?
Я изучил условия использования Яндекс диска и никаких запретов на использование "в качестве инфраструктурного компонента" там нет.
Более того, я не могу использовать утилиту с личного ноутбука для работы с диском. Это уже совсем никак под " инфраструктурный компонент" не подпадает. Штатный клиент диска ужасен, уж простите.
Поддержка:
Сергей, дело в том, что Яндекс.Диск — это в первую очередь персональный сервис, который не рассчитан на загрузку резервных копий в автоматическом режиме.
Вы можете синхронизировать данные между вашим компьютером и Яндекс.Диском, а также пользоваться веб-интерфейсом Диска для загрузки файлов и работы с ними.
Если вас по каким-то причинам не устраивает наша программа, пожалуйста, озвучьте их. Традиционно мы прислушиваемся к мнению пользователей при выпуске обновлений продукта.
Вы можете ознакомиться с документами, регулирующими использование сервиса, в частности «Пользовательским соглашением сервисов Яндекса», опубликованным по адресу: https://yandex.ru/legal/rules/, а также «Условиями использования сервиса "Яндекс.Диск"»: https://yandex.ru/legal/disk_termsofuse
Для решения задач, которые требуют больших мощностей, мы рекомендуем использовать Яндекс.Облако. Это другой облачный сервис Яндекса, который создан для решения задач бизнеса. Узнать больше о Яндекс.Облаке можно тут: https://cloud.yandex.ru
Я:
Вы не ответили на мой вопрос. Подскажите пожалуйста, какой пункт правил сервиса нарушает использование rclone? Я внимательно изучил правила по вашей ссылке (ещё до того, как вы из прислали).
Совсем недавно вы писали пост, что Яндекс всячески поддерживает OpenSource и без OpenSource Яндекса и современного интернета бы не было (https://habr.com/ru/post/480090/).
А теперь вы блокируете OpenSource утилиту по надуманной причине.
Кстати, программа не осуществляет "загрузку резервных копий в автоматическом режиме", программа предназначена для работы с облачными хранилищами, в том числе для синхронизации данных между компьютером и Яндекс.Диском. И этой мой основной use-case утилиты, который теперь недоступен.
Поддержка:
Согласно п. 3.1. «Пользовательского соглашения» Яндекс вправе устанавливать ограничения в использовании сервисов для всех Пользователей, либо для отдельных категорий Пользователей (в зависимости от места пребывания Пользователя, языка, на котором предоставляется сервис и т.д.), в том числе: наличие/отсутствие отдельных функций сервиса, срок хранения почтовых сообщений в сервисе Яндекс.Почта, любого другого контента, максимальное количество сообщений, которые могут быть отправлены или получены одним зарегистрированным пользователем, максимальный размер почтового сообщения или дискового пространства, максимальное количество обращений к сервису за указанный период времени, максимальный срок хранения контента, специальные параметры загружаемого контента и т.д. Яндекс может запретить автоматическое обращение к своим сервисам, а также прекратить прием любой информации, сгенерированной автоматически (например, почтового спама).
Пользователь также предупреждается об этом в п. 4.6. «Условий использования Яндекс.Диска».
Обратите внимание, что «Условия использования Яндекс.Диска» также устанавливают для Пользователя обязанность действовать добросовестно и воздержаться от злоупотребления функциями Сервиса. Пользователь в том числе обязуется воздержаться от организации массового файлообмена с использованием функций Сервиса.
Яндекс имеет право применять правила, лимиты и ограничения, направленные на предотвращение, ограничение и пресечение массового файлообмена по правилам п. 4.5. настоящих «Условий».
Последний ответ привнёс ясности. Особенно, первые два абзаца со ссылкой на п. 3.1. «Пользовательского соглашения» Яндекс и п. 4.6. «Условий использования Яндекс.Диска». Текст 4.6 тут не приведён, приведу:
4.6. Яндекс оставляет за собой право устанавливать любые правила, лимиты и ограничения (технические, юридические, организационные или иные) на использование Сервиса, и может менять их по собственному усмотрению, без предварительного уведомления Пользователя. В случаях, когда это не запрещено законодательством, указанные правила, лимиты и ограничения могут быть различными для различных категорий Пользователей.
Выводы?
Совсем недавно, уважаемый bobuk в своём посте здесь на Хабре писал, что Яндекс считает, что:
Мы в Яндексе считаем, что современный интернет невозможен без культуры open source и людей, которые инвестируют свое время в разработку программ с открытым кодом.
А на практике получается совсем иначе. Отличную утилиту блокируют за что-то, что не запрещено правилами сервиса. За то, что утилита позволяет использовать открытый публичный API Диска по прямому назначению — загружать файлы. Блокируют не за нарушение правил сервиса, а потому что могут.
Вдвойне странно то, что заблокированы не конкретные нарушители правил (тоже непонятно каких, в правилах использование диска для резервных копий нигде не запрещено). Заблокирован инструмент, функция осуществления резервного копирования в котором лишь одна из многих.
Что такое инфраструктурный компонент и почему их нельзя использовать с диском тоже не понятно. Даже браузер может быть использован как "инфраструктурный компонент", не стоит ли запретить пользоваться диском в браузере?
Что делать?
Пока использовать свой client_id и жить дальше. Но, судя по ответу техподдержки, можно ждать продолжения охоты на ведьм и блокировки также других client_id, user-agent rclone или, даже, какие-то эвристические способы заблокировать утилиту.
P.S. Я искренне надеюсь, что имела место простая ошибка или недопонимание. В Яндексе работают отличные специалисты (много с кем я знаком лично) и среди них, уверен, есть пользователи rclone.
Обновление 24.02.2020:
В выпуске 690 подкаста Радио-Т, соведущим которого также является уважаемый Бобук, обсуждалась блокировка rclone. Начало на 1:51:40.
Обновление 27.02.2020:
Авторизация по стандартному client_id снова работает.