mokey は、FreeIPA 用のセルフサービス ユーザー アカウント管理ツールを提供する Web アプリケーションです。このプロジェクトの動機は、FreeIPA にはないセルフサービスのアカウント作成とパスワードのリセット機能を実装することでした。この機能は FreeIPA ではデフォルトでは提供されていません。詳細とこの決定の根拠については、ここを参照してください。 mokey は FreeIPA プラグインではなく、FreeIPA JSON API を使用する完全なスタンドアロン アプリケーションです。 mokey では、基礎となる LDAP スキーマを変更する必要はなく、MariaDB データベースを使用してアクセス トークンを保存します。ユーザー エクスペリエンスと Web インターフェイスは、組織のルック アンド フィールの要件に合わせてカスタマイズできます。 mokey は Go で書かれており、修正された BSD ライセンスの下でリリースされています。
mokey はアルファ版ソフトウェアとみなされ、自己責任で使用する必要があります。セルフサービスのパスワード リセットなどの機能の提供には本質的なセキュリティ リスクがあり、システムが悪用されやすくなる可能性があります。
注: mokey は、すでに FreeIPA に登録されているマシンにインストールする必要があります。 ipa-admintools パッケージをインストールすることもお勧めします。 FreeIPA へのホストの登録は、このドキュメントの範囲外です。
mokey をインストールするには、ここからコンパイル済みバイナリのコピーをダウンロードします。
tar.gz アーカイブ:
$ tar xvzf mokey-VERSION-linux-x86_64.tar.gz
deb、rpm パッケージ:
$ sudo dpkg -i mokey_VERSION_amd64.deb
$ sudo rpm -ivh mokey-VERSION-amd64.rpm
FreeIPA で「ユーザーの変更とパスワードのリセット」権限を持つユーザー アカウントとロールを作成します。このユーザー アカウントは、ユーザーのパスワードをリセットするために mokey アプリケーションによって使用されます。 「ユーザーの変更」権限でも「ipauserauthtype」を有効にする必要があります。次のコマンドを実行します (ipa-admintools がインストールされている必要があります)。
$ mkdir /etc/mokey/private
$ kinit adminuser
$ ipa role-add 'Mokey User Manager' --desc='Mokey User management'
$ ipa role-add-privilege 'Mokey User Manager' --privilege='User Administrators'
$ ipa user-add mokeyapp --first Mokey --last App
$ ipa role-add-member 'Mokey User Manager' --users=mokeyapp
$ ipa permission-mod 'System: Modify Users' --includedattrs=ipauserauthtype
$ ipa-getkeytab -s [your.ipa-master.server] -p mokeyapp -k /etc/mokey/private/mokeyapp.keytab
$ chmod 640 /etc/mokey/private/mokeyapp.keytab
$ chgrp mokey /etc/mokey/private/mokeyapp.keytab
mokey 設定ファイルを編集し、keytab ファイルへのパスを設定します。 token_secret
とcsrf_secret
の値は、空白のままにすると自動的に生成されます。再起動後もセッションを維持したい場合は、これらのシークレット値を設定します。他のサイト固有の構成オプションについては、ここを参照してください。
$ vim /etc/mokey/mokey.toml
# Path to keytab file
keytab = "/etc/mokey/private/mokeyapp.keytab"
# Secret key for branca tokens. Must be 32 bytes. To generate run:
# openssl rand -hex 32
token_secret = ""
# CSRF token secret key. Should be a random string
csrf_secret = ""
HTTPS を使用して mokey を実行することを強くお勧めします。 FreeIPA の自己署名 PKI を使用するか、商用認証局からの SSL cert/private_key が必要です。 SSL 証明書の作成は、このドキュメントの範囲外です。 haproxy または Apache/Nginx の背後で mokey を実行することもできます。
mokey サービスを開始します。
$ systemctl restart mokey
$ systemctl enable mokey
mokey を使用すると、ユーザーは ssh 公開キーを追加/削除できます。 FreeIPA に登録されているサーバーは、/etc/ssh/sshd_config に次の行を追加して sshd を再起動することで、LDAP で sshd ルックアップ ユーザーの公開キーを持つように構成できます。
AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys
AuthorizedKeysCommandUser nobody
mokey は、Hydra からのチャレンジ リクエストを処理するためのログイン/同意フローを実装します。これは、Hydra と FreeIPA アイデンティティ プロバイダーの間のブリッジとして機能します。 Hydra とログイン/同意フローの詳細については、ここを参照してください。
Hydra ログイン/同意フローを設定するには、 /etc/mokey/mokey.toml
で次の変数を設定します。
[hydra]
admin_url = "http://127.0.0.1:4445"
login_timeout = 86400
fake_tls_termination = true
Hydra で構成された OAuth クライアントは、FreeIPA をアイデンティティ プロバイダーとして使用して mokey 経由で認証されます。 OAuth 2.0/OIDC クライアント アプリケーションの例については、ここを参照してください。
まず、Go v1.21 以降が必要です。リポジトリのクローンを作成します。
$ git clone https://github.com/ubccr/mokey
$ cd mokey
$ go build .
mokey は BSD スタイルのライセンスに基づいてリリースされています。 LICENSE ファイルを参照してください。