Windows2008SP2のDCでDebian Squeeのアカウントを管理する

※実際には12/18のネタです。

■DC(Windows2008SP2/Active Directory)でDebian Squeezeのアカウントを管理する
 ※「dcpromo」で新規ドメインを作成、Exchangeが動作しているドメイン環境
 ※「ssh」、「su」による単純ログインのみ。

■UNIX関連の役割を確認する
 
> servermanagercmd -query | find "NIS"
        [X] NIS サーバー  [ADDS-NIS]
            [X] NIS サーバー ツール  [RSAT-SNIS]
> servermanagercmd -query | find "UNIX"
    [X] UNIX 用 ID 管理  [ADDS-Identity-Mgmt]
[ ] UNIX ベース アプリケーション用サブシステム  [Subsystem-UNIX-Apps]

■SUA+NISサーバ(Win)、NICクライアント(Debian)の構成になる

 参考URL:Active DirectoryとLinuxの認証を統合しよう
 http://gihyo.jp/admin/serial/01/ad-linux/0002

■SUAのインストール

> servermanagercmd -i Subsystem-UNIX-Apps

■NISとADのパスワード同期を有効にします
 ※ここからはGUIで。

 「管理ツール」⇒「UNIX用 Microsoft ID管理」の
 左ペインの「パスワード同期」を右クリック、プロパティを表示

 「パスワード同期のプロパティ」の「全般」タブ、
 「Windows から NIS(ActiveDirectory) へのパスワード同期」を
 「有効にする」をチェックする
 ⇒既に入っていたので何もしない。
 「構成」タブの「詳細なログを有効にする(E)」にもチェックを入れておく

■AD/NIS連携の設定を確認する(初期パスワードの場合)

 ★Windowsから
> ypcat -d exchange passwd
Administrator:ABCD!efgh12345$67890:10000:10000::/home/Administrator:/bin/sh

 ★debianから
$ ypcat -d exchange passwd
-bash: ypcat: コマンドが見つかりません
$ sudo apt-get install -y nis
$ ypcat -d exchange passwd
Administrator:ABCD!efgh12345$67890:10000:10000::/home/Administrator:/bin/sh

■mapファイルを確認する

> ypmatch -d exchange -x
 Use passwd    for map 'passwd.byname'
 Use group     for map 'group.byname'
 Use networks  for map 'networks.byaddr'
 Use hosts     for map 'hosts.byname'
 Use protocols for map 'protocols.bynumber'
 Use services  for map 'services.byname'
 Use aliases   for map 'mail.aliases'
 Use ethers    for map 'ethers.byname'

$ ypmatch -x
Use "ethers"    for map "ethers.byname"
Use "aliases"   for map "mail.aliases"
Use "services"  for map "services.byname"
Use "protocols" for map "protocols.bynumber"
Use "hosts"     for map "hosts.byname"
Use "networks"  for map "networks.byaddr"
Use "group"     for map "group.byname"
Use "passwd"    for map "passwd.byname"

■NISドメインを確認する

> nbtstat -a vmpdc | find /i "exchange"
    EXCHANGE       <00>  グループ    登録済
    EXCHANGE       <1C>  グループ    登録済
    EXCHANGE       <1B>  一意        登録済

 ★本来はnmblookupが対応するが、この時点ではsambaは導入しない。

$ ypwhich
192.168.164.154
$ sudo vim /etc/hosts
$ ypwhich
vmpdc.exchange

■DNSを確認する

> nslookup vmpdc.exchange.ms
サーバー:  localhost
Address:  127.0.0.1

名前:    vmpdc.exchange.ms
Address:  192.168.164.154

> nslookup vmsqueeze.exchange.ms
サーバー:  localhost
Address:  127.0.0.1

名前:    vmsqueeze.exchange.ms
Address:  192.168.164.117

$ nslookup vmpdc.exchange.ms
Server:         192.168.164.2
Address:        192.168.164.2#53

