#やりたいこと
LinuxへActive Directoryのアカウントでログインできるようにしたい。
統合認証とかいうやつです。
#システム概要
・ドメインコントローラ
-OS :Windows Server 2012 R2 Standard
-フォレストの機能レベル :Windows Server 2012 R2
-ドメインの機能レベル :Windows Server 2012 R2
・メンバサーバ(Linux)
-OS :RHEL6
#方式について
色々な方式があります。
色々調べたところ、SSSDというものを使う方式がRedHat的におすすめのようです。
今回は古い手法ですが、samba+winbindでのLinuxドメイン参加となります。
#前提条件
##ドメイン参加時の注意点
ホスト名が16文字以上だとドメイン参加時にエラーとなります。
ホスト名は15文字までにする必要があります。
##本手順における登場人物整理
ドメイン名:exsample.com
ドメインコントローラ1:dc1(192.168.1.1)
ドメインコントローラ2:dc2(192.168.1.2)
参加Linuxサーバ名:linux1(192.168.100.1)
##名前解決について
ドメイン名・ドメインコントローラ名・字ホスト名が名前解決ができることが前提条件となります。
必要に応じてDNSへレコード登録を実施してください。
また、/etc/resolv.confの設定を行ってください。
nslookup exsample.com
nslookup dc1.exsample.com
nslookup dc2.exsample.com
nslookup linux1
nslookup linux1.exsample.com
nameserver 192.168.1.1
nameserver 192.168.1.2
search exsample.com
#インストール手順
##パッケージの追加
・パッケージの事前確認
rpm -qa samba-winbind krb5-workstation samba-client oddjob-mkhomedir
・yumの確認
yum list samba-winbind krb5-workstation samba-client oddjob-mkhomedir
・必要パッケージのインストール
yum -y install samba-winbind krb5-workstation samba-client oddjob-mkhomedir
以下のようにインストールされます。
Installed:
krb5-workstation.x86_64 0:1.10.3-15.el6_5.1
oddjob-mkhomedir.x86_64 0:0.30-5.el6
samba-client.x86_64 0:3.6.9-169.el6_5
samba-winbind.x86_64 0:3.6.9-169.el6_5
Dependency Installed:
dbus.x86_64 1:1.2.24-7.el6_3
libtalloc.x86_64 0:2.0.7-2.el6
libtdb.x86_64 0:1.2.10-1.el6
libtevent.x86_64 0:0.9.18-3.el6
oddjob.x86_64 0:0.30-5.el6
samba-common.x86_64 0:3.6.9-169.el6_5
samba-winbind-clients.x86_64 0:3.6.9-169.el6_5
Complete!
・パッケージがインストールされたことの確認
rpm -qa samba-winbind krb5-workstation samba-client oddjob-mkhomedir
・認証方法にwinbindを追加します。
vi /etc/nsswitch.conf
passwd: files winbind ←winbindを追加
shadow: files winbind ←winbindを追加
group: files winbind ←winbindを追加
・/etc/krb5.conf の修正
vi /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 = EXSAMPLE.COM
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
EXSAMPLE.COM = {
kdc = dc1.exsample.com ←認証を行うドメインコントローラ
kdc = dc2.exsample.com ←認証を行うドメインコントローラ
admin_server = dc2.exsample.com ←デフォルトの認証先
}
[domain_realm]
.exsample.com = EXSAMPLE.COM
exsample.com = EXSAMPLE.COM
・ドメイン認証を実施
kinit administrator@EXSAMPLE.COM
認証状況の確認
klist
・sambaの設定
vi /etc/samba/smb.conf
# 74行目
workgroup = EXSAMPLE
# 101行目 コメントアウトします
# security = user
# passdb backend = tdbsam
# 123行目 Domain Members Options 以下の定義を追加
security = ads
realm = EXSAMPLE.COM
# winbind の設定
winbind use default domain = true
winbind offline logon = yes ←オフラインログインを有効
winbind cache time = 300 ←オフラインログインに使うキャッシュの有効期限(秒)
# UIDとGIDのマッピング
idmap config EXSAMPLE:backend = rid ←ADのRIDからUID/GID作成
idmap config EXSAMPLE:range = 10000-15000
idmap uid = 10000-15000
idmap gid = 10000-15000
# ADユーザのhomeディレクトリを自動作成
template homedir = /home/%U
template shell = /bin/bash
# その他設定
client signing =yes
client use spnego=yes
kerberos method =secrets and keytab
password server = *
・ドメイン参加
net ads join -U administrator
参加状況の確認
net ads info
net ads status
ドメイン接続確認
net ads testjoin
##認証周りの設定
・winbindに必要になるサービスの起動設定
chkconfig --list messagebus
onであること
service messagebus restart
・ /etc/pam.d/system-authの設定
authconfig --enablewinbind --enablewinbindauth --enablemkhomedir --update
・winbind起動設定
chkconfig --list winbind
onであること
service winbind restart
#動作確認
・ドメイン接続テスト
net ads testjoin
・ADから情報を取得
wbinfo -u
wbinfo -g
id administrator
・ADとwinbindの接続状況確認
wbinfo -t
・簡易認証テスト
wbinfo -a administrator%パスワード
・外部からのログインテスト
テラタームなどでドメインユーザ/パスワードでログインできるかを確認
#その他メモ
##認証について
/etc/nsswitch.confの設定どおりローカル認証が優先になります。
同一のユーザ名やグループ名があった場合は、ローカルのUID・GIDが優先されます。
ローカルユーザを消すことでAD側のUID・GIDが反映されます。
それまではセカンダリのUID・GIDになるようです。
##UID、GIDについて
通常は各サーバのwinbindがUID/GIDの割り振りを決めるため、サーバ毎にUID/GIDが異なってしまう。
[対策]
sambaの設定ファイル(/etc/samba/smb.conf)に以下を追記することで、WindowsアカウントのSIDの末尾4ケタ(RIDと呼ばれる部分)+指定レンジ(1000-19999)を足したものをUID/GIDとすることができる。
sambaのバージョンによって記述が異なるため注意が必要です。
idmap config ドメイン名:backend = rid
idmap config ドメイン名:range = 10000-12000
idmap uid = 10000-12000
idmap gid = 10000-12000
[UID/GIDの紐付の保管場所]
通常のユーザ管理系ファイル(/etc/passwd、/etc/group)には情報が保管されません。
/var/lib/samba配下に「.tdb」というファイルができ、その中に保存されます。
挙動がおかしい場合や、設定を変更したい場合は一度上記のファイルを削除します。
service winbind stop
rm -f /var/lib/samba/*.tdb
service winbind start
##ドメインコントローラダウン時(キャッシュログオン)
winbindのキャッシュを有効にすることで、ドメインコントローラダウン時にもログインが可能となります。
「winbind cache time」のデフォルトは300秒(5分)です。
最大で2147483647秒の設定が可能です。
キャッシュは以下に保持されます。再起動するとキャッシュがクリアされます。
/var/lib/samba/winbindd_cashe.tdb
winbind offline logon = yes
winbind cache time = キャッシュを保持したい時間(秒)
##ドメインコントローラダウン時(認証先切り替わり)
/etc/krb5.confのkdcに記述したサーバに接続が変わります。
変更になるのはadmin_server指定したサーバがダウンした後の初回ドメイン接続時です。
net ads infoで確認ができます。
##ドメインの離脱不法
以下のコマンドでドメインから離脱が可能です。
net ads leave -U administrator