LoginSignup
24
42

More than 5 years have passed since last update.

LinuxをActiveDirectoryドメインに参加させる

Posted at

やりたいこと

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
/etc/resolv.conf
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

/etc/nsswitch.conf(修正箇所のみ)
passwd: files winbind ←winbindを追加
shadow: files winbind ←winbindを追加 
group: files winbind  ←winbindを追加

・/etc/krb5.conf の修正
vi /etc/krb5.conf

/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

/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のバージョンによって記述が異なるため注意が必要です。

/etc/samba/smb.conf
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

/etc/samba/smb.conf
winbind offline logon = yes
winbind cache time = キャッシュを保持したい時間(秒)

ドメインコントローラダウン時(認証先切り替わり)

/etc/krb5.confのkdcに記述したサーバに接続が変わります。
変更になるのはadmin_server指定したサーバがダウンした後の初回ドメイン接続時です。
net ads infoで確認ができます。

ドメインの離脱不法

以下のコマンドでドメインから離脱が可能です。
net ads leave -U administrator

24
42
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
42