先日ファイル共有ソフトの Nextcloud 14がリリースされました.
新機能のうちSignal/Telegram/SMS による2要素認証のサポートが気になります.
Signal/Telegram/SMS 2FA support
A new 2-factor authentication provider named ‘gateway’ was introduced which allows users to use the secure messaging apps Signal and Telegram as well as various SMS gateways as second factor to secure their authentication.
SMSはplaySMS, websms.deを利用するようです.SignalもTelegramもセキュアなメッセージングサービスなのでこういう用途に向いていそうです.どちらも公式でLinux x86_64のデスクトップアプリが提供されています.アプリの出来は今の所Telegramのほうが上だと思います.Arm Linuxだと公式のものはないのですが,TelegramについてはCLIのアプリがあり,Raspberry Pi の Raspbian stretch でも要patchで動作しました.(Webアプリもあるのでそちらでも動作すると思うが未確認)
SMSはやったことがあるし,Telegram が使いやすい.てことでTelegramの設定をしてみました.まだ未実装な機能が多くちょっと面倒なのでメモしておきます.
Two-Factor Gateway の導入
Nextcloud 14に Two-Factor Gateway アプリを導入します.管理者アカウントで「アプリ」の「セキュリティ」から導入するのが楽でしょう.
導入するとNextcloudの「設定」の「セキュリティ」の中に「Message gateway second-factor auth」という項目が現れますが,設定が出来ません.
GitHubのドキュメントをみると未だ未実装の機能が多いようです.
Telegram Bot の作成
TOTPコードの送信する Telegram Bot を作成します.作成はTelegram のドキュメントを参照して作成します.
BotFather と会話してbot作成
BotFather という bot 管理用の bot が居るので,会話してbot を作成します.
/newbot
コマンドで新しい bot の作成が始まります.botの名前を効かれるので答えます.続いて bot の username
を求められます.この username は最後に bot
とつける必要があります.
成功するとアクセストークンが表示されるのでメモして次の手旬に移ります.以下の例では 640093430:AAFTa_pSAcKCZWeFoVDt-l7h7ewqzNe0Luo
がトークンです.
Done! Congratulations on your new bot. You will find it at t.me/matoken_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this. Use this token to access the HTTP API: 640093430:AAFTa_pSAcKCZWeFoVDt-l7h7ewqzNe0Luo For a description of the Bot API, see this page: https://core.telegram.org/bots/api
occ コマンドで Telegram bot のトークン設定
Nextcloud のインストールされている場所に Nextcloud 管理用の occ
コマンドがあります.このコマンドで Telegram bot のトークンを設定します.
トークンの 640093430:
部分は省いてその後ろだけを入力します.
$ sudo -u www-data php ./occ twofactorauth:gateway:configure telegram Please enter your Telegram bot token: AAFTa_pSAcKCZWeFoVDt-l7h7ewqzNe0Luo Using AAFTa_pSAcKCZWeFoVDt-l7h7ewqzNe0Luo. $ sudo -u www-data php ./occ twofactorauth:gateway:status Signal gateway: not configured SMS gateway: not configured Telegram gateway: configured
ひとまずこれで管理者側の設定は終了です.
Telegram bot の chat_id を調べて登録する
ここからはNextcloud の利用アカウントでの操作になります.
Telegram
In order to receive authentication codes via Telegram, you first have to start a new chat with the bot set up by your admin.
Secondly, you have to obtain your Telegram ID via the ID Bot. Enter this ID to receive your verification code below.You are not using Telegram for two-factor authentication at the moment. Enable
Telegram アプリを利用して,Telegram の bot から TOTPコードを受け取りたい Telegram アカウントに適当なメッセージを投げます.
@matoken hello
その後,Telegram API を利用してメッセージを取得して chat_id を調べます.
以下の例では 475721977
です.
$ curl https://api.telegram.org/bot640093430:AAHu9u_c12KC2PY8g22QZoA94u4tAJvxsvY/getUpdates | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 358 100 358 0 0 315 0 0:00:01 0:00:01 --:--:-- 315 { "ok": true, "result": [ { "update_id": 612249686, "message": { "message_id": 9, "from": { "id": 475721977, "is_bot": false, "first_name": "matoken", "username": "matoken", "language_code": "En" }, "chat": { "id": 475721977, "first_name": "matoken", "username": "matoken", "type": "private" }, "date": 1537282406, "text": "@matoken hello", "entities": [ { "offset": 0, "length": 8, "type": "mention" } ] } } ] }
試しに送信してみて Telegram アプリに bot からメッセージが飛んできたら chat id が正しいはず.
$ curl -X POST "https://api.telegram.org/bot640093430:AAHu9u_c12KC2PY8g22QZoA94u4tAJvxsvY" -d "chat_id=475721977&text=hello" | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 274 100 246 100 28 179 20 0:00:01 0:00:01 --:--:-- 200 { "ok": true, "result": { "message_id": 15, "from": { "id": 640093430, "is_bot": true, "first_name": "matoken_bot", "username": "matoken_bot" }, "chat": { "id": 475721977, "first_name": "matoken", "username": "matoken", "type": "private" }, "date": 1537312183, "text": "hello" } }
Nextcloud にログインして,「設定」→「セキュリティ」の下部に「Message gateway second-factor auth」という項目が出来ているので「Enable」を押す.
Telegram In order to receive authentication codes via Telegram, you first have to start a new chat with the bot set up by your admin. Secondly, you have to obtain your Telegram ID via the ID Bot. Enter this ID to receive your verification code below. You are not using Telegram for two-factor authentication at the moment. Enable
以下のメッセージが表示されたら chat_id
を入力して Verify
します.
Enter your identification (e.g. phone number to start the verification): Verify
Telegram で TOTPコードが飛んで来るのでそれを入力したらOKです.
一旦ログアウトして試してみましょう.
Telegram 認証を試す
めんどくさい……
未だ手順が面倒で一般ユーザに試してくれと言える状態ではないですね.でも次のリリースあたりでは簡単になるんじゃないでしょうか.
環境
$ sudo -u www-data php ./occ app:list|grep twofactor_|grep : - twofactor_backupcodes: 1.3.1 - twofactor_gateway: 0.9.0 - twofactor_totp: 1.5.0 $ sudo -u www-data php ./occ -V Nextcloud 14.0.0 $ lsb_release -d Description: Ubuntu 16.04.5 LTS $ uname -m x86_64