参考1:http://muramasa64.fprog.org/diary/?date=20140909
参考2:https://fedorahosted.org/sssd/
参考3:man 5 sssd.conf, man 5 sssd-ldap, man 5 sssd-ad
設定情報
ドメイン : saka.example.com
ドメインコントローラ(Windows Server 2012 R2) : dc1.saka.example.com, 10.211.55.13
クライアント(CentOS6.6) : cl1.saka.example.com, 10.211.55.9
これから設定するファイル(手動で編集するもののみ)
- /etc/resolv.conf
- /etc/hosts
- /etc/krb5.conf
- /etc/samba/smb.conf
- /etc/sssd/sssd.conf
sssdについては, 1.9.2 or Above の設定なので, 注意.
設定準備
/etc/resolv.confの設定
基本的にはADとDNSはセットになっていて, ADと一緒に動いているDNSにはSRVレコードが自動で登録されている.
これがないと, kerberosやldapの検索ができないので, Linux側の/etc/resolv.confにドメコンをDNSとして登録しておく.
nameserver 10.211.55.13
/etc/hostsの編集
マシンをADに登録する際, 自身の名前解決ができる必要があるので, /etc/hostsに登録しておく.
hostname --fqdn
ができるようにしておく.
必要パッケージのインストール
パッケージ名 | 内容 |
---|---|
sssd | sssdのベースパッケージ |
sssd-ad | sssdとadをよしなに繋いでくれるパッケージ |
krb5-workstation | krb5のクライアント |
samba-client | マシンをADに登録するときにnetコマンドを使う |
oddjob-mkhomedir | ホームディレクトリを自動で作成するためのモジュール |
# yum install sssd sssd-ad krb5-workstation samba-client oddjob-mkhomedir
===================================================================================================================================================================================================================
Package Arch Version Repository Size
===================================================================================================================================================================================================================
Updating:
krb5-workstation x86_64 1.10.3-42.el6 base 811 k
samba-client x86_64 3.6.23-20.el6 base 11 M
sssd x86_64 1.12.4-47.el6 base 100 k
sssd-ad x86_64 1.12.4-47.el6 base 202 k
Updating for dependencies:
krb5-libs x86_64 1.10.3-42.el6 base 768 k
libipa_hbac x86_64 1.12.4-47.el6 base 104 k
libsss_idmap x86_64 1.12.4-47.el6 base 109 k
python-sssdconfig noarch 1.12.4-47.el6 base 132 k
samba-common x86_64 3.6.23-20.el6 base 10 M
samba-winbind x86_64 3.6.23-20.el6 base 2.2 M
samba-winbind-clients x86_64 3.6.23-20.el6 base 2.0 M
sssd-client x86_64 1.12.4-47.el6 base 151 k
sssd-common x86_64 1.12.4-47.el6 base 976 k
sssd-common-pac x86_64 1.12.4-47.el6 base 134 k
sssd-ipa x86_64 1.12.4-47.el6 base 237 k
sssd-krb5 x86_64 1.12.4-47.el6 base 133 k
sssd-krb5-common x86_64 1.12.4-47.el6 base 190 k
sssd-ldap x86_64 1.12.4-47.el6 base 215 k
sssd-proxy x86_64 1.12.4-47.el6 base 129 k
Transaction Summary
===================================================================================================================================================================================================================
Upgrade 19 Package(s)
Total download size: 29 M
Is this ok [y/N]:
authconfigでバックアップ作成
念のため作成する
# authconfig --savebackup=mybackup
各種設定
Kerberosの設定
DNSが設定されていることが前提.
# vim /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 = SAKA.EXAMPLE.COM
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
[domain_realm]
DNSが設定されていない場合. realmsなどの設定が必要.
# vim /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 = SAKA.EXAMPLE.COM
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
SAKA.EXAMPLE.COM= {
kdc = dc1.saka.example.com
admin_server = dc1.saka.example.com
}
[domain_realm]
saka.example.com = SAKA.EXAMPLE.COM
.saka.example.com = SAKA.EXAMPLE.COM
sambaの設定
マシンをADに登録するときに使う.
# vim /etc/samba/smb.conf
[global]
workgroup = SAKA
client signing = yes
client use spnego = yes
kerberos method = secrets and keytab
log file = /var/log/samba/%m.log
realm = SAKA.EXAMPLE.COM
security = ads
sssdの設定
sssdもkrb5と同じように, DNS前提で設定できるが, 冗長構成の時にDC接続が不安定(というか, 落ちているDCに何度も接続にいっちゃう)ので, 直接記載する.
いろいろな項目は、man 5 sssd.conf, man 5 sssd-adを見て下さい. ここにみんな書いてあります.
サイトはsssdがDNSから見てくれる.ad-site = ...
で明示的にサイトを指定することも可能.
# vim /etc/sssd/sssd.conf
[sssd]
services = nss, pam
config_file_version = 2
domains = saka.example.com
[domain/saka.example.com]
# デバッグレベルの設定
debug_level = 5
# adなので, id_providerはad
id_provider = ad
# adのホスト名を記載
# DNSをADのDNSにしておくこと
# ここを入れなくてもDNSで解決できれば基本的にはOK
ad_server = dc1.saka.example.com
# 冗長構成のとき
# ad_server = dc1.saka.example.com, dc2.saka.example.com
# sssdのキャッシュが効くようにする
# ADが落ちていてもログイン可能になる
cache_credentials = true
# idを自動でマッピングしないようにする
# 自動でマッピングしない場合、ADのエントリーのuid, gidが使用される
ldap_id_mapping = False
# adのmemberOf属性でアクセス制限をかける
# LDAPクエリで設定可能
access_provider = ad
ad_access_filter = (&(memberOf=cn=admin,ou=groups,dc=saka,dc=example,dc=com)(unixHomeDirectory=*))
[nss]
[pam]
ファイルのパーミッション設定
# chown root:root /etc/sssd/sssd.conf
# chmod 0600 /etc/sssd/sssd.conf
これで認証する側の設定は完了です.
ADにホストを登録する
kerberosチケットの発行
ADのAdministratorのパスワードを入力する. 成功すると, 何も言われない.
# kinit Administrator
Password for Administrator@SAKA.EXAMPLE.COM:
ホストの登録
hostname --fqdn
ができるなら, DNSの自動更新も成功する.
# hostname --fqdn
cl1.saka.example.com
# net ads join -U administrator
Enter administrator's password:
Using short domain name -- SAKA
Joined 'CL1' to dns domain 'saka.example.com'
sssdの有効化
authconfigで行う
# authconfig --enablesssd --enablesssdauth --enablelocauthorize --enablemkhomedir --update
これでsssdが起動できたらOK.
起動できなかったら,
# service sssd start
エラーになる場合は, /var/log/sssd/配下のログ もしくは /var/log/messagesを確認する.
認証テスト
ADにUNIX属性を持つsakamotoというユーザを作成済み.
sakamotoユーザは, メイングループがsaka, サブグループがadmin.
adminはsudo用. 管理者だけこのサブグループが付く.
# id sakamoto
uid=10000(sakamoto) gid=10000(saka) groups=10000(saka),10001(admin)
sudoを使えるようにする
sudoのパッケージにAD用のスキーマがあるので, それを追加しても良いが, 各属性を目grepで検索orADなのにLDIFファイルを作成して読込, をしなければならず, 結構きつい.
ということで, sudoはsudersで行う.
それでもADでsudo管理したい場合は, ここが参考になる.
【参考】ADにsudoのスキーマを追加する:http://jhrozek.livejournal.com/3860.html
linux側のAD連携sudoの設定は, ldapの場合と同じ.
# visudo
# 下記を追記
%admin ALL=(ALL) ALL
AD側で「初回パスワード変更」の設定にしていたので, パスワード変更が求められた(ユーザにはsu -
でログイン).
[sakamoto@cl1 ~]$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for sakamoto:
Password expired. Change your password now.
sudo: Account or password is expired, reset your password and try again
Current Password:
New password:
Retype new password:
Matching Defaults entries for sakamoto on this host:
!visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User sakamoto may run the following commands on this host:
(ALL) ALL
パスワードも認証できたし, sudoersとの連携も確認できました.
以外と普通にユーザ認証ができます.
その他
公開鍵について
opensshはopenldap用のスキーマしか準備していないので, 自作したスキーマで拡張するしかないです.
ADを使うところで自作スキーマは使わない気がします.
ただ, $HOME/.ssh/authorized_keysでの認証は可能です.
RHEL7系から
今回はsssd-adを利用したけど, RHEL7からはrealmdというパッケージがあります.
こっちのほうが設定が簡単みたいです.