** server can't find vmpdc.exchange.ms: NXDOMAIN
$ sudo vim /etc/resolv.conf
$ nslookup vmpdc.exchange.ms
Server:         192.168.164.154
Address:        192.168.164.154#53

Name:   vmpdc.exchange.ms
Address: 192.168.164.154
$ nslookup vmsqueeze.exchange.ms
Server:         192.168.164.154
Address:        192.168.164.154#53

Name:   vmsqueeze.exchange.ms
Address: 192.168.164.117

■NISサーバからのユーザ参照を最終行に追加する(Debianのみ)

$ getent passwd | grep Administrator
$ sudo vim /etc/passwd
$ sudo tail -1 /etc/passwd
+::::::

$ getent passwd | grep Administrator
Administrator:ABCD!efgh12345$67890:10000:10000::/home/Administrator:/bin/sh


■NISサーバからのグループ参照を最終行に追加する

>ypcat -d exchange group

「Active Directory ユーザとコンピュータ」から、「Domain Users」を選択、
「Domain Usersのプロパティ」の「UNIX属性」タブから、
「NISドメイン(N)」にexchangeを、
「GID」に10000を設定

>ypcat -d exchange group
Domain Users::10000:

$ getent group | grep 10000
$ sudo vim /etc/group
$ sudo tail -1 /etc/group
+:::
$ getent group | grep Domain
Domain Users::10000:

■以下のマップは空。

>ypcat -d exchange networks
$ ypcat -d exchange networks

>ypcat -d exchange hosts
$ ypcat -d exchange hosts

>ypcat -d exchange protocols
$ ypcat -d exchange protocols

> ypcat -d exchange services
$ ypcat -d exchange services

> ypcat -d exchange aliases
$ ypcat -d exchange aliases

> ypcat -d exchange ethers
$ ypcat -d exchange ethers

■再度NIS参照を確認

$ cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns nis
networks:       files nis

protocols:      db files nis
services:       db files nis
ethers:         db files nis
rpc:            db files

netgroup:       nis

■サポートされているマップファイルを確認(Windows)
 ※「rpc」を含む、他のマップファイルもあります。

> nisadmin
localhost の設定


プッシュ間隔         :     1 ログのモード         :    標準

NIS ドメイン
AD の NIS ドメイン    マスタ サーバー       UNIX の NIS ドメイン
----------------      -------------         ----------------
    exchange               VMPDC                  exchange

サポートされているマップ
標準のマップ
----------------
    bootparams
    ethers
    group
    hosts
    aliases
    netgroup
    netid
    netmasks
    networks
    passwd
    shadow
    protocols
    publickey
    rpc
    services
    ypservers

非標準マップ          フィールド区切り      キー フィールド番号
-----------------     ---------------       ----------------

■yptestでテスト出来る項目を再確認(Debian)

$ /usr/sbin/yptest -u Administrator | grep Test
Test 1: domainname
Test 2: ypbind
Test 3: yp_match
Test 4: yp_first
Test 5: yp_next
Test 6: yp_master
Test 7: yp_order
Test 8: yp_maplist
Test 9: yp_all

$ ypdomainname
exchange

■ypbindを確認

$ sudo /usr/sbin/ypbind
No NIS server and no -broadcast option specified.
Add a NIS server to the /etc/yp.conf configuration file,
or start ypbind with the -broadcast option.
$ sudo vim /etc/yp.conf
$ sudo tail -1 /etc/yp.conf
ypserver vmpdc
$ sudo /usr/sbin/ypbind

■パスワードの変更が出来るか確認
 ※UNIXからのパスワード同期は許可していないので、
  「not been changed」となる

$  sudo yppasswd Administrator
Changing NIS account information for Administrator on VMPDC.
Please enter root password:
Changing NIS password for Administrator on VMPDC.
Please enter new password:
Please retype new password:
Error while changing the NIS password.
The NIS password has not been changed on VMPDC.

