ネットワークシステムサービス第1事業部の ふじまき です。
Microsoft 365を契約している組織ではWindows PCへのログオンから各種SaaSも全部Entra IDに統合されている環境も多いかと思います。(SRA?
)
それらを横目に見つつ、Linuxサーバはどうにかならないのか?と思っていたらSambaの開発チームがHimmelblauというものを作っていたので紹介したいと思います。
https://himmelblau-idm.org/
https://github.com/himmelblau-idm/himmelblau
環境
OS: Rockylinux 8,9,10
なお、本記事の設定ではMicrosoft 365側の管理者権限は必要ありません。
Himmelblauのインストール
以下のサイトにアクセスし、Community Stableをクリック→プルダウンからHimmelblauをインストールしたいOSを選択。表示される手順に従ってyumリポジトリの追加とパッケージのインストールを行います。
https://himmelblau-idm.org/downloads/index.html
本記事ではsshログインしたいので、himmelblau-sshd-configパッケージもインストールします。
$ sudo dnf install -y himmelblau pam-himmelblau nss-himmelblau himmelblau-sshd-config
Himmelblauの設定
HTTP Proxy設定(必要な場合のみ)
外部へのHTTPSアクセスの際にProxyを経由する必要のある環境の場合はhimmelblaud.serviceのdrop-inでHTTPS_PROXY環境変数を設定します。
$ sudo mkdir /etc/systemd/system/himmelblaud.service.d
$ cat <<_CONF_ | sudo tee /etc/systemd/system/himmelblaud.service.d/aenv.conf
[Service]
Environment = HTTPS_PROXY=http://Proxyサーバ:ポート番号
_CONF_
$ sudo systemctl daemon-reload
ドメイン設定
Himmelblauの設定ファイル/etc/himmelblau/himmelblau.conf
domainsにMicrosoft 365で契約しているドメインを設定します。
$ sudo vi /etc/himmelblau/himmelblau.conf
弊社の場合はストレートにsra.co.jpです。
サービスの起動
himmelblaud.serviceとhimmelblaud-tasks.serviceを起動します。認証に関わるものなので、自動起動も有効にします。
$ sudo systemctl enable --now himmelblaud himmelblaud-tasks
NSS及びPAM設定
RHEL系のRockylinuxの場合、authselectコマンドを使うのがお作法ですが、動作確認なので直接編集します。
NSS設定
パッケージインストール時点で/etc/nsswitch.confのpasswd,shadow,groupデータベースのエントリの最後にhimmelblauが追加されていれば問題ありません。
$ grep himmelblau /etc/nsswitch.conf
passwd: sss files systemd himmelblau
shadow: files himmelblau
group: sss files systemd himmelblau
PAM設定
sshdのPAM設定/etc/pam.d/sshdはデフォルトではsubstackで/etc/pam.d/password-authをインクルードする構成になっているので、/etc/pam.d/password-authを変更します。
失敗するとOS再インストールする羽目になる可能性もあるので、rootのシェルに切り替えてから編集しましょう。
$ sudo -s
# vi /etc/pam.d/password-auth
auth required pam_env.so
auth sufficient pam_unix.so try_first_pass nullok
auth sufficient pam_himmelblau.so ignore_unknown_user mfa_poll_prompt
auth required pam_deny.so
account sufficient pam_unix.so
account sufficient pam_himmelblau.so ignore_unknown_user
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so try_first_pass use_authtok nullok sha512 shadow
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=2 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session optional pam_himmelblau.so
session required pam_unix.so
"password"にも使えるらしいですが、事故起こしそうなので省略
sshd設定
himmelblau-sshd-configに含まれる/etc/ssh/sshd_config.d/himmelblau.confというファイルに必要となる以下の設定が記述されているので、/etc/ssh/sshd_configからIncludeします。
KbdInteractiveAuthentication yes
ChallengeResponseAuthentication yes
なお、/etc/ssh/sshd_config及び/etc/ssh/sshd_config.d/配下のファイルに上記を打ち消す設定がある場合は削除(コメントアウト)しておきます。
設定を変更した場合は文法チェックで問題が無い事を確認してからサービスを再起動します。
$ sudo sshd -t;echo $?
$ sudo systemctl restart sshd
動作確認
他のサーバからsshでログインします。ユーザ名はUPN(メールアドレス)で指定します。
$ ssh "himmelblau導入サーバ名" -l "Microsoftアカウント"
ログイン先のサーバへの初回ログイン or PIN未設定の場合はパスワード入力プロンプトに対し、Microsoftアカウントのパスワードを入力します。
("Microsoftアカウント"@"ログイン先サーバ名") Password:
正しいパスワードが入力されると多要素認証による追加の入力を求められます。
例:SMSの場合
("Microsoftアカウント"@"ログイン先サーバ名") We texted your phone "電話番号(末尾2桁以外伏字)". Please enter the code to sign in:
Code: "SMSで届いたコードを入力"
多要素認証をパスするとPIN設定を求められるので、好きなものを設定
("Microsoftアカウント"@"ログイン先サーバ名") Set up a PIN
A Hello PIN is a fast, secure way to signin to your device, apps, and services.
The minimum PIN length is 6 characters.
New PIN: "PIN入力(1回目)"
("Microsoftアカウント"@"ログイン先サーバ名") Set up a PIN
A Hello PIN is a fast, secure way to signin to your device, apps, and services.
The minimum PIN length is 6 characters.
Confirm PIN: "PIN入力(2回目)"
Enrolling the Hello PIN. Please wait...
Enrolling the Hello PIN. Please wait...
PIN設定まで完了するとログインシェルが起動してログイン完了となります。
PIN設定済のサーバにsshログインする際はパスワード入力時にMicrosoftアカウントのパスワードの代わりにPINを入力します。
デフォルトのHimmelblau設定の場合、ホームディレクトリは/home/"アカウントUUID"となり、/home/"Microsoftアカウント"でシンボリックリンクが作成されます。
課題・感想・トラブル
- デバイス登録が出来ないMicrosoft 365ドメインでは以下のようなエラーが出て認証が通りません
AADSTS50001: The service principal for resource 'https://enrollment.manage.microsoft.com/' is disabled.
- Microsoft 365のパスワード入力を求めるプロンプトとPIN入力を求めるプロンプトが同じで判別不能
- 多要素認証のSMSを短時間に沢山実行すると一時的にブロックされ以下のようなエラーが出ます
AADSTS399287: Unknown error code
- HimmelblauのPAMモジュールは多要素認証やPIN設定処理がある特殊なものの為、Apache httpdのmod_authnz_pamとは互換性ありません
一応、別の方法(例:sshログイン)でPINを設定しておき、ブラウザの認証ダイアログでMicrosoftアカウントとPINを入力すれば動作は可能ですが、素直にmod_auth_openidcを使った方がよいでしょう