ADのアカウントでLinuxサーバにログインする
■趣旨
Active Directoryのアカウントで、Linuxサーバへログインする。
ただし以下の設定は既存のまま変更しない。
- ホスト名
- DNS
また以下の要件を満たす事。
- 各サーバでアカウントのUID/GIDを統一する。
->ADアカウントのRIDをキーとして使用する
- 特定グループに所属するアカウントのみログインを許可する
■検証環境
ドメイン名:EXAMPLE.LOCAL
- ADサーバ
OS: Windows Server 2008 Standard (x86_64)
ホスト名: dc.example.local
IPアドレス: 10.0.0.1
- Linuxサーバ
OS: CentOS 5.6 (x86)
ホスト名: sysa-web01.localdomain
IPアドレス: 10.0.0.2
■設定手順
1.必要パッケージのインストール
- samba-common
- samba-client
# yum install samba-common samba-client
2.winbind認証設定
# authconfig \ --enablewinbind \ --enablewinbindauth \ --smbsecurity=ads \ --smbworkgroup=EXAMPLE \ --smbrealm=EXAMPLE.LOCAL \ --smbservers=dc.example.local \ # ※1 --enablewinbindusedefaultdomain \ # ※2 --winbindtemplatehomedir=/tmp \ # ※3 --winbindtemplateshell=/bin/bash \ --enablelocauthorize \ --update ※1 カンマ区切りで複数指定可。hostsへ対応する名前を記述する。 ※2 ドメイン名自動補完設定。[EXAMPLE\testuser001]のような入力が必要無くなる。 ※3 ログイン時に自動的にホームディレクトリを作りたいならこのあたりを参照
3.samba設定
# cp -p /etc/samba/smb.conf /etc/samba/smb.conf.org # vi /etc/samba/smb.conf --- #idmap uid = 16777216-33554431 #idmap gid = 16777216-33554431 idmap domains = EXAMPLE idmap config EXAMPLE: default = yes idmap config EXAMPLE: backend = rid idmap config EXAMPLE: range = 10000-19999 idmap alloc config: range = 10000-1999 --- ※デフォルト設定をコメントアウトし、上記行を追記(77行目付近)
上記は各LinuxサーバでUID/GIDの整合性を取るための設定
通常は各サーバのwinbindが早いもの順でUID/GIDを割り当てるため、同一ユーザでもサーバ毎にUID/GIDが異なる。
これをWindowsアカウントのSIDの末尾4ケタ(RIDと呼ばれる部分)+指定レンジ(10000-19999)を足し合わせたものをUID/GIDとする設定を行う。
こうする事で各サーバ間でUID/GID割り当てルールを統一される。
■参考
RIDの確認方法
# id testuser001 uid=11110(testuser001) gid=10513(domain users) 所属グループ=10513(domain users),11113(operator) ※この場合、11100がwinbindの割り当てたUID
# wbinfo -U 11110 S-1-5-21-2966872847-1102543892-2619680819-1110 ※アカウントのSIDを取得するコマンド。最後の4ケタ(1110)がRID ※上記割り当てルールでは、これに10000を足し合わせた11110がこのユーザーのUIDとなる。
# wbinfo -G 11113 S-1-5-21-2966872847-1102543892-2619680819-1113 ※グループのSIDを取得するコマンド。最後の4ケタ(1110)がRID ※当該グループ(operator)も同様のルールで割り当てられている事が確認できる。
4.hostsへドメイン名を追加。
既存ホスト名を変更する必要はなし。
# cp -p /etc/hosts /etc/hosts.20120112 # vi /etc/hosts --- 10.0.0.1 DC.EXAMPLE.LOCAL DC # ※1 10.0.0.2 SYSA-WEB01.EXAMPLE.LOCAL SYSA-WEB01 # ※2 --- ※1 AD名前解決用。複数ある場合はその数だけ記載する。 ※2 ADでの、このホストのFQDN
5.ドメイン参加
# net join -U Administrator administrator's password: Using short domain name -- EXAMPLE DNS update failed! # ※1 Joined 'SYSA-WEB01' to realm 'EXAMPLE.LOCAL' ※1 ADをDNSとして設定していない為に出るエラーだが認証させるだけなら問題ない?
# /etc/init.d/winbind restart
ADのユーザー/コンピューター管理ツールにて当該ホスト名のComputerが追加されたことを確認する
6.特定グループユーザのみアクセス許可設定
現状では全ドメインユーザーがアクセスできるため、特定グループのみ
ログイン可能とする。(本ケースではoperatorグループのSIDを追記)
# cp -p /etc/pam.d/system-auth /tmp # vi /etc/pam.d/system-auth # diff -wb /tmp/system-auth /etc/pam.d/system-auth 7c7 < auth sufficient pam_winbind.so use_first_pass --- > auth sufficient pam_winbind.so use_first_pass require_membership_of=S-1-5-21-2966872847-1102543892-2619680819-1113 ※許可するグループとして、SIDにて記述することで「半角スペースを含むグループ名」でも指定できる。 (一応、今回のグループ名ならそのまま「operator」と記述しても可)
7.連携テスト
・Kerberos認証
# kinit testuser001; echo $? ※正常終了する事
・winbind連携
# id testuser001 ※ユーザ情報が表示されること
・ログイン認証
# ssh localhost -l testuser001 ※正常にログイン出来ること。ユーザはあらかじめAD上に作成しておく。
■その他
- winbindにてSID / UID,GID間の紐付けがおかしくなった場合の対処方法
smb.confにてidmapのUID/GID発番Rangeを変更した場合など、以前割り当てられたUID/GIDをキャッシュをクリアしたいなあという時に。
以下にキャッシュが存在するため、ディレクトリごと削除
# rm -rf /var/cache/samba # /etc/init.d/winbind restart
- SSHなどのログイン履歴はイベントログから拾えるようになる。
以上