macOS High SierraでsudoコマンドをTouch IDで認証する方法


photo credit: lewro I love working in this RAILS enviroment via photopin (license)

MacBook ProのTouch IDを利用してSudoコマンドを実行できる方法が発見される。 | AAPL Ch.によると、Touch BarおよびTouch IDが搭載されているMacBook Proにおいて、特権でコマンドを実行するsudoコマンドをTouch IDで認証できる方法が見つかったようです。

sudoコマンドをTouch IDで認証する

sudoコマンドとは、Macのターミナルからコマンドを実行する際、特権(root)でコマンドを実行する方法です。管理者権限を有するユーザーであれば、通常のアカウントでは編集できないファイル(/etc/hostsなど)やコマンドを、特権(root)で実行できます。

PAMの認証にTouch IDによるsudoを追加する

PAM(Pluggable Authentication Module)とは、認証処理を行うモジュールおよびその認証機構のことを指します。FreeBSDから派生したMacやLinux系OSには標準で搭載されているセキュリティ機構です。sudoコマンドによる認証も、PAMの仕組みを利用して行われます。Touch IDを搭載したMacBook Proには、Touch IDによるPAMのモジュールが標準で搭載されており、PAMによるsudoの認証にこのモジュールを追加することにより、sudoコマンド実行時に、従来のパスワードではなくTouch IDを使用して認証することができるようになります。

# sudo: auth account password session
auth       sufficient     pam_smartcard.so
auth       required       pam_opendirectory.so
account    required       pam_permit.so
password   required       pam_deny.so
session    required       pam_permit.so

sudoコマンドによる、PAMの認証は/etc/pam.d/sudoファイルで管理されており、デフォルトでは上記のようになっています。PAMの認証は上から順番に行われるため、デフォルトでは「スマートカード(ICカード認証)」(十分条件:認証に成功した場合は実行、失敗した場合は次へ)、「OpenDirectory」(必要条件:認証に成功した場合は次へ、失敗した場合は処理を終了)、さらにアカウントの権限確認(管理者権限を持っているか)およびパスワードの認証を経てsudoされることになります。このファイルの先頭に以下の記述を追記します。

auth       sufficient     pam_tid.so

この記述は、認証(auth)にpam_tid.soモジュールを使用することを意味します。このpam_tid.soが、Touch ID搭載のMacBook Proに搭載されているTouch IDによるPAMの認証モジュールです。sufficientは「十分条件」という意味であり、この認証に成功すると以降に記述されている認証は行われないため、Touch IDのみによるsudoコマンドの実行を行うことが可能です。

sufficeint(十分条件)をrequired(必要条件)に変更することで、Touch ID、かつパスワードによる認証という強固なものにすることもできますが、Touch IDを使用できない環境(手に汗をかいていて正常に認証されない、など)において、sudoできなくなってしまうため、あまり需要はないかもしれません。

このファイルは特権アカウントでのみ編集が許可されているため、編集時はsudoコマンドを使用してください。viで編集するためには、ターミナルから以下のコマンドを実行します。

sudo vi /etc/pam.d/sudo

任意のテキストエディター(今回の場合は、vi)で上記のファイルを開き 、ファイルの先頭に上記の文字列を追記してください。編集後のファイルは以下のようになります。

# sudo: auth account password session
auth       sufficient     pam_tid.so
auth       sufficient     pam_smartcard.so
auth       required       pam_opendirectory.so
account    required       pam_permit.so
password   required       pam_deny.so
session    required       pam_permit.so

ターミナルを再起動し、再度同様のコマンドを実行しようとすると、パスワードを求められる代わりに以下のダイアログが表示されます。

ダイアログで「キャンセル」ボタンをクリックすると、従来通りパスワードによる認証になります。

sudo -s

参考までに上記のコマンドを実行することで、以降の作業をすべて特権で実行できます。

comments powered by Disqus