3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LinuxにMicrosoft Entra IDでログインする

Posted at

ネットワークシステムサービス第1事業部の ふじまき です。

Microsoft 365を契約している組織ではWindows PCへのログオンから各種SaaSも全部Entra IDに統合されている環境も多いかと思います。(SRA?:rolling_eyes:

それらを横目に見つつ、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.servicehimmelblaud-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
/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を使った方がよいでしょう
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?