「LDAP 認証」の版間の差分
細 (カテゴリ変更) |
Kusanaginoturugi (トーク | 投稿記録) (→SSSD によるオンライン・オフライン認証: 章立てを修正(英語版準拠)) |
||
| (同じ利用者による、間の3版が非表示) | |||
| 5行目: | 5行目: | ||
{{Related|OpenLDAP}} |
{{Related|OpenLDAP}} |
||
{{Related|LDAP ホスト}} |
{{Related|LDAP ホスト}} |
||
| + | {{Related|アイデンティティ管理}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
| 141行目: | 142行目: | ||
次に、[[公式リポジトリ]]から {{pkg|nss-pam-ldapd}} を[[インストール]]します。 |
次に、[[公式リポジトリ]]から {{pkg|nss-pam-ldapd}} を[[インストール]]します。 |
||
| − | === |
+ | === オンライン認証 === |
| + | |||
| + | ==== NSS の設定 ==== |
||
NSS は様々なソースを設定データベースとして管理するシステムファリシティです。例えば、{{ic|/etc/passwd}} は {{ic|passwd}} データベースの {{ic|file}} タイプのソースであり、ユーザーアカウントが保存されます。 |
NSS は様々なソースを設定データベースとして管理するシステムファリシティです。例えば、{{ic|/etc/passwd}} は {{ic|passwd}} データベースの {{ic|file}} タイプのソースであり、ユーザーアカウントが保存されます。 |
||
| 156行目: | 159行目: | ||
これでクライアント側で {{ic|getent passwd}} を実行すると LDAP ユーザーが確認できるはずです。 |
これでクライアント側で {{ic|getent passwd}} を実行すると LDAP ユーザーが確認できるはずです。 |
||
| − | === PAM の設定 === |
+ | ==== PAM の設定 ==== |
PAM の設定は大まかに言って {{ic|pam_unix.so}} が書かれているところ全てに {{ic|pam_ldap.so}} も記述するだけです。Arch は {{pkg|pambase}} に移行しているため、編集が必要な箇所は減っています。pam の設定に関する詳細は [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Smart_Cards/PAM_Configuration_Files.html RedHat のドキュメント] によくまとまっています。[http://arthurdejong.org/nss-pam-ldapd nss-pam-ldapd] の上流のドキュメントも読むと良いでしょう。 |
PAM の設定は大まかに言って {{ic|pam_unix.so}} が書かれているところ全てに {{ic|pam_ldap.so}} も記述するだけです。Arch は {{pkg|pambase}} に移行しているため、編集が必要な箇所は減っています。pam の設定に関する詳細は [https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Smart_Cards/PAM_Configuration_Files.html RedHat のドキュメント] によくまとまっています。[http://arthurdejong.org/nss-pam-ldapd nss-pam-ldapd] の上流のドキュメントも読むと良いでしょう。 |
||
| 215行目: | 218行目: | ||
}} |
}} |
||
| − | ==== ログイン時にホームフォルダを作成 ==== |
+ | ===== ログイン時にホームフォルダを作成 ===== |
ログイン時にホームフォルダを作成したい場合 (例: ホームフォルダを共有するのに NFS を使わない場合)、{{ic|/etc/pam.d/system-login}} を編集して {{ic|pam_mkhomedir.so}} を ''session'' セクションの "sufficient" アイテムの上に追加してください。ssh, xdm, kdm, gdm などから tty にログインしたときにホームフォルダが作成されるようになります。同じように {{ic|/etc/pam.d/su}} や {{ic|/etc/pam.d/su-l}} などのファイルも編集することで、{{ic|su}} や {{ic|su --login}} でもホームフォルダの作成を有効にできます。ssh ログインの場合はホームフォルダを作成して欲しくないときは {{ic|system-login}} などのかわりに {{ic|system-local-login}} を編集してください。 |
ログイン時にホームフォルダを作成したい場合 (例: ホームフォルダを共有するのに NFS を使わない場合)、{{ic|/etc/pam.d/system-login}} を編集して {{ic|pam_mkhomedir.so}} を ''session'' セクションの "sufficient" アイテムの上に追加してください。ssh, xdm, kdm, gdm などから tty にログインしたときにホームフォルダが作成されるようになります。同じように {{ic|/etc/pam.d/su}} や {{ic|/etc/pam.d/su-l}} などのファイルも編集することで、{{ic|su}} や {{ic|su --login}} でもホームフォルダの作成を有効にできます。ssh ログインの場合はホームフォルダを作成して欲しくないときは {{ic|system-login}} などのかわりに {{ic|system-local-login}} を編集してください。 |
||
| 237行目: | 240行目: | ||
}} |
}} |
||
| − | ==== sudo の有効化 ==== |
+ | ===== sudo の有効化 ===== |
LDAP ユーザーから sudo を使うようにするには、{{ic|/etc/pam.d/sudo}} を編集します。sudoers もあわせて編集する必要があります。 |
LDAP ユーザーから sudo を使うようにするには、{{ic|/etc/pam.d/sudo}} を編集します。sudoers もあわせて編集する必要があります。 |
||
| 252行目: | 255行目: | ||
}} |
}} |
||
| − | == SSSD によるオンライン・オフライン認証 == |
+ | === SSSD によるオンライン・オフライン認証 === |
SSSD はシステムデーモンです。主な機能は共通フレームワークを通してリモートのリソースを識別・認証できるようにすることで、システムのキャッシュやオフラインのサポートを提供します。PAM や NSS モジュールも含まれており、将来的には D-BUS ベースのインタフェースによって拡張ユーザー情報も含める予定です。拡張ユーザーデータだけでなくローカルユーザーを保存するデータベースとしても使えます。 |
SSSD はシステムデーモンです。主な機能は共通フレームワークを通してリモートのリソースを識別・認証できるようにすることで、システムのキャッシュやオフラインのサポートを提供します。PAM や NSS モジュールも含まれており、将来的には D-BUS ベースのインタフェースによって拡張ユーザー情報も含める予定です。拡張ユーザーデータだけでなくローカルユーザーを保存するデータベースとしても使えます。 |
||
| − | |||
| − | === インストール === |
||
{{pkg|sssd}} パッケージは[[公式リポジトリ]]からインストールできます。 |
{{pkg|sssd}} パッケージは[[公式リポジトリ]]からインストールできます。 |
||
| − | |||
| − | === SSSD で基本的な認証を有効にする方法 === |
||
==== SSSD の設定 ==== |
==== SSSD の設定 ==== |
||
2022年10月20日 (木) 12:04時点における最新版
関連記事
イントロダクションとコンセプト
このガイドでは LDAP ディレクトリから Arch Linux を認証できるように設定します。LDAP ディレクトリはローカル (同一のコンピュータにインストール) でもネットワーク (中央認証が必要なラボ環境など) でもかまいません。
ガイドは2つのパートに分かれています。最初のパートでは認証ディレクトリをホストする OpenLDAP サーバーをセットアップします。次のパートではクライアントコンピュータで認証を行うのに必要な NSS と PAM モジュールを設定します。既存の LDAP サーバーが存在して Arch の認証を設定したいだけの場合、2番目のパートまでスキップしてください。
NSS と PAM
NSS (Name Service Switch の略) は設定データベースの様々なソースを設定するシステム機構です。例えば、/etc/passwd は passwd データベースの file タイプのソースです。
PAM (Pluggable Authentication Module の略) は様々なプラグインを使って認証スキームを拡張するために Linux (やその他の *nix) によって使われている機構です。
まとめると、NSS を設定して OpenLDAP サーバーを passwd や shadow などの設定データベースのソースとして使うようにして、それから設定したソースを使ってユーザーを認証するように PAM を設定することになります。
LDAP サーバーのセットアップ
インストール
インストールや基本的な設定については OpenLDAP の記事に書かれています。インストールが完了したら、このページに戻ってきて下さい。
アクセス制御の設定
LDAP サーバーから (暗号化された) パスワードに誰もアクセスできないように、そしてユーザーだけが自分のパスワードを編集できるようにするため、以下を /etc/openldap/slapd.conf に追加して slapd.service を再起動してください:
slapd.conf
access to attrs=userPassword
by self write
by anonymous auth
by dn.base="cn=Manager,dc=example,dc=org" write
by * none
access to *
by self write
by dn.base="cn=Manager,dc=example,dc=org" write
by * read
上記の行だけで OpenLDAP サーバーをテストすることはできますが、ACL の書き込み権限が与えられるため、uidNumber や gidNumber などのシステム属性の値をユーザーが変更できてしまいます。書き込み権限を userPassword と個人情報に関連する属性だけに留めるほうが良いでしょう。上よりもセキュアな設定は以下のようになります:
slapd.conf
access to attrs=userPassword,givenName,sn,photo
by self write
by anonymous auth
by dn.base="cn=Manager,dc=example,dc=org" write
by * none
access to *
by self read
by dn.base="cn=Manager,dc=example,dc=org" write
by * read
ベースデータで LDAP ツリーを作成
以下の内容で base.ldif という名前の一時ファイルを作成してください。
base.ldif
# example.org dn: dc=example,dc=org dc: example o: Example Organization objectClass: dcObject objectClass: organization # Manager, example.org dn: cn=Manager,dc=example,dc=org cn: Manager description: LDAP administrator objectClass: organizationalRole objectClass: top roleOccupant: dc=example,dc=org # People, example.org dn: ou=People,dc=example,dc=org ou: People objectClass: top objectClass: organizationalUnit # Groups, example.org dn: ou=Group,dc=example,dc=org ou: Group objectClass: top objectClass: organizationalUnit
OpenLDAP ツリーに追加:
$ ldapadd -D "cn=Manager,dc=example,dc=org" -W -f base.ldif
データがインポートされたことをテスト:
$ ldapsearch -x -b 'dc=example,dc=org' '(objectclass=*)'
ユーザーの追加
ユーザーを手動で追加するには、以下のような .ldif ファイルを作成:
user_joe.ldif
dn: uid=johndoe,ou=People,dc=example,dc=org
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: johndoe
cn: John Doe
sn: Doe
givenName: John
title: Guinea Pig
telephoneNumber: +0 000 000 0000
mobile: +0 000 000 0000
postalAddress: AddressLine1$AddressLine2$AddressLine3
userPassword: {CRYPT}xxxxxxxxxx
labeledURI: https://archlinux.org/
loginShell: /bin/bash
uidNumber: 9999
gidNumber: 9999
homeDirectory: /home/johndoe/
description: This is an example user
userPassword エントリの xxxxxxxxxx は /etc/shadow 内の値で置き換えるか slappasswd コマンドを使って下さい。そしてユーザーを追加:
$ ldapadd -D "cn=Manager,dc=example,dc=org" -W -f user_joe.ldif
クライアントのセットアップ
OpenLDAP に書かれているようにして OpenLDAP クライアントをインストールしてください。ldapsearch でサーバーにクエリが送信できることを確認してください。
次に、公式リポジトリから nss-pam-ldapd をインストールします。
オンライン認証
NSS の設定
NSS は様々なソースを設定データベースとして管理するシステムファリシティです。例えば、/etc/passwd は passwd データベースの file タイプのソースであり、ユーザーアカウントが保存されます。
NSS のメインの設定ファイルである /etc/nsswitch.conf を編集してください。システムデータベースとしてどのソースを使うのか NSS を設定します。ldap ディレクティブを passwd, group, shadow データベースに追加してください。ファイルは以下のようになります:
passwd: files ldap group: files ldap shadow: files ldap
/etc/nslcd.conf を編集して base と uri 行をあなたの ldap サーバーの設定にあわせて変更してください。
systemd を使って nslcd.service を起動します。
これでクライアント側で getent passwd を実行すると LDAP ユーザーが確認できるはずです。
PAM の設定
PAM の設定は大まかに言って pam_unix.so が書かれているところ全てに pam_ldap.so も記述するだけです。Arch は pambase に移行しているため、編集が必要な箇所は減っています。pam の設定に関する詳細は RedHat のドキュメント によくまとまっています。nss-pam-ldapd の上流のドキュメントも読むと良いでしょう。
まず /etc/pam.d/system-auth を編集してください。このファイルは pam.d 内の他のファイルからも大抵インクルードされているので、/etc/pam.d/system-auth に変更を加えることで、ほとんどのファイルに変更を適用できます。pambase をアップデートすると /etc/pam.d/system-auth は変化することがあります。
各セクションの一番上に sufficient の pam_ldap.so を追加してください。ただし session セクションだけは例外で、optional にしておきます。
/etc/pam.d/system-auth
auth sufficient pam_ldap.so auth required pam_unix.so try_first_pass nullok auth optional pam_permit.so auth required pam_env.so account sufficient pam_ldap.so account required pam_unix.so account optional pam_permit.so account required pam_time.so password sufficient pam_ldap.so password required pam_unix.so try_first_pass nullok sha512 shadow password optional pam_permit.so session required pam_limits.so session required pam_unix.so session optional pam_ldap.so session optional pam_permit.so
次に /etc/pam.d/su と /etc/pam.d/su-l を同じように編集してください。su-l ファイルはユーザーが su --login を実行したときに使われます。
各セクションの一番上に sufficient の pam_ldap.so を追加して、auth セクションの pam_unix に use_first_pass を追加してください。
/etc/pam.d/su
#%PAM-1.0 auth sufficient pam_ldap.so auth sufficient pam_rootok.so # Uncomment the following line to implicitly trust users in the "wheel" group. #auth sufficient pam_wheel.so trust use_uid # Uncomment the following line to require a user to be in the "wheel" group. #auth required pam_wheel.so use_uid auth required pam_unix.so use_first_pass account sufficient pam_ldap.so account required pam_unix.so session sufficient pam_ldap.so session required pam_unix.so
ユーザーが自分のパスワードを編集できるように、/etc/pam.d/passwd を編集:
/etc/pam.d/passwd
#%PAM-1.0 password sufficient pam_ldap.so #password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3 #password required pam_unix.so sha512 shadow use_authtok password required pam_unix.so sha512 shadow nullok
ログイン時にホームフォルダを作成
ログイン時にホームフォルダを作成したい場合 (例: ホームフォルダを共有するのに NFS を使わない場合)、/etc/pam.d/system-login を編集して pam_mkhomedir.so を session セクションの "sufficient" アイテムの上に追加してください。ssh, xdm, kdm, gdm などから tty にログインしたときにホームフォルダが作成されるようになります。同じように /etc/pam.d/su や /etc/pam.d/su-l などのファイルも編集することで、su や su --login でもホームフォルダの作成を有効にできます。ssh ログインの場合はホームフォルダを作成して欲しくないときは system-login などのかわりに system-local-login を編集してください。
/etc/pam.d/system-login
...top of file not shown... session optional pam_loginuid.so session include system-auth session optional pam_motd.so motd=/etc/motd session optional pam_mail.so dir=/var/spool/mail standard quiet -session optional pam_systemd.so session required pam_env.so session required pam_mkhomedir.so skel=/etc/skel umask=0022
/etc/pam.d/su-l
...top of file not shown... session required pam_mkhomedir.so skel=/etc/skel umask=0022 session sufficient pam_ldap.so session required pam_unix.so
sudo の有効化
LDAP ユーザーから sudo を使うようにするには、/etc/pam.d/sudo を編集します。sudoers もあわせて編集する必要があります。
/etc/pam.d/sudo
#%PAM-1.0 auth sufficient pam_ldap.so auth required pam_unix.so try_first_pass auth required pam_nologin.so
また、/etc/openldap/ldap.conf に以下を追加してください:
/etc/openldap/ldap.conf
sudoers_base ou=sudoers,dc=AFOLA
SSSD によるオンライン・オフライン認証
SSSD はシステムデーモンです。主な機能は共通フレームワークを通してリモートのリソースを識別・認証できるようにすることで、システムのキャッシュやオフラインのサポートを提供します。PAM や NSS モジュールも含まれており、将来的には D-BUS ベースのインタフェースによって拡張ユーザー情報も含める予定です。拡張ユーザーデータだけでなくローカルユーザーを保存するデータベースとしても使えます。
sssd パッケージは公式リポジトリからインストールできます。
SSSD の設定
/etc/sssd/sssd.conf が存在しない場合は作成してください:
/etc/sssd/sssd.conf
[sssd] config_file_version = 2 services = nss, pam domains = LDAP [domain/LDAP] cache_credentials = true id_provider = ldap auth_provider = ldap ldap_uri = ldap://server1.example.org, ldap://server2.example.org ldap_search_base = dc=example,dc=org ldap_id_use_start_tls = true ldap_tls_reqcert = demand ldap_tls_cacert = /etc/openldap/certs/cacerts.pem chpass_provider = ldap ldap_chpass_uri = ldap://server1.example.org entry_cache_timeout = 600 ldap_network_timeout = 2 ldap_group_member = uniquemember
上記はあくまで例です。詳しくは man sssd.conf を見てください。
最後に chmod 600 /etc/sssd/sssd.conf でパーミッションを設定してください。そうしないと sssd は起動しません。
NSCD の設定
sssd のキャッシュに干渉するので /etc/nscd.conf で passwd と group エントリのキャッシュを無効化します。
NSS の設定
以下のように /etc/nsswitch.conf を編集してください:
/etc/nsswitch.conf
# Begin /etc/nsswitch.conf passwd: files sss group: files sss shadow: files sss sudoers: files sss publickey: files hosts: files dns myhostname networks: files protocols: files services: files ethers: files rpc: files netgroup: files # End /etc/nsswitch.conf
PAM の設定
まず /etc/pam.d/system-auth を以下のように編集:
/etc/pam.d/system-auth
#%PAM-1.0 auth sufficient pam_sss.so forward_pass auth required pam_unix.so try_first_pass nullok auth optional pam_permit.so auth required pam_env.so account [default=bad success=ok user_unknown=ignore authinfo_unavail=ignore] pam_sss.so account required pam_unix.so account optional pam_permit.so account required pam_time.so password sufficient pam_sss.so use_authtok password required pam_unix.so try_first_pass nullok sha512 shadow password optional pam_permit.so session required pam_mkhomedir.so skel=/etc/skel/ umask=0077 session required pam_limits.so session required pam_unix.so session optional pam_sss.so session optional pam_permit.so
sudo の設定
/etc/pam.d/sudo を以下のように編集:
/etc/pam.d/sudo
#%PAM-1.0 auth sufficient pam_sss.so auth required pam_unix.so try_first_pass auth required pam_nologin.so
パスワード管理
ユーザーが passwd を使って自分のパスワードを変えられるように /etc/pam.d/passwd を以下のように編集:
/etc/pam.d/passwd
#%PAM-1.0 password sufficient pam_sss.so #password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3 #password required pam_unix.so sha512 shadow use_authtok password required pam_unix.so sha512 shadow nullok
systemctl start sssd で sssd を起動して systemctl enable sssd で有効化してください。
これで getent passwd <username> や id <username> で ldap ユーザーの詳細情報が確認できるはずです。
ユーザーを使ってログインすると、ログイン情報がキャッシュされ、ldap サーバーがオフラインだったり利用できない状態であってもキャッシュされた情報を使ってログインすることができるようになります。