※実際には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
** 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
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