やりたいこと
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