■通常のUNIXユーザとして、「id」コマンドを確認

$ id Administrator
uid=10000(Administrator) gid=10000(Domain Users) 所属グループ=10000(Domain Users)

$ sudo mkdir /home/Administrator
$ sudo chown 10000:10000 /home/Administrator
$ ls -ld /home/Administrator
drwxr-xr-x 2 Administrator Domain Users 4096 2011-12-18 06:39 /home/Administrator
$ su - Administrator
パスワード:
su: 認証失敗

■パスワード同期を設定する(Windows)

 参考:同期するコンピューターを追加または削除する
 http://technet.microsoft.com/ja-jp/library/cc725779.aspx

■パスワードを変更したら、同期する

> nisadmin syncall
設定は正常に更新されました。

■通信を行なうポートを確認

$  rpcinfo -u localhost ypbind
プログラム 100007 バージョン 1 の準備が完了し待機中です
プログラム 100007 バージョン 2 の準備が完了し待機中です

$ rpcinfo -p
   プログラム バージョン プロトコル ポート
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  58992  status
    100024    1   tcp  34070  status
    100007    2   udp    612  ypbind
    100007    1   udp    612  ypbind
    100007    2   tcp    613  ypbind
    100007    1   tcp    613  ypbind

■ssodはインストールしない
 ※Debian用のバイナリがないからだ。(2006-02-17ととても古い!)

$ tar ztvf ssod.tar.gz | awk '{print $7}' | grep -v "\.[a-z]"
unix
unix/bins
unix/bins/aix_52
unix/bins/hpux_11
unix/bins/rhl_8
unix/bins/rhl_9
unix/bins/sol_sparc_8
unix/bins/sol_sparc_9
unix/bins/sol_x86_8
unix/src
unix/src/common
unix/src/pam_sso
unix/src/ssod
unix/src/tripldes


 参考:パスワード同期デーモンを UNIX ベースのコンピューターにインストールする
 http://technet.microsoft.com/ja-jp/library/cc755186.aspx

 参考:UNIX Side Components for Identity Management for UNIX
 http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=8467

 参考:Windowsドメインのパスワードで Linuxにもログインできるようにする。
 http://www.ilovex.co.jp/Division/ITD/archives/2008/12/windows_linux.html

■現在使えるパスワードを確認する

$ sudo grep -v "^#\|^\$" /etc/pam.d/common-password
[sudo] password for labunix:
password        [success=1 default=ignore]      pam_unix.so obscure sha512
password        requisite                       pam_deny.so
password        required                        pam_permit.so

■PAM認証にKerberos認証を追加する
 ※導入時にWindowsのホスト名を追加する

 参考:第1回 pam_krb5によるパスワードの統合
 http://gihyo.jp/admin/serial/01/ad-linux/00011

$ sudo apt-cache search pam | grep krb5
libpam-krb5 - PAM module for MIT Kerberos
libpam-krb5-migrate-heimdal - PAM module for migrating to Kerberos

$ sudo apt-get install libpam-krb5 libpam-krb5-migrate-heimdal

