Sambaの認証をOffice365のユーザで認証させたいなぁと思ったのでその下準備としてLinuxの認証にAzureADを使えるようにする。
環境
Debian 10.2
Nodejs v10.19.0 (apt)
aad-login
Office365
参考にしたサイト
#設定
基本的には参考サイトの手順ですが+αやることありました。
AzureADでアプリケーションを作成
Azureのコンソールから"アプリの登録"を行います。
名前:わかりやすい名称
サポートされるアカウントの種類:"この組織ディレクトリのみに含まれるアカウント"
アプリを登録すると、アプリケーション(クライアントID)が概要ページに表示されるのでコピーしておきます。
アプリケーションのマニフェスト修正
マニフェストページ表示するとJSONでマニフェストが表示されるので以下項目を設定します。
"allowPublicClient": true
私の場合は初期値がnullで設定されてました。
この設定を忘れると認証させた時に
AADSTS7000218: The request body must contain the following parameter:
となって認証失敗します。
APIのアクセス許可設定
APIのアクセス許可ページを開いて管理者がアクセス許可に対して同意する必要がありました。
"[名前]に管理者の同意を与えます"ボタンを押して同意を行います。
状態の項目に"[名前]に付与されました"と緑のチェックマーク付けばOKです。
この設定を行わないと認証させた時に
AADSTS65001: The user or administrator has not consented to use the application with ID {クライアントID} named '[アプリ名]'.
となって認証失敗します。
aad-loginのインストール
Linuxサーバー側の作業です。
sudo apt update
sudo apt install -y nodejs npm git
cd /tmp
git clone https://github.com/bureado/aad-login
cd aad-login/
mkdir -p /opt/aad-login
cp aad-login.js package.json /opt/aad-login/
cp aad-login /usr/local/bin/
cd /opt/aad-login/
npm install
aad-loginの設定
var directory = '[office365のドメイン名]';
var clientid = '[アプリケーションのID]';
add-login.jsを見ると分かりますが、username + '@' + directory
をuseridとして認証するのでoffice365で認証に使えるドメインをdirectoryに記載します。
pam.dの設定
aad-loginのgitの説明にあるようにcommon-authの先頭に追記します。
~省略~
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.
#↓ここ追加↓
auth sufficient pam_exec.so expose_authtok /usr/local/bin/aad-login
#↑ここ追加↑
# here are the per-package modules (the "Primary" block)
auth [success=1 default=ignore] pam_unix.so nullok_secure
# here's the fallback if no module succeeds
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
~省略~
ユーザの追加
認証させたいユーザを事前に追加しておく必要がありました。
追加するのは@より前のところになります。
#hoge@directoryの場合
useradd hoge
<<ユーザの追加しないで実行した場合>>
pam_exec.soが実行された時に"#010#012#015INCORRECT#010#012#015"がパスワードとして設定されてしまい認証できないようです。
authをする前にユーザが居るか確認するようで、ユーザが居ない場合パスワードが上記のものに差し替わるようです。
個人用途ならまぁしょうがないかという感じ(゜゜)
と、ここまでやってSambaってユーザ管理別やんってことに気づいて当初の目的が果たせないことに気づく・・・