はじめに
Nextcloud と Active Directory (AD) を連携させて運用するニーズは多いです。
ユーザがこのパスワードを変更する場合は、通常はドメインに参加している Windows 端末からパスワード変更機能を利用すると思います。
この記事では、このパスワード変更を AD 連携させた Nextcloud から行えるようにするにはどうすればよいかをまとめてみます。
記事の前提
- Nextcloud と AD の標準的な環境はあらかじめ準備できている前提とし、それぞれの構築手順は書きません。
- AD 連携するための Nextcloud への LDAP の設定内容に関する細かい設定の説明はいたしません。
パスワード変更するための必須条件
Nextcloud から AD(LDAP) 連携したアカウントのパスワードを変更する機能を実現するにあたっての条件については、 Nextcloud の公式ドキュメント Enable LDAP password changes per user に記載されております。
一般的な AD 連携において必要な条件は以下のとおりです。
- Nextcloud と AD の接続は
LDAPS(LDAP over SSL/TLS)
であること。 - AD 構成設定のうち、
dSHeuristics
パラメータのfUserPwdSupport
の設定が、「userPassword
属性をunicodePwd
のエイリアスとして使う」設定となっていること(dSHeuristics
パラメータについては Microsoft 公式ドキュメント を参照してください)。
環境
下の図のとおりです。
Linux(CentOS7)
$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
Nextcloud
$ sudo -u nginx php /var/www/html/nextcloud/occ status
- installed: true
- version: 16.0.1.1
- versionstring: 16.0.1
- edition:
Windows Server
設定手順
SSL/TLS 証明書の準備
Nextcloud と AD を連携する際に、Nextcloud から LDAPS で AD に接続する必要があるため、AD サーバに SSL/TLS 証明書などを設定していきます。
今回は閉じたネットワークで Nextcloud と AD を連携する前提とするので、自己署名証明書(=オレオレ証明書)で実装します。
まず、openssl を利用して、秘密鍵と SSL/TLS 証明書のファイルを作成します。
openssl req -x509 -days 3650 -newkey rsa:2048 -keyout secret.key -out server.crt
入力の必要な項目は以下のとおりです。これら以外の項目は未入力で Enter してしまって問題ありません。
Enter PEM pass phrase:
秘密鍵のパスフレーズVerifying - Enter PEM pass phrase:
秘密鍵のパスフレーズ(確認)Common Name (eg, your name or your server's hostname) []:
AD サーバのフルコンピューター名
出力されるファイルは以下のとおりです。
secret.key
秘密鍵server.crt
サーバ証明書(有効期間は10年(=3650日))
引き続き、AD サーバに作成した証明書や秘密鍵をインストールするために PKCS#12 ファイルの形式でひとまとめにします。
openssl pkcs12 -export -out server.p12 -inkey secret.key -in server.crt
入力の必要な項目は以下のとおりです。
Enter pass phrase for secret.key:
秘密鍵のパスフレーズEnter Export Password:
PKCS#12 ファイルのパスフレーズVerifying - Enter Export Password:
PKCS#12 ファイルのパスフレーズ(確認)
出力されるファイルは以下のとおりです。
server.p12
PKCS#12 形式のまとめファイル
証明書ファイルを AD サーバにインストール
前の手順で作成したファイルのうち、サーバ証明書 ( server.crt
) と、PKCS#12ファイル ( server.p12
) をリモートデスクトップ経由などの方法で AD サーバに転送します。
転送したファイルを以下の手順でインストールします。
① mmc 1 を起動
②証明書スナップインの追加
「ファイル」 – 「スナップインの追加と削除」をクリック。
「利用できるスナップイン」から証明書を選択し、「追加」をクリック、引き続き「 OK 」をクリック。
「コンピューターアカウント」を選択し、「次へ」をクリック。
「次へ」をクリック。
「OK」をクリック。
③ルート証明書のインストール
「証明書(ローカルコンピューター)」を展開し、「信頼された証明機関」を右クリック、「すべてのタスク」 – 「インポート」をクリック。
「次へ」をクリック。
「ファイル名」としてサーバ証明書ファイル ( server.crt
) を選択して「次へ」をクリック。
「次へ」をクリック。
「完了」をクリック。
「 OK 」をクリック。
④ PKCS#12 ファイルのインストール
「証明書(ローカルコンピューター)」の「個人」を右クリック、「すべてのタスク」 – 「インポート」をクリック。
「次へ」をクリック。
「ファイル名」として PKCS#12 ファイル ( server.p12
) を選択して「次へ」をクリック。
「パスワード」に PKCS#12 ファイルを作成したときのパスフレーズを入力して「次へ」をクリック。
「次へ」をクリック。
「完了」をクリック。
「 OK 」をクリック。
AD dSHeuristics
パラメータの設定変更
① mmc を起動
② ADSI エディタースナップインの追加
「ファイル」 – 「スナップインの追加と削除」をクリック。
「利用できるスナップイン」から「ADSI エディター」を選択し、「追加」をクリック、引き続き「 OK 」をクリック。
③dSHeuristics
パラメータの設定変更
「 ADSI エディター」を右クリックし、「接続」をクリック。
「既知の名前付けコンテキストを選択する」プルダウンで「構成」を選択し、「 OK 」をクリック。
「 ANSI エディター」 – 「構成」 – 「 CN=Configuration,・・・ 」 – 「 CN=Service 」 – 「 CN=Windows NT 」の順に展開し、「 CN=Directory Service 」を右クリックし、「プロパティ」をクリック。
「属性」から「 dSHeuristics 」をクリックし、「編集」をクリック。
「値」に「 000000211 」を入力し、「 OK 」をクリック。
「 OK 」をクリック。
古いパスワードの有効期間の変更 2
※この設定変更は AD の運用ポリシーとか関係あると思いますので、必要に応じて変更を検討してください。変更しなくてもパスワード変更は機能します。
レジストリエディターを起動します。
「\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa」を探して表示します。
右枠内で右クリックし、「新規」 – 「DWORD (32ビット) 値」をクリック。
「名前」を「 OldPasswordAllowedPeriod 」に変更し、Enter キーを押下。
「 OldPasswordAllowedPeriod 」を右クリックし、「修正」をクリック。
「値のデータ」を古いパスワードの有効期間 (単位:秒、0
は即時に無効) に変更し、「 OK 」クリック。
Nextcloud サーバの設定
①hosts 追加
※このサーバが参照している DNS で AD サーバのフルコンピューター名の名前解決ができる場合はこの手順は不要です。
echo '10.0.0.100 hogehoge.test.nextcloud.biz' >> /etc/hosts
# IP アドレスとフルコンピューター名は環境にあわせて変更してください。
②サーバ証明書のインストール
cp -pi server.crt /usr/share/pki/ca-trust-source/anchors/
update-ca-trust extract
③ LDAP 連携するための関連モジュールのインストール
yum install php-ldap -y
④サービス再起動
※Nginx+PHP-FPMの場合
systemctl restart php-fpm
※Apacheの場合
systemctl restart httpd
⑤ LDAP 連携アプリの有効化
sudo -u nginx php /var/www/html/nextcloud/occ app:enable user_ldap
Nextcloud の設定
Nextcloud に管理者権限を持つアカウントでログインし、設定画面から「LDAP/AD統合」をクリック。
連携する AD のサーバ情報を設定。
- ホスト:
ldaps://(AD サーバのフルコンピューター名)
- ポート:
636
※通常はこれです。AD サーバの環境に合わせて必要に応じて変更してください。 - ユーザーDN: AD に接続するユーザーDN
- パスワード: ユーザーDN のパスワード
- ベースDN: AD のベースDN
設定後、「ベースDNをテスト」をクリックし、「設定OK」となれば接続に問題はありません。引き続き「続ける」をクリック。
ユーザーのオブジェクトクラスを選択し、「設定を検証し、ユーザーを数える」をクリック、「xxユーザーが見つかりました」が表示されることを確認して、「詳細設定」をクリック。
「接続設定」で「設定は有効です」をチェックし、「ディレクトリ設定」を開きます。
「ベースユーザーツリー」、「ベースグループツリー」を環境に合わせて設定。「グループとメンバーの関連付け」は「member(AD)」に設定されていると思いますのでこれを確認。「ユーザーごとにLDAPパスワードの変更を有効にする」をチェック。引き続き「エキスパート設定」をクリック。
「内部ユーザー名属性:」に sAMAccountName
と入力し、「設定をテスト」をクリック。「正しい設定です。接続されました。」が出力されれば OK です。
動作確認
Nextcloud のパスワード変更画面からパスワードが変更できるか確認します。
脚注
1: mmc = マイクロソフト管理コンソール(Microsoft Management Console) ↑
2: Windows Server 2003 Service Pack 1 で NTLM ネットワーク認証の動作が変更される ↑