GNU socialに2要素認証を

Mastodonなどでは使える2要素認証ですが，GNU socialにはありません．
先日 GNU social を nightly にしたのでこれが利用できそうです．

[RFC] two-factor authentication support (!119) · Merge Requests · gnu.io / gnu-social · GitLab

GNU socialをnightlyにしてみる – matoken’s meme

Plugin形式で戻すのも簡単そうだし試してみました．

backup
dbとファイルをバックアップしておきます．

$ sudo -u www-data rsync -avv /var/www/gnusocial.matoken.org
rsync --stats -av --delete --link-dest=/export/backup/micro/gs/www/`/bin/date -d '1 day ago' +%Y%m%d`/ /var/www/gnusocial.matoken.org /export/backup/micro/gs/www/`/bin/date +\%Y\%m\%d`/
$ sudo -u www-data tar cvf - /export/backup/micro/gs/www/`/bin/date +\%Y\%m\%d`/ > /export/backup/micro/gs/www/`/bin/date +\%Y\%m\%d`-2fa.tar.xz
$ umask 0266 && /usr/bin/mysqldump --defaults-file=/export/backup/micro/gs/db/.my-backup.cnf --opt --all-databases --events | /usr/bin/xz -9 > /export/backup/micro/gs/db/`date +\%Y-\%M-\%d_\%H:\%m:\%S_\%s_$$`-master2nightly.sql.xz

GNU social の source ディレクトリに移動して 2fa を marge する

$ cd gnu-social
$ git fetch https://git.gnu.io/sstjohn/gnu-social.git 2fa-beta
$ git checkout -b sstjohn/gnu-social-2fa-beta FETCH_HEAD
$ git checkout nightly
$ git merge --no-ff sstjohn/gnu-social-2fa-beta
$ git push origin nightly

動いているGNU social環境にcopy

$ sudo -u www-data rsync -avv --omit-dir-times --exclude=".git*" ./ <GNUSOCIAL_PATH>/

config.phpに以下の行を追加してTwoFactorAuth pluginを有効にする

addPlugin('TwoFactorAuth');

動作確認
設定画面の左側に 2FA という項目が増える．

「Require secondary authentication upon login」のチェックボックスにチェックを付けて SAVE で2FAが有効になる．
Default provider で常用する2FA方式を選択しておくと便利です．

認証には，「FIDO 2.0」「TOTP」「U2F」が利用できます．
自分はTOTPを利用しています．TOTPの場合スマホアプリのGoogle Autharicatorなどが使えます．QR CodeやKEYを使ってアプリに登録します．

自分は信頼できるスマホを持っていないのでoathtoolを使って適当なscriptを書いて使っています．

$ oathtool --totp -b YJVHGFLJBWJAEROQVQ5MTIAKA2XVCUAH
148825

バックアップコードも保存しておきましょう．

この状態で一旦GNU socialをログアウト，いつものID/PASSWORDでログインすると2FAの認証画面になるので，認証情報を入力してログインします．
既定値以外の認証情報を用いたい場合は「Try another way to sign in.」から選択可能です．

bug?
認証後真っ白な画面若しくは「Aythentication success!」と表示されるけど認証画面になります．多分バグです．URLを手動で編集したらログインできています．

サードパーティアプリケーションの対応
スマホアプリなどを利用している場合はパスワードを変更しなければいけません．
2FAの設定画面の「Application Passwords」の「ADD APPLICATION」ボタンから追加します．「Application name」に識別用の適当な名前を入れて，「Generate」ボタンでパスワードが生成されます．必要が無くなったら「Revoke」で消しましょう．

AndroidアプリのTwidereでは認証情報の変更画面が見当たりませんでした，アカウントの追加をして何時ものhost/id/新しい2faアプリケーションパスワードを設定するとすでにアカウントがあるとか言われて認証情報が書き換わりました．

という感じでとりあえず利用できるようになりました．
GNU socialでは結構長く放置されているので暫くは入らないような感じですかね．
バグはTOTP利用してる人が居ない?Ubico YubiKeyとかほしいですね．