nextcloud вход по qr коду
NextCloud в качестве сервиса по созданию защищенных ссылок
Привет, Хабр! Хочу поделиться немного нетривиальным кейсом по настройке NextCloud в качестве сервиса по созданию защищенных ссылок, для прямого скачивания данных с подключенного сетевого smb\cifs-диска. Опишу решения нюансов, с которыми столкнулся во время настройки.
Зачем это надо?
Удобная доставка контента конечному пользователю, минуя возню с FTP и невозможность (из-за NDA) воспользоваться публичными сервисами и облаками для передачи файлов (BTsync, Google-\Mail-\Yandex-Disk\Dropbox\etc).
Предисловие
Наш офис имеет определенную инфраструктуру, в неё входит в том числе и ActiveDirectory, в которой у нас находятся сотрудники, состоящие в группах.
Во время сеанса работы за ПК, после логина, средствами настроенных политик, у каждого сотрудника монтируется сетевой диск. Через него время-от-времени идет обмен данными. В диске есть определенная структура папок, права на которые настроены через эти самые группы. Каждый видит то, что ему позволено настройками.
Обычно, для отдачи данных во внешний мир — поднимается, либо отдельный FTP, либо данные выгружаются на уже имеющийся. Признаюсь, это далеко не всегда удобно — как минимум, создание и управление временными логинами и паролями (например, когда партнёрам нужно отдать готовый контент), контроль места на FTP-сервере, ручная выгрузка на FTP-сервер перед “отправкой”.
В какой-то момент нам потребовалось иметь возможность напрямую отдавать конечным пользователям данные во внешний мир именно с нашего сетевого диска и, желательно, чтобы это было относительно безопасно: можно создать ссылку для скачивания (у нее имелось время жизни, пароль, разграничение прав на исходные данные и так далее).
На такую идею нас натолкнули одни из партнеров, так как у них имелся внутренний сервис, но там он был самописным.
Готовых вариантов с ходу в поисковике не нашлось (если у вас есть оные на примете — отпишитесь, пожалуйста в комментариях), а тратить потенциально много человеко-часов на разработку с нуля, тестирование и поддержку — не было желания и ресурсов ни у кого. Да и зачем изобретать велосипед, если зачастую все уже придумано до. Так на ум и пришел сервис NextCloud, который умеет подключать к себе внешние ресурсы.
Речь пойдет о последней стабильной, на данный момент версии — 19, но наш метод настройки подойдет и для более ранних версий — мы изначально реализовали это на 16 версии и потом постепенно обновлялись. Недавно я как раз поднимал его с нуля на последней (19), и опираясь на неё пишу статью.
Что мы хотим получить в конечном итоге:
Развёртка и настройка зависимостей
Для начала, нам надо иметь отдельную виртуалку или сервер, где можно установить операционную систему, и после — NextCloud.
На Хабре есть не одна статья, посвященная развёртке системы и сервиса.
AlexanderS достаточно хорошо и подробно описал процесс от установки системы до самой настройки облака (включая актуализацию статей по годам). Не вижу смысла в очередной раз это всё повторять.
Если вы тоже используете докер, то напомню — официальный образ не имеет на борту пакетов для работы с samba и вам лучше создать форк, установив их в своем Dockerfile. И, согласно документации, установка пакета php-smbclient внутри их образа немного отличается от классического “apt install package”.
2. Из-за особенностей настроек нашего сервера samba (отключена поддержка smb1), на машине с nextcloud, в файлах /etc/samba/smb.conf и /usr/share/samba/smb.conf пришлось поменять строки, отвечающие за протокол:
В ином случае, nextcloud так и не смог подключиться к диску.
Настройка nextcloud
Итак, Nextcloud уже установлен, зависимости поставлены, а в сервисе заведен один внутренний юзер, который создался во время установки.
Шаг первый. Подготовка шаблона аккаунтов сотрудников.
Поскольку у нас будет не один сотрудник в системе, а постепенно их количество будет меняться — если заранее не настроить шаблон создаваемого пользователя — у каждого будет в домашней папке несколько файлов-примеров. Хорошо что по этому поводу у nextcloud есть отдельная настройка — skeleton files, которая настраивается в config.php.
То есть, можно создать пустую папку и указать в конфиге полный путь к ней.
Шаг Второй. Делаем пользователей «read-only»
Достаточно указать квоту в «1 B» (1 байт) в разделе настроек пользователей (http(s)://nextcloud.domain.tld/settings/users).
Шаг третий — заранее чиним ZipStreamer
ZipStreamer — библиотека, используемая в бекенде NextCloud, она служит для создания архивов «на лету», то есть во время скачивания пачки файлов.
Если вы перейдя по шареной ссылке, нажали кнопку «Dowload All Files«/»Скачать все файлы«, то вы заметите, что вам не показывается в браузере (или в менеджере загрузок) конечный вес архива, а полоса загрузки будет неопределенной.
Кстати, в силу особенности этой технологии, возобновление приостановленных загрузок в этом случае невозможно.
Похожее поведение есть у и аналогичных сервисов: Google Drive, Яндекс.Диск, и т.д.
Проблема кроется в том, что по неизвестным причинам, заложенная в NextCloud логика переключения zip в zip64 сбоит, и при случае, если в папке больше 65536 файлов, и\или их общий вес будет превышать 4гб — скорее всего вы столкнетесь с проблемой, что скачанный файл будет либо побит, либо загрузка будет прерываться после скачанных 4гб.
Данной проблеме выделяли достаточное время, на GitHub даже есть, и не один, закрытый тикет (#1755, #15871, #8798), но несмотря на то, что якобы проблема решена — у нас она так и осталась, и с переменным успехом воспроизводилась, очень мешая работе. Пришлось решать её более радикально.
Поскольку у нас 100% 64хбитная система, то мы принудительно говорим библиотеке использовать 64х-битный режим. «Решение в лоб».
В официальном образе происходит при каждом запуске контейнера некий Integrity Check и из одного места в другое распаковываются оригинальные файлы поверх установленных( из /usr/src/nextcloud/* в /var/www/html/*).
Поэтому просто в лоб замапить файл в условном /var/www не получится — при запуске файл либо перетрется оригиналом, либо контейнер запустится и упадет сразу с ошибкой.
Так что мы подменяем патченым файлом исходный в папке /usr/src/nextcloud/lib/private/ еще при сборке в CI нашего форкнутого образа. Получается, наш поправленный файл будет гарантированно всегда использоваться.
Эти манипуляции, по крайней мере при использовании докер-образа, в Панели Администрирования точно завалят вам встроенную проверку на подлинность, имейте это ввиду.
Но лично нас пока это устроило.
Шаг четвертый — настраиваем параметры ссылок
В параметрах публикации настраиваем правила так, как будет удобно. Например, делаем обязательную защиту паролем и ставим обязательный срок жизни.
Шаг пятый — подключаем сетевой диск
Шаг шестой — запускаем пользователей через LDAP
Теперь, когда мы все подготовили — ставим из маркетплейса плагин, и сразу после подключаем LDAP. В нашей системе, мы давали доступ сотрудникам, которые находятся в группе NextcloudAccess. Можете сделать аналогично.
Заключение
Всё, после всех этих нехитрых, но местами не самых очевидных манипуляций — сервис работает, диск подключен, сотрудники добавлены, а пользователи качают и довольны.
Нагрузочное тестирование
«Как дела с нагрузкой?» — спросите вы напоследок.
6Gb Ram + 6CPU в виртуальной машине среди других VM.
При пике нагрузки на сеть — оперативной памяти использовалось чуть более 2.5Gb, процессор забит не был, а отдача в среднем была около 5Gbit/s (рекорд — доходило и до 8Gbit/s).
Единственное, что заметили — при отдаче сверх 6Gbit/s во внешний мир, у нас периодически отваливается web-интерфейс, но сами загрузки у пользователей продолжают идти.
Выявленные недостатки:
29Gb и имеет около
Использование двухфакторной аутентификации
Двухфакторная аутентификация (2FA) – способ защиты вашей учетной записи Nextcloud от несанкционированного доступа. В данном случае используется два разных типа проверок. Это может быть известная вам информация (например, пароль) и имеющееся оборудование (например, физический ключ). Обычно первым фактором является известный вам пароль, а вторым – полученное вами текстовое сообщение или код, сгенерированный на вашем телефоне или другом устройстве (которое у вас есть). Nextcloud поддерживает разные варианты вторых факторов, к которым могут быть добавлены новые варианты.
После включения приложения «Двухфакторная аутентификация» (Two-factor authentication) вашим администратором вы может включить и настроить его, как указано в разделе «Предпочтительные настройки». Ниже приведено описание данной процедуры.
Настройка двухфакторной аутентификации
В личных настройках нужно найти параметр «Второй фактор аутентификации» (Second-factor Auth). В данном примере используется TOTP (временной код, совместимый с аутентификатором Google).
Вы увидите секретный вопрос и QR-код, который можно отсканировать при помощи приложения TOTP на вашем телефоне (или другом устройстве). В зависимости от приложения или инструмента нужно ввести код или отсканировать QR-код, после чего ваше устройство покажет код для входа в систему, изменяющийся каждые 30 секунд.
Коды восстановления на случай потери второго фактора
Для двухфакторной аутентификации нужно постоянно генерировать резервные коды. Если ваш второй фактор украден или не работает, вы сможете использовать один из данных кодов, чтобы разблокировать учетную запись. Такие коды работают в качестве запасного второго фактора. Для получения резервного кода нужно перейти в личные настройки и найти настройки аутентификации по второму фактору. Выберите пункт «Создать коды восстановления» (Generate backup codes).
После этого вы увидите перечень одноразовых кодов восстановления.
Данные коды должны храниться в безопасном месте, где вы сможете их найти. Не храните их вместе со вторым фактором, например, рядом с вашим мобильным телефоном, чтобы при потере одного фактора у вас остался другой. Лучше всего хранить их дома.
Вход в систему при помощи двухфакторной аутентификации
После выхода в систему и необходимости повторного входа в систему в вашем веб-обозревателе будет выдан запрос ввода кода TOTP. Если вы включили не только фактор TOTP, но и другой фактор, то появится экран выбора, на котором можно будет выбрать метод двухфакторной аутентификации. Выберите пункт «TOTP».
После этого нужно ввести код:
При вводе правильного кода вы перейдете к вашей учетной записи Nextcloud.
Примечание: поскольку код контролируется по времени, важно, чтобы сервер и смартфон были синхронизированы. Разница во времени в несколько секунд не создает проблем.
Использование клиентских приложений с двухфакторной аутентификацией
После включения двухфакторной аутентификации ваши клиенты больше не смогут подключиться только с помощью вашего пароля, если они не поддерживают двухфакторную аутентификацию. Для решения данной проблемы вы должны сгенерировать для них специальные пароли устройств. Подробная информация приведена в разделе «Управление подключенными веб-обозревателями и устройствами».
Nextcloud. Настраиваем персональное облако и смотрим, стоит ли возня свеч
Содержание статьи
Вообще говоря, первым делом я рассматривал более безобидные варианты вроде Dropbox или Google Drive. Поставить одну из них на сервер, и пусть синхронизирует папки с компьютером, а при желании можно и на телефоне открыть. Но бесплатно в этих сервисах доступно не так много места, а платить за хранение одних и тех же файлов дважды совершенно не хочется — один раз хостеру VPS, где лежат данные, второй раз — за Dropbox. Да и что‑то свое иметь всегда приятнее, верно?
Поиски показали, что найти решение одновременно простое и не совсем кустарное не так‑то легко. Зато в любом треде на эту тему обязательно появляются люди, которые поставили себе ownCloud или Nextcloud и рапортуют о ровном и приятном полете на протяжении долгих лет. И хоть я и не поклонник мегакомбайнов, звучало это достаточно заманчиво, чтобы дать им шанс.
Обе программы — это платформы, которые сами по себе заменяют Dropbox и дают возможность управлять файлами и шейрить их, но после установки плагинов начинают напоминать миниатюрную операционку. Здесь тебе и почтовые программы, метящие на роль Gmail, и коллаборативные редакторы на манер Google Docs, и календари с планировщиками, и заметки, и майндмапы и прочие майндфаки.
ownCloud после установки
При этом ownCloud — штука далеко не новая, в «Хакере» о нем писали еще в 2014 году. Nextcloud посвежее и развивается активнее: первый релиз состоялся в 2016 году, а текущая версия на момент написания этой статьи — двадцатая.
Пристально изучив оба, я обнаружил, что Nextcloud вполне можно назвать младшим братом ownCloud, причем родным, а не двоюродным. Сходства видны на каждом шагу, включая даже некоторые элементы интерфейса и названия файлов. Такое ощущение, будто создатели Nextcloud не долго думая просто стянули весь код предшественника и принялись модернизировать его.
Обе компании находятся в Германии, так что история могла быть более запутанной и повествовать о расколе среди сотрудников ownCloud. Но нам об этом ничего не известно, так что просто возьмем Nextcloud, как более модный, и приступим к установке.
Установка
Детально раскатывание Nextcloud на своем сервере описано в документации, так что повторять ее мы не будем и только пробежимся по основным пунктам — чтобы ты представлял себе масштабы работ и не пропустил важные шаги, если решишь повторить мой путь.
Вот что потребуется сделать в общих чертах.
Когда все будет готово, не спеши перезапускать сервер! Как только ты это сделаешь, Nextcloud начнет на весь мир показывать установщик, которым, по идее, может воспользоваться кто угодно и станет админом твоего облака вместо тебя 🙂 Чтобы избежать этого, можешь либо завершить процесс установки через командную строку, либо настроить веб‑сервер таким образом, чтобы он не пускал кого попало. Тебя выручит авторизация (директива auth_basic ) либо белый список, в который будет входить только твой IP (директивы allow IP> и deny all ).
В любом случае для работы с Nextcloud тебе понадобится задать логин и пароль для админской учетки, а также указать базу данных и креды ее пользователя, которого ты создавал. В общем, если ты когда‑нибудь устанавливал WordPress или phpBB, то ты точно справишься.
Интерфейс и приложения
После долгих приключений в темном подземелье консоли мы выбираемся на поверхность, к цивилизации. На первый взгляд все очень модно.
Файловый менеджер с картиночками!
Точнее, подобие магазина, потому что денег здесь не берут, все только даром.
Шейринг
Еще можно назначить пароль и указать время, по истечении которого ссылка работать перестанет.
Ограничение по времени
Но внимание, конечно, сразу перетягивает на себя магазин приложений. Всего аппликух ни много ни мало — 281 штука. Здесь есть всякие просмотрщики (например, для снимков в RAW, книжек в ePub, треков в GPX), музыкальные плееры, галереи для просмотра и публикации картинок, несколько видов таск‑трекеров и заметок, менеджер паролей и тому подобные вещи.
Вот, к примеру, отличный редактор диаграмм на основе исходных кодов Draw.io, о котором я когда‑то писал в рубрике WWW. Он устанавливается буквально одной кнопкой, после этого можно создавать, открывать и редактировать файлы с диаграммами.
Не стоит, впрочем, ждать, что все приложения будут ставиться одной кнопкой и идеально работать, наделяя Nextcloud новой восхитительной возможностью. Приложухи здесь очень разные — как по качеству, так и по требованиям.
Например, бывает нужно что‑то дополнительно вручную устанавливать на сервер, а приложение Nextcloud служит только фронтендом. Так, нельзя просто взять и в один клик поставить коллаборативный редактор документов Collabora — нужен соответствующий сервер.
То же и с почтой. Программа с незатейливым названием Mail — это лишь клиентская часть, и если ты хочешь не только развернуть свой вебовый почтовик, но и не зависеть от сторонних сервисов POP3/SMTP/IMAP, то устанавливать, настраивать и поддерживать сервер придется самостоятельно. Разработчики рекомендуют использовать Mail-in-a-Box — как наиболее простой в установке.
Случается и так, что приложения требуют, например, определенной версии PHP или самого Nextcloud. В общем, забыть о том, что ты теперь сам себе админ, не выйдет.
Торренты и youtube-dl
Вряд ли сегодня кого‑то удивишь торрент‑клиентом с вебовым интерфейсом, но приятно, когда скачанными файлами легко управлять. Что касается youtube-dl — знаменитой программы для стягивания видео с YouTube и множества других сервисов (включая Twitter, TikTok и даже Pornhub), то у него и вовсе нет своего графического интерфейса. Так что иметь возможность открыть в браузере страничку, вбить туда URL и заполучить файл — идея неплохая, особенно если речь об использовании с мобильного устройства.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Show QR code with new app password and other settings to allow easier client setup #429
Comments
ChristophWurst commented Jul 18, 2016
Steps to reproduce
Expected behaviour
Configuring a client should be as easy as possible. I’m super lazy and I don’t want to type the server URL, username and password.
Actual behaviour
You have to type the URL, user and password and make typos.
Nextcloud version:
master
In the future, mobile clients could then integrate a QR code reader and make the device setup super easy.
The text was updated successfully, but these errors were encountered:
AndyScherzinger commented Jul 18, 2016 •
Sounds good to me 👍
Besides I also have custom URLs on my agenda (haven’t opened a ticket yet) which will allow the app to open a certain URL which contains the server address which will then launch the apps login screen with the server address being prefilled 🙂
One thing though. In the Android ecosystem we should not ship a QR code scanner but integrate with a QR code scanner (which does have the downside of the scanner having to be installed on the device already. ).
(EDIT: I removed «to develop» since it should first go to «approved»)
jancborchardt commented Jul 18, 2016
As said by @AndyScherzinger already, the giant downside of this is that a QR code scanner is needed. Building one in the app is probably a ton of work, and integrating with an existing one seems a bit pointless since … well, let’s face it, no one really uses QR code readers. 😉 (That is, a tiny technical minority.)
Just putting in the server address on the mobile and then doing something with OAuth or such would be a much better time investment and valuable for everyone I’d say. cc @LukasReschke @karlitschek
AndyScherzinger commented Jul 18, 2016
Android (and in a slightly similar but not exact same way) has the capability for our app to react to certain URLs. So we could implement the server side generation of emails with hyperlinks including this URL send to the potential users, which could then just click on the link, choose Nextcloud as the app to open the url, login screen appears with pre-filled server address.
Would this be something worth implementing?
jancborchardt commented Jul 18, 2016
Not sure since this is kind of a strange flow:
It seems actually more cumbersome than just the flow now:
tflidd commented Jul 18, 2016
I’ve seen the QR code-configuration in the bittorrent sync-client (owncloud/core#12071). It is really nice to use. Entering long addresses, usernames and passwords is not very handy on mobile devices (however it is only done once).
AndyScherzinger commented Jul 18, 2016
@jancborchardt it is slightly different 😉
This makes total sense imho for the scenario where an admin would setup a Nc instance and then send out an e-mail to all potential users and it also makes sense for mailings whenever in an enterprise scenario a new employee joins the company, gets and email to his cellphone and everything works from there 💃
tobiasKaminsky commented Jul 18, 2016
Why not doing both?
I imagine that integrating the qr code thing is not that much work.
AndyScherzinger commented Jul 18, 2016
The QR code thing is rather easy I guess (calling an Intent for results with a pre check if the intent is present)
tobiasKaminsky commented Jul 18, 2016
well, let’s face it, no one really uses QR code readers. 😉 (That is, a tiny technical minority.)
I doubt so, in some motorala phones a QR scanner is already built into the camera and some of my friends use it to distribute their wlan.
ChristophWurst commented Jul 18, 2016
It seems actually more cumbersome than just the flow now:
This is not true in some cases as that won’t work with the new app passwords if 2fa is enabled for a user. There is no way around using an app password in that case and you’d have to either generate/copy the app password from your mobile phone’s browser or create the password on your PC and type the password into your phone.
One thing though. In the Android ecosystem we should not ship a QR code scanner but integrate with a QR code scanner (which does have the downside of the scanner having to be installed on the device already. ).
Right, ideally apps should not ship a QR code scanner. However, apps like Signal or the OTP Authenticator have a reader built-in and I like that a lot, UX-wise. Actually, I was inspired by the easy setup of the Signal desktop client – you scan a QR code with your phone and everything else is set up for you automatically. I thought we could do something similar.