GeekFactory

int128.hatenablog.com

LinuxでActive Directory認証 (with sssd)

Windowsの世界にはActive Directoryという優れた仕組みがありますが、Linuxでもその恩恵を受けることが出来ます。LinuxサーバがActive Directoryと連携することで、以下のようなメリットがあります。

  • 管理者はユーザ情報を一元管理できるので、手間が減る。サーバごとにユーザを作る必要がない。
  • 利用者はいつもと同じIDやパスワードでLinuxサーバにログインできる。サーバごとにパスワードを設定する必要がない。

本稿では、LinuxサーバでActive Directory認証を利用する手順を説明します。意外と簡単でした。

前提条件

  • CentOS 6.4 x86_64 で確認しています。
  • リゾルバが正しく設定されていること。
  • Active DirectoryDNSサーバが正しく設定されており、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やgidActive Directoryユーザの「UNIX属性」で設定した値です。グループをうまく使えばsudo等で権限を適切に管理しやすくなります。