スマートフォンでは当たり前になった生体認証ですが、Windwos HelloのおかげでノートPCにも一般的に搭載されるようになってきました。特に指紋認証については、赤外線カメラを利用した顔認証よりもWindows Helloのハードウェア要件を満たしやすいからか、多くのノートPCに搭載済みです。今回はこの指紋リーダーを使って、Ubuntuログイン時の処理を
Ubuntuで指紋認証ログイン
実はUbuntuには最初から指紋認証でログインする仕組みが備わっています。よって対応している指紋リーダーデバイスがあればすぐにでも使えるのです。まずはそちらの手順を紹介しましょう。最初に
表示されない場合は、
さて、ここで
「新しい指紋の採取」
指紋リーダーでの読み込み画面では
ちなみに指紋リーダーは
これで指紋認証でログインできるようになりました。ユーザー画面でも指紋認証ログインが
実際にログアウトして、指紋認証ログインできるか試してみます。Ubuntuのログイン画面では
パスワード入力画面になると入力ボックスの下に
ちなみに画面をロックした時の復旧にも指紋認証が使えます。こちらもパスワード入力画面になったら指紋リーダーに指を置くだけです。
残念ながらUbuntuの場合、管理者権限での実行が必要な処理の際に入力するウィンドウでは指紋認証は使えません。引き続きパスワード入力が必要です。
指紋リーダーデバイスとfprintdについて
Ubuntuで指紋認証を行うために必要な処理は
fprintがサポートしている指紋リーダーデバイスはUSB接続かSPIデバイスに大別されます。大抵はUSBデバイスでしょう。たとえば手元にある
$ lsusb Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 005: ID 06cb:0168 Synaptics, Inc. => これが指紋リーダー Bus 003 Device 002: ID 04f2:b7cb Chicony Electronics Co., Ltd Integrated Camera => こちらはカメラ Bus 003 Device 004: ID 8087:0033 Intel Corp. Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
このうち06cb:0168
」
$ lsusb -v -s 003:005 Bus 003 Device 005: ID 06cb:0168 Synaptics, Inc. Couldn't open device, some information will be missing Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 16 bDeviceProtocol 255 bMaxPacketSize0 8 idVendor 0x06cb Synaptics, Inc. (後略)
さて、fprintにはCLIのツールもあります。実はUbuntuの設定ソフトウェアを使わなくても、こちらから指紋の登録や認証が可能です。
- fprintd-list:デバイスと登録された指紋の一覧表示
- fprintd-enroll:指紋の登録
- fprintd-delete:登録された指紋の削除
- fprintd-verify:指紋認証
個別に試してみましょう。まずはfprintd-list
です。これはユーザーごとに登録されている指紋の状況を表示するツールです。ユーザー名を指定して実行してみましょう。
$ fprintd-list shibata found 1 devices Device at /net/reactivated/Fprint/Device/0 Using device /net/reactivated/Fprint/Device/0 Fingerprints for user shibata on Synaptics Sensors (press): - #0: right-index-finger
デバイスに/net/
」/var/
以下に、ユーザーごと・
指紋を登録したければfprintd-enroll
を使います。これは設定ソフトウェアでやっていたことをCLIでやるだけです。ただし、引数を指定しない場合は既存の指紋データを削除した上で全部を登録し直します。既存のデータを残したい場合は、きちんと-f 指
」
$ fprintd-enroll -f right-middle-finger shibata Using device /net/reactivated/Fprint/Device/0 Enrolling right-middle-finger finger. Enroll result: enroll-stage-passed Enroll result: enroll-stage-passed Enroll result: enroll-stage-passed Enroll result: enroll-stage-passed Enroll result: enroll-stage-passed Enroll result: enroll-retry-scan Enroll result: enroll-stage-passed Enroll result: enroll-stage-passed Enroll result: enroll-stage-passed Enroll result: enroll-retry-scan Enroll result: enroll-completed
fprintd-list
を実行すると、新しい指の情報が登録されていることがわかります。引数として指定できる指の名前は次のとおりです。
- 右手:right
- 左手:left
- 親指:thumb
- 人差し指:index
- 中指:middle
- 薬指:ring
- 小指:little
人差し指から小指までは{right,left}-{index,middle,ring,little}-finger
」{right,left}-thumb
」
fprintd-delete
はその名の通り指紋データを削除します。-f
」
fprintd-verify
を使うと、簡易的に指紋認証のテストが行えます。
右手の人差し指でのチェック $ fprintd-verify Using device /net/reactivated/Fprint/Device/0 Listing enrolled fingers: - #0: right-index-finger - #1: right-middle-finger Verify started! Verifying: right-index-finger Verify result: verify-match (done) 認証に失敗するとコマンドとしてはエラー(戻り値が1)となる shibata@fmvuh:~$ fprintd-verify Using device /net/reactivated/Fprint/Device/0 Listing enrolled fingers: - #0: right-index-finger - #1: right-middle-finger Verify started! Verifying: right-index-finger Verify result: verify-no-match (done) 他の指で認証したければ明示的に指を指定する $ fprintd-verify -f right-middle-finger Using device /net/reactivated/Fprint/Device/0 Listing enrolled fingers: - #0: right-index-finger - #1: right-middle-finger Verify started! Verifying: right-middle-finger Verify result: verify-match (done)
これらのコマンドはfprintdのテストアプリケーションという扱いです。実際のログイン時には、PAMがこれらのツールの代わりに動きます。具体的には主に次のファイルが関わってくるのです。
- gdm3の
「 /etc/
」pam. d/ gdm-fingerprint - libpam-fprintdの
「 /usr/
」lib/ x86_ 64-linux-gnu/ security/ pam_ fprintd. so
gdm-fingerprint
ではpam_
が呼び出され、そのpam_
がfprintdと連携して動作します。よってpam_
を上手く使ってやれば、PAMを使うsudo
等でも、指紋認証を利用可能です。
指紋認証のような生体認証は、多要素認証における一要素
もちろん上手く設定すれば使えるかもしれませんが、もし多要素認証的な用途で使いたいのであれば、FIDO認証に対応したセキュリティキーを用意するほうが楽かもしれません。このあたりは次の記事が参考になるでしょう。