windowsServerで作ったActiveDirectoryにLinuxを加えてみる。
参照先Configuring sssd to authenticate with a Windows 2008 Domain Server
っと言ってもほぼsamba4/MemberServer/sssd-keytabと同じ内容なのだが、、、、
現状、こんな感じで、ここではLinuxクライアント(c3)をwindows2012R2ADドメインに参加させ、メンバーサーバにしてみる。
| 名前 | IP | FQDN | 備考 |
| ad | 192.168.0.33 | ad.chaperone.jp ad.cerius2.local | windows2012R2によるADサーバ |
| c3 | 192.168.0.25 | c3.chaperone.jp c3.cerius2.local | linuxマシン |
新規にメンバーサーバになるLinuxマシンを用意します。CentOS6
ホスト名は前述のとおりc3で、FQDNはc3.cerius2.localとします。その他の要素は下記のようにします。
[root@c3 ~]# cat /etc/hosts
127.0.0.1 localhost
192.168.0.25 c3.cerius2.local c3
192.168.0.33 ad.cerius2.local ad
[root@c3 ~]#
[root@c3 ~]# cat /etc/resolv.conf
search cerius2.local
nameserver 192.168.0.33
[root@c3 ~]#
[root@c3 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=c3.cerius2.local
GATEWAY=192.168.0.1
[root@c3 ~]#
[root@c3 ~]# ping ad.cerius2.local
PING ad.cerius2.local (192.168.0.33) 56(84) bytes of data.
64 bytes from ad.cerius2.local (192.168.0.33): icmp_seq=1 ttl=128 time=1.01 ms
64 bytes from ad.cerius2.local (192.168.0.33): icmp_seq=2 ttl=128 time=1.12 ms
^Cまず必要なパッケージをインストールします。
[root@c3 ~]# yum install sssd ntp samba4-common krb5-workstation
[root@c3 ~]# cat <<_EOF_> /etc/ntp.conf
> driftfile /var/lib/ntp/drift
> server 192.168.0.3
> _EOF_
[root@c3 ~]# cat /etc/ntp.conf
driftfile /var/lib/ntp/drift
server 192.168.0.3
[root@c3 ~]# echo 192.168.0.3 > /etc/ntp/step-tickers
[root@c3 ~]# cat /etc/ntp/step-tickers
192.168.0.3
[root@c3 ~]#
[root@c3 ~]# chkconfig ntpd on; chkconfig ntpdate on
[root@c3 ~]# reboot面倒なので一度再起動
/etc/krb5.confと/etc/samba/smb.confを下記のように修正します。
[root@c3 ~]# vi /etc/krb5.conf
[libdefaults]
default_realm = CERIUS2.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
CERIUS2.LOCAL = {
kdc = ad.cerius2.local
admin_server = ad.cerius2.local
}
[domain_realm]
.cerius2.local = CERIUS2.LOCAL
cerius2.local = CERIUS2.LOCAL
[root@c3 ~]#
[root@c3 ~]# vi /etc/samba/smb.conf
[global]
workgroup = CERIUS2
security = ADS
realm = CERIUS2.LOCAL
encrypt passwords = yes
password server = 192.168.0.33
log file = /var/log/samba/%m.log
kerberos method = secrets and keytabその後に、netコマンドを使ってLinuxマシンをwindowsADに参加させます。
そもそもsambaデーモンはインストールされていないが、sambaを稼働する必要はありません
/etc/samba/smb.confの設定はnetコマンド向きと思ってください
[root@c3 ~]# net ads join -U Administrator
Enter Administrator's password:
Using short domain name -- CERIUS2
Joined 'C3' to realm 'cerius2.local'
[root@c3 ~]#もしうまくいかない場合は、デーバックモードで試してみます。上記コマンドに-d 3とか入れれば見れます。
こちらでは当初うまくいかず、net ads join -U Administrator -S AD -d 3にて調べたら、Linuxマシンがadマシンの名前解決がうまくいかなかったのが原因だった。そのため、ADのcomputersには記載されたがdnsには登録されずいた。/etc/resolv.confを調整したら解決ができた。
っで、windowsADドメインに参加できて、同時に/etc/krb5.keytabにkeytabファイルが作られます。このkeytabファイルの中身はklistを使えば下記のように見える。
[root@c3 ~]# klist -e -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
2 host/c3.cerius2.local@CERIUS2.LOCAL (des-cbc-crc)
2 host/c3.cerius2.local@CERIUS2.LOCAL (des-cbc-md5)
2 host/c3.cerius2.local@CERIUS2.LOCAL (aes128-cts-hmac-sha1-96)
2 host/c3.cerius2.local@CERIUS2.LOCAL (aes256-cts-hmac-sha1-96)
2 host/c3.cerius2.local@CERIUS2.LOCAL (arcfour-hmac)
2 host/c3@CERIUS2.LOCAL (des-cbc-crc)
2 host/c3@CERIUS2.LOCAL (des-cbc-md5)
2 host/c3@CERIUS2.LOCAL (aes128-cts-hmac-sha1-96)
2 host/c3@CERIUS2.LOCAL (aes256-cts-hmac-sha1-96)
2 host/c3@CERIUS2.LOCAL (arcfour-hmac)
2 C3$@CERIUS2.LOCAL (des-cbc-crc)
2 C3$@CERIUS2.LOCAL (des-cbc-md5)
2 C3$@CERIUS2.LOCAL (aes128-cts-hmac-sha1-96)
2 C3$@CERIUS2.LOCAL (aes256-cts-hmac-sha1-96)
2 C3$@CERIUS2.LOCAL (arcfour-hmac)
[root@c3 ~]#もしkeytabに追加のサービスプリンシパルが必要なら下記のようにして加える。例はnfsのサービスプリンシパル。
[root@c3 ~]# net ads join createupn="nfs/c3.cerius2.local@CERIUS2.LOCAL" -U Administrator次に、netコマンドでwindowsADドメインことろーらから情報を拾ってみる。
[root@c3 ~]# net ads info
LDAP server: 192.168.0.33
LDAP server name: ad.cerius2.local
Realm: CERIUS2.LOCAL
Bind Path: dc=CERIUS2,dc=LOCAL
LDAP port: 389
Server time: 日, 13 4月 2014 15:30:40 JST
KDC server: 192.168.0.33
Server time offset: 0
[root@c3 ~]#
[root@c3 ~]# net ads group -U administrator
Enter administrator's password:
WinRMRemoteWMIUsers__
Administrators
Users
Guests
(中略)
DnsUpdateProxy
fate
[root@c3 ~]#
[root@c3 ~]# net ads user -U administrator
Enter administrator's password:
Administrator
Guest
krbtgt
illya
[root@c3 ~]#windowsADドメインコントローラで定義したグループとユーザが確認できた。
使用する予定のsssdのバージョンは
[root@c3 ~]# sssd --version
1.9.2
[root@c3 ~]#である。最新版ではないOS提供の物。っで、設定は
[root@c3 ~]# vi /etc/sssd/sssd.conf
[sssd]
services = nss, pam
config_file_version = 2
domains = cerius2.local
[nss]
[pam]
[domain/cerius2.local]
ad_hostname = ad.cerius2.local
ad_server = ad.cerius2.local
ad_domain = cerius2.local
ldap_schema = rfc2307bis
id_provider = ldap
access_provider = simple
enumerate = true
auth_provider = krb5
chpass_provider = krb5
ldap_sasl_mech = gssapi
ldap_sasl_authid = C3$@CERIUS2.LOCAL # /etc/krb5.keytabに従い大文字で
krb5_realm = CERIUS2.LOCAL
krb5_server = ad.cerius2.local
krb5_kpasswd = ad.cerius2.local
ldap_krb5_keytab = /etc/krb5.keytab
ldap_krb5_init_creds = true
ldap_referrals = false
ldap_uri = ldap://ad.cerius2.local
ldap_search_base = dc=cerius2,dc=local
dyndns_update=false
ldap_id_mapping=false
ldap_user_object_class = user
ldap_user_name = samAccountName
ldap_user_uid_number = uidNumber
ldap_user_gid_number = gidNumber
ldap_user_home_directory = unixHomeDirectory
ldap_user_shell = loginShell
ldap_group_object_class = group
ldap_group_name = cn
ldap_group_member = member
[root@c3 ~]#設定ファイルのパーミッションを変更して、authconfigで認証としてsssdを参照させ、起動させる
[root@c3 ~]# chmod 600 /etc/sssd/sssd.conf
[root@c3 ~]# env LANG=C authconfig --enablesssd --enablesssdauth --update
[root@c3 ~]# /etc/init.d/sssd start
[root@c3 ~]# chkconfig sssd onもし不具合があったら、まずsssd.confを修正後、sssdに取り込まれたキャッシュを排除してからsssdを再起動させます。
[root@c3 ~]# service sssd stop; rm -f /var/lib/sss/db/*; service sssd startぅーむ、失敗。
どうもsssdでは「(&(objectclass=user)(samAccountName=*)(uidNumber=*)(gidNumber=*))」に引っかかるエントリーをユーザとして認識している。具体的にはGSSAPI経由で
[root@c3 ~]# kinit administrator@CERIUS2.LOCAL
[root@c3 ~]# ldapsearch -H ldap://ad.cerius2.local/ -Y GSSAPI -N -b 'dc=CERIUS2,dc=LOCAL' \
'(&(objectclass=user)(samAccountName=*)(uidNumber=*)(gidNumber=*))'
[root@c3 ~]#として引っかかるのが大事。groupではそれは
[root@c3 ~]# ldapsearch -H ldap://ad.cerius2.local/ -Y GSSAPI -N -b 'dc=CERIUS2,dc=LOCAL' \
'(&(objectclass=group)(cn=*)(&(gidNumber=*)(!(gidNumber=0))))'となる。
LdapAdminで調整できるから別にいいのだが、、、下記のように手動で変更を再度加えた。

すると、
[root@c3 ~]# getent passwd|grep illya
illya:*:2001:3001:Illyasviel von. Einzbern:/home/cerius2/illya:/bin/bash
[root@c3 ~]#こんな感じでエントリーが見えた。
実際にログインしてみる。ホームディレクトリは先にどこかのNFSサーバをマウントして構わない。ただ、、autofsを前提にするとどうやって作ったらいいか迷う。。なので今は静的なNFSマウントか、メンバーサーバそのものにホームディレクトリがあるとする。
初めは何もホームディレクトリがないので、
[root@c3 ~]# LANG=C authconfig --enablemkhomedir --update
sssd を停止中: [ OK ]
[root@c3 ~]# service sssd stop; rm -f /var/lib/sss/db/*; service sssd start
sssd を起動中: [ OK ]
[root@c3 ~]#なぜかauthconfigに変更を加えるとsssdが停止してしまう。。。
っでログイン。
[foo@c ~]$ ssh -l illya c3
illya@c3's password:
Creating directory '/home/cerius2/illya'.
[illya@c3 ~]$
[illya@c3 ~]$ ls -la
合計 20
drwxr-xr-x 2 illya fate 4096 4月 13 18:52 2014 .
drwxr-xr-x 3 root root 4096 4月 13 18:52 2014 ..
-rw-r--r-- 1 illya fate 18 4月 13 18:52 2014 .bash_logout
-rw-r--r-- 1 illya fate 176 4月 13 18:52 2014 .bash_profile
-rw-r--r-- 1 illya fate 124 4月 13 18:52 2014 .bashrc
[illya@c3 ~]$とログインに成功。パスワードはADで定義したものがそのまま使えた。