$ sudo grep -v "^#\|^\$" /etc/pam.d/common-password
password        requisite                       pam_krb5.so minimum_uid=1000
password        [success=1 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512
password        requisite                       pam_deny.so
password        required                        pam_permit.so
$ su Administrator
Password:
su: 認証失敗

■Kerberos認証には問題ない。

$ sudo apt-get install krb5-user
$ sudo kinit Administrator@EXCHANGE.MS
Password for Administrator@EXCHANGE.MS:

■libpam_unix2モジュールを導入

$ sudo apt-get install libpam-unix2

■debianのデフォルトユーザのIDは1000なので、
 1001からはActiveDirectoryが管理する

 ※PAMの設定変更後すぐに反映される(再起動等他の操作は不要)

$ sudo grep -v "^#" /etc/pam.d/common-auth
auth    [success=2 default=ignore]      pam_krb5.so minimum_uid=1001 debug
auth    [success=1 default=ignore]      pam_unix.so nullok_secure try_first_pass sha512 debug
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so
auth    optional   pam_unix2.so         debug

$ sudo grep -v "^#" /etc/pam.d/common-session
session [default=1]                     pam_permit.so
session requisite                       pam_deny.so
session required                        pam_permit.so
session optional                        pam_krb5.so minimum_uid=1001 debug
session required        pam_unix.so     debug

■suコマンドによるログイン、ログアウトチェック

$ sudo tail -21 /var/log/auth.log.1  | cut -c 27-
$ tail -21 newauth.log  | cut -c 27- | nl -n rz
000001  su[5390]: pam_krb5(su:auth): pam_sm_authenticate: entry (0x0)
000002  su[5390]: pam_krb5(su:auth): (user nis1) attempting authentication as nis1@EXCHANGE.MS
000003  su[5390]: pam_krb5(su:auth): user nis1 authenticated as nis1@EXCHANGE.MS
000004  su[5390]: pam_krb5(su:auth): pam_sm_authenticate: exit (success)
000005  su[5390]: pam_unix2(su:auth): pam_sm_authenticate() called
000006  su[5390]: pam_unix2(su:auth): username=[nis1]
000007  su[5390]: pam_unix2(su:auth): wrong password, return PAM_AUTH_ERR
000008  su[5390]: Successful su for nis1 by defuser
000009  su[5390]: + /dev/pts/0 defuser:nis1
000010  su[5390]: pam_krb5(su:setcred): pam_sm_setcred: entry (0x2)
000011  su[5390]: pam_krb5(su:setcred): (user nis1) initializing ticket cache FILE:/tmp/krb5cc_10001_I8vVXW
000012  su[5390]: pam_krb5(su:setcred): pam_sm_setcred: exit (success)
000013  su[5390]: pam_unix2(su:setcred): pam_sm_setcred() called
000014  su[5390]: pam_unix2(su:setcred): username=[nis1]
000015  su[5390]: pam_unix2(su:setcred): pam_sm_setcred: PAM_SUCCESS
000016  su[5390]: pam_krb5(su:session): pam_sm_open_session: entry (0x0)
000017  su[5390]: pam_krb5(su:session): pam_sm_open_session: exit (success)
000018  su[5390]: pam_unix(su:session): session opened for user nis1 by defuser(uid=1000)
000019  su[5390]: pam_krb5(su:session): pam_sm_close_session: entry (0x0)
000020  su[5390]: pam_krb5(su:session): pam_sm_close_session: exit (success)
000021  su[5390]: pam_unix(su:session): session closed for user nis1

■sshでログインする

$ last | head -3
defuser  pts/2        localhost        Sun Dec 18 15:15 - 15:16  (00:00)
Administ pts/2        localhost        Sun Dec 18 15:15 - 15:15  (00:00)
nis1     pts/2        localhost        Sun Dec 18 15:15 - 15:15  (00:00)

■Windowsからのmapの更新ログ


> type C:\windows\idmu\log\propagate.log

■pam_krbのdebugログできちんとdefuser(id:1000)の認証がスキップされている

$ sudo kinit defuser@EXCHANGE.MS
kinit: Client not found in Kerberos database while getting initial credentials

■新しく作成したユーザはログインできる

$ sudo kinit nis1@EXCHANGE.MS
Password for nis1@EXCHANGE.MS:

■各pam設定のdebugオプションを削除

■おまけ
※PowerShellのモジュールが無かったが、ある場合は以下のようにする

PS> import-module servermanager
PS> get-windowsfeature | Select-String "NIS"
PS> get-windowsfeature | Select-String "UNIX"
PS> get-windowsfeature ADDS-*
PS> get-windowsfeature ADDS-* | add-windowsfeature