地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Linux】Linuxをドメインへ参加させる

やりたいこと

LinuxActive 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