Yubico PAM モジュールは、YubiKey を既存のユーザー認証インフラストラクチャに統合する簡単な方法を提供します。 PAM は、GNU/Linux、Solaris、Mac OS X でユーザー認証に使用され、NCSA MyProxy などの他の特殊なアプリケーションでも使用されます。
このモジュールはマルチユーザー システムで動作します。主な操作モードは、YubiKey 検証サービス (YubiCloud、または「urllist」パラメータを使用して構成されたプライベートサービスなど) を使用してオンライン検証を実行することです。
バージョン 2.6 では、YubiKey 2.2 以降にある HMAC-SHA1 Challenge-Response を使用してオフライン検証も可能になりました。これにより、ykpersonalize パッケージの libykpers-1 の依存関係が導入されました。この依存関係を回避するには--without-cr
を渡してconfigure
。
開発コミュニティは、GitHub プロジェクト ページを通じて調整されます。
このプロジェクトは BSD ライセンスに基づいてライセンスされています。正確な表現については、ファイル COPYING を参照してください。このパッケージで YYYY-ZZZZ として指定されている著作権年の範囲については、その範囲がその閉じた間隔内のすべての年を指定していることに注意してください。
公式パッケージ版を使用している場合は、次のセクションに進んでください。
次のコマンドで Git を使用してソースをチェックアウトできます。
$ git クローン https://github.com/Yubico/yubico-pam.git
これにより、 yubico-pam
ディレクトリが作成されます。
コンパイル可能なソース ツリーを作成するには、Autoconf、automake、libtool、asciidoc、xsltproc、および docbook-xsl をインストールする必要があります。
以下を使用してビルド システムを生成します。
$ cd ユビコパム $ autoreconf --install
libykclient (ykclient.h、libykclient.so) と libpam-dev (security/pam_appl.h、libpam.so) をインストールする必要があります。次に、インストールする必要がある cURL と libyubikey が必要になります。
チャレンジ レスポンス オフライン認証には、yubikey-personalization プロジェクトの libykpers-1 が必要です。
セルフテストには、Net::LDAP::Server モジュールがインストールされた Perl が必要です。
ビルド システムは Autoconf を使用して、ビルド システムの実行をセットアップします。
./configure
LDAP サポートを無効にするには、--without-ldap を使用します。
次に、コードをビルドし、セルフテストを実行して、バイナリをインストールします。
チェックを入れてインストールする
Fedora/EPEL には、yum を使用してインストールできる yubico-pam のパッケージがすでに存在します。
$ sudo yum install pam_yubico
yubico-pam 用の Ubuntu PPA (Personal Package Archive) があり、最新の Ubuntu プラットフォームでは次のコマンドを使用してインストールできます。
$ sudo add-apt-repository ppa:yubico/stable $ sudo apt-get アップデート $ sudo apt-get install libpam-yubico
インストール後に、ファイル/usr/share/doc/libpam-yubico/README.Debian
を参照してください。
yubico-pam およびサポートする Yubico パッケージには、対応する FreeBSD ポートがあります。インストールするには:
$ cd /usr/ports/security/pam_yubico $ インストールをクリーンにする
高度な構成に関するメモはここから入手できます。
/etc/pam.d/
内の適切なファイルに行を追加して、PAM セットアップにインストールします。
十分な認証 pam_yubico.so id=[API クライアント ID] debug
そして pam_yubico.so を /lib/security/ (またはシステム内の PAM モジュールが存在する場所) に移動します。
mv /usr/local/lib/security/pam_yubico.so /lib/security/
詳細については、プロジェクトのドキュメントを参照してください。
サポートされている PAM モジュール パラメータは次のとおりです。
認証ファイル | YubiKey トークン ID とユーザー名とのマッピングを保持するファイルの場所を示します。 |
ID | Yubico 検証サーバーの API クライアント ID。デフォルトの YubiCloud サービスを使用する場合は、ここにアクセスしてください。 |
鍵 | クライアントキーをbase64形式で指定します。クライアント キーは API キーとも呼ばれ、クライアント (あなた) と検証サーバー間の通信の整合性を提供します。デフォルトの YubiCloud サービスで使用するために取得したい場合は、ここにアクセスしてください。 |
デバッグ | デバッグ出力を有効にします。 |
デバッグファイル | デバッグを書き込むファイル名。ファイルは存在し、通常のファイルである必要があります。標準出力がデフォルトです。 |
いつでもOK | すべての認証試行が成功するようにします (プレゼンテーション モードとも呼ばれます)。 |
try_first_pass | ユーザーにパスワードの入力を求める前に、モジュールはまず、このモジュールを満たす場合に備えて、以前のスタックされたモジュールのパスワードを試行します。 |
use_first_pass | 引数 use_first_pass は、モジュールに以前のスタックされたモジュールのパスワードの使用を強制し、ユーザーにプロンプトを表示しません。パスワードが使用できない場合、またはパスワードが適切でない場合、ユーザーはアクセスを拒否されます。 |
常にプロンプト | 設定されている場合、ユーザーが YubiKey を設定しているかどうかを確認するための検索は行わず、代わりに、何があっても入力を求めるプロンプトが表示されます。これは、ldap_bind_as_user が有効になっているが、このモジュールがユーザーのパスワードを読み取るために使用されている場合に便利です (YubiKey+OTP 認証シナリオで)。 |
ヌロック | 設定すると、認可マッピング ファイルまたは LDAP でユーザーに対して宣言されたトークンがない場合でも失敗しません。これは、ユーザーがトークンを関連付けていない限り、YubiKey 認証をオプションにするために使用できます。 |
ldap_starttls | 設定されている場合は、LDAP 接続にバインドする前に、LDAP 接続に対して STARTTLS コマンドを発行します。これは、ポート 389 でのみリッスンするが、依然として TLS を必要とするサーバーの一般的な設定です。 |
ldap_bind_as_user | 設定されている場合、ログインしているユーザーを使用して LDAP にバインドします。これには、ユーザーが PAM 経由で提供したパスワードが使用されます。これを設定する場合は、ldapdn と uid_attr も設定する必要があります。これを有効にすると、「ldap_bind_user」と「ldap_bind_password」が無視されます。 |
URLリスト | 使用する URL テンプレートのリスト。これは、ykclient_set_url_bases を呼び出すことによって設定されます。リストは次の形式である必要があります: |
URL | このオプションは使用しないでください。代わりに urllist オプションを使用してください。使用する URL テンプレートを指定します。これは、yubikey_client_set_url_template を呼び出すことによって設定されます。デフォルトは |
キャパス | X509 証明書が保存されているパスを指定します。これは、「url」と「ldap_uri」にそれぞれ「https」または「ldaps」が使用されている場合に必要です。 |
カフェインフォ | パスの代わりに CA バンドルの使用を許可するオプション。 |
プロキシ | 検証サーバーに接続するプロキシを指定します。有効なスキームは http://、https://、socks4://、socks4a://、socks5://、または sock5h:// です。 Socks5h はプロキシに DNS 解決を要求します。スキームまたはポートが指定されていない場合は、HTTP プロキシ ポート 1080 が使用されます。 |
冗長_otp | この引数は、OTP (ワンタイム パスワード) の入力時にそれを表示する、つまり入力された文字の端末エコーを有効にするために使用されます。 2 要素認証を使用している場合は、画面にパスワードが表示されるため、これを使用しないことをお勧めします。これには、カスタム フィールドを表示するために PAM モジュールを使用するサービスが必要です。このオプションは OpenSSH では使用できません。 |
ldap_uri | LDAP サーバー URI (例: ldap://localhost) を指定します。 |
LDAPサーバー | LDAP サーバーのホストを指定します (デフォルトの LDAP ポートが使用されます)。廃止されました。代わりに「ldap_uri」を使用してください。 |
LDAPDN | ユーザーが保存されているDNを指定します(例: ou=users,dc=domain,dc=com)。 |
ldap_clientcertfile | LDAP サーバーと通信するときに使用するクライアント証明書ファイルへのパス。これには「ldap_clientkeyfile」も設定する必要があることに注意してください。 |
ldap_clientkeyfile | LDAP サーバーと通信するときにクライアント証明書で使用されるキーへのパス。これには「ldap_clientcertfile」も設定する必要があることに注意してください。 |
ldap_bind_user | LDAP バインドを試行するユーザー。 |
ldap_bind_パスワード | LDAP バインドで使用するパスワード。 |
ldap_filter | LDAP で正しいオブジェクトを検索するために使用する LDAP フィルター。この文字列の |
ldap_cacertfile | LDAP 接続の CA 証明書ファイル。 |
ユーザー属性 | ユーザー名を保存するために使用される LDAP 属性を指定します (例:cn)。 |
yubi_attr | YubiKey ID の保存に使用される LDAP 属性を指定します。 |
yubi_attr_prefix | 複数のタイプの ID を格納するために使用される汎用属性の場合、LDAP 属性の値のプレフィックスを指定します。 |
token_id_length | OTP にプレフィックスを付ける ID の長さ (YubiCloud を使用している場合は 12)。 |
モード | 動作モード。 YubiCloud などの YubiKey 検証サービスを使用したオンライン検証には「クライアント」を使用し、HMAC-SHA-1 チャレンジ レスポンス構成で YubiKey を使用したオフライン検証には「チャレンジ レスポンス」を使用します。オフライン チャレンジ/レスポンス検証の設定方法の詳細については、マニュアル ページ ykpamcfg(1) を参照してください。 |
chalresp_path | システム全体の構成の場合にチャレンジ ファイルを保存するために使用されるディレクトリ (ユーザーのホーム ディレクトリに保存されるチャレンジ ファイルとは対照的)。この場所は、root のみが読み取りおよび書き込み可能である必要があります。このような設定の詳細については、 |
mysql_server | マッピングに使用する mysql サーバーのホスト名/アドレス。 |
mysql_port | mysqlサーバーのネットワークポート。 |
mysql_user | mysql データベースにアクセスするためのユーザー。 |
mysql_パスワード | mysql ユーザーのパスワード。 |
mysql_データベース | 使用する mysql データベース。 |
「デバッグ」を使用している場合は、誰でも書き込み可能なログ ファイルを作成すると便利です。
touch /var/run/pam-debug.log
chmod go+w /var/run/pam-debug.log
注記 | システムに物理的にアクセスすると、多くの場合、セキュリティ制御が回避されることを覚えておいてください。攻撃者がシステムに物理的にアクセスし (ホテルの部屋に残されたラップトップなど)、シングル ユーザー モードで起動できる場合、システム構成で yubico-pam を無効にすることができます。 |
YubiKey トークン ID と、それが関連付けられているユーザー ID との間でマッピングを作成する必要があります。これを行うには 2 つの方法があります。1 つのファイルで集中的に行う方法と、ユーザーがホーム ディレクトリにマッピングを作成できる個別の方法です。中央認証マッピング ファイルが使用されている場合、ユーザー ホーム ディレクトリ マッピングは使用されません。また、その逆が当てはまり、ユーザー ホーム ディレクトリ マッピングが使用されている場合、中央認証マッピング ファイルは使用されません。
/etc/yubikey_mappings
を作成します。このファイルには、YubiKey を使用してシステムへのアクセスを許可する各ユーザーのユーザー名とコロンで区切られた YubiKey トークン ID (passwd ファイルと同じ形式) が含まれている必要があります。
マッピングは次のようになります (1 行に 1 つ)。
<最初のユーザー名>:: :…。 <2 番目のユーザー名>: : :…。
次に、 authfile=/etc/yubikey_mappings
を PAM 構成行に追加します。次のようになります。
十分な認証 pam_yubico.so id=[API クライアント ID] authfile=/etc/yubikey_mappings
各ユーザーは、ホーム ディレクトリ内に~/.yubico/authorized_yubikeys
ファイルを作成し、そのファイルにマッピングを配置します。ファイルには 1 行だけ含める必要があります。
<ユーザー名>::
これは、SSH のauthorized_keys ファイルとほぼ同じ概念です。
YubiKey トークン ID は、いくつかの方法で取得できます。 1 つは、YubiKey で生成された OTP (ワンタイム パスワード) の最後の 32 文字を削除することです。もう 1 つは、modhex 計算機を使用する方法です。
YubiKey OTP を入力して変換します。YubiKey トークン ID は 12 文字で、次のようにリストされます。
Modhex エンコード: XXXXXXX
最後の部分が何を意味するかわかりませんか? OTP のコピーを取得する方法は次のとおりです。
ターミナルを開く
YubiKey のボタンを押すと、OTP がシェルに出力されます。
$ cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj
bash: cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj: command not found
これは Modhex_Calculator ページに貼り付けることができます。
これには、「デバッグ」をオンにして pam モジュールを有効にする必要があります。 YubiKey の入力を求められたら、ボタンを押します。 pam モジュールは、OTP やトークンの ID などのデバッグ情報をシェルに出力します。ID を設定ファイルにコピーすれば、準備は完了です。
「あなたのユーザー」の YubiKey: [pam_yubico.c:pam_sm_authenticate(867)] conv が 44 バイトを返しました [pam_yubico.c:pam_sm_authenticate(885)] 最初の 0 バイトをスキップします。長さは 44、token_id は 12 に設定され、トークン OTP は常に 32 です。 [pam_yubico.c:pam_sm_authenticate(892)] OTP: ccccccclabcabkhbdncicglfltnukadfoifadfhhhfe ID: cccccclabcab
SELinux を強制モード (Fedora 17 以降のデフォルト) で使用しているユーザーは、polkit-agent-helper-1、sshd、ログインによって検証されたサービスを含むサービスでログインの問題が発生する可能性があります。
これは、ssh の回避策を含む Red Hat bugzilla に文書化されています (他のサービス用に同等のファイルを作成できる可能性があります)。 「許可」モードのシステムでは AVC 警告が生成されますが、認証は成功します。
SELinux を強制しているかどうかを確認するには、 sestatus
コマンドを実行します。
Linux コンソール ログインで YubiKey を使用して認証したい場合は、 /etc/pam.d/login
の先頭に次の行を追加します。
十分な認証 pam_yubico.so id=[API クライアント ID] debug
YubiKey パブリック ID 属性ストレージ/特定のユーザー アカウントとの関連付けについては、Michael Ludvig のサンプル Active Directory スキーマ拡張を参照してください: https://github.com/mludvig/yubikey-ldap/tree/master/microsoft-schema
ファイル「/etc/pam.d/openvpn」を作成します。
認証が必要です pam_yubico.so ldap_uri=ldap://contoso.com debug id=[API ID] yubi_attr=YubiKeyID ldapdn=DC=contoso、DC=com ldap_filter=(&(sAMAccountName=%u)(objectClass=user)(memberOf=CN=somegroup,DC=contoso,DC=com)) [ldap_bind_user=CN=binduser,OU=サービス アカウント,DC=contoso,DC=com] ldap_bind_password=bind_password try_first_pass アカウントが必要です pam_yubico.so
ファイル「openvpn.conf」を作成します
プラグイン openvpn-plugin-auth-pam.so openvpn