LinuxでActive Directory認証 (with sssd)
Windowsの世界にはActive Directoryという優れた仕組みがありますが、Linuxでもその恩恵を受けることが出来ます。LinuxサーバがActive Directoryと連携することで、以下のようなメリットがあります。
- 管理者はユーザ情報を一元管理できるので、手間が減る。サーバごとにユーザを作る必要がない。
- 利用者はいつもと同じIDやパスワードでLinuxサーバにログインできる。サーバごとにパスワードを設定する必要がない。
本稿では、LinuxサーバでActive Directory認証を利用する手順を説明します。意外と簡単でした。
前提条件
- CentOS 6.4 x86_64 で確認しています。
- リゾルバが正しく設定されていること。
- Active DirectoryとDNSサーバが正しく設定されており、Windowsクライアントがドメインに参加できていること。
- Active Directoryに「UNIX用ID管理」が追加されていること。
- ユーザの「UNIX属性」が設定されていること。
Active Directoryドメインに参加する
samba-clientパッケージが必要です。
/etc/samba/smb.conf
[global] workgroup = example client signing = yes client use spnego = yes kerberos method = secrets and keytab log file = /var/log/samba/%m.log realm = example.local security = ads
/etc/krb5.conf
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = example.local dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true
net adsコマンドでドメインに参加します。
net ads join -U Administrator net ads status
もしエラーが出た場合はリゾルバが正しく設定されているか確認しましょう。
sssdを設定する
sssdパッケージが必要です。
/etc/sssd/sssd.conf
[sssd] config_file_version = 2 domains = example.local services = nss, pam debug_level = 0 [nss] [pam] [domain/example.local] ldap_referrals = false cache_credentials = true enumerate = false id_provider = ldap auth_provider = krb5 chpass_provider = krb5 access_provider = ldap ldap_sasl_mech = GSSAPI ldap_schema = rfc2307bis ldap_user_search_base = ou=HogeOU,dc=example,dc=local ldap_user_object_class = user ldap_user_home_directory = unixHomeDirectory ldap_user_principal = userPrincipalName ldap_group_search_base = ou=HogeOU,dc=example,dc=local ldap_group_object_class = group ldap_access_order = expire ldap_account_expire_policy = ad ldap_force_upper_case_realm = true krb5_realm = EXAMPLE.LOCAL krb5_canonicalize = false
ldap_user_search_baseやldap_group_search_baseには検索の起点となるDNを設定します。例えば、example.localドメインの直下にHogeOUを配置し、OU内でユーザやグループを管理している場合は上記の設定になります。
sssdサービスを開始します。ログにエラーが出ていないか確認しましょう。
service sssd start less /var/log/messages
"Cannot find KDC for requested realm" というメッセージが出ている場合は krb5_realm の値を確認しましょう。必ず大文字で書く必要があります。
認証の設定を変更します。
authconfig --enablesssd --enablesssdauth --enablemkhomedir --update id hoge
ユーザのuidやgidが正しく返ってくればOKです。ここでのuidやgidはActive Directoryユーザの「UNIX属性」で設定した値です。グループをうまく使えばsudo等で権限を適切に管理しやすくなります。