WheezyのSamba3でNTドメインコントローラを構築。

■WheezyのSamba3でNTドメインコントローラを構築。
 Windoswドメインの代替として、Sambaドメインを構築可能。

 NTLM認証とは、pdbeditによるSAM認証のことを指すものとする。

 Windowsでは、NT LanManager (NTLM) セキュリティを使って、
 ローカルのセキュリティアカウントマネージャ(SAM)データベースでユーザーを認証。

 Sambaドメインコントローラとして、PDCのみか、
 PDCとBDCの組み合わせでの構築が可能。

■制限

 ・Samba3では、Kerberos認証のADはサポートされていない。
 ・SAM認証データベースの複製をサポートしていないため、
  Windowsサーバと混在することは出来ない。
 ・その他未サポートの実装がある。

■PDCの構築
 設定の変更を行うので、Sambaサービスは止めておく。

$ sudo /etc/init.d/samba stop

■パスワードバックエンドについて
 smbpasswdではアカウントロック等が出来ない為、TDBとする。
 現状未設定、デフォルトから変更が必要なのは、
 「workgroup」と「domain logons」

$ testparm -s 2>&1 | \
  grep "workgroup\|security = USER\|domain logons\|passdb backend"

$ testparm -s -v 2>&1 | \
  grep "workgroup\|security = USER\|domain logons\|passdb backend"
        workgroup = WORKGROUP
        security = USER
        passdb backend = tdbsam
        domain logons = No

$ testparm -s 2>&1 | \
  grep "workgroup\|security = USER\|domain logons\|passdb backend"
        workgroup = SAMBALOCAL
        domain logons = Yes

■マスタブラウザの選出。
 現状未設定、デフォルトから変更が必要なのは、
 「os level」と「preferred master」 

$ testparm -s 2>&1 | \
  grep "os level\|domain master\|preferred master\|local master"
$ testparm -s -v 2>&1 | \
  grep "os level\|domain master\|preferred master\|local master"
        os level = 20
        preferred master = No
        local master = Yes
        domain master = Auto

$ testparm -s 2>&1 | \
  grep "os level\|domain master\|preferred master\|local master"
        os level = 32
        preferred master = Auto

■自身のwinsを使用「wins support = Yes」

$ testparm -s -v 2>&1 | grep wins
        name resolve order = lmhosts wins host bcast
        max wins ttl = 518400
        min wins ttl = 21600
        wins proxy = No
        wins server =
        wins support = Yes
        wins hook =

■コンピュータアカウント登録時のスクリプト
 現状未設定、デフォルトにも無いので記述。

$ testparm -s 2>&1 | grep "add machine script"
$ testparm -s -v 2>&1 | grep "add machine script"
        add machine script =
$ testparm -s 2>&1 | grep "add machine script"
        add machine script = /usr/sbin/useradd -d /dev/null -s /bin/false %u

■最小限のログオン設定

$ testparm -s -v 2>&1 | grep "logon [dhps]"
        logon script =
        logon path = \\%N\%U\profile
        logon drive =
        logon home = \\%N\%U
        init logon delayed hosts =
        init logon delay = 100

■NTドメインで提供するログオンスクリプトやシステムポリシーの配置場所
 ※隠し共有にしてはならない。
 これはコメントアウトを外して有効化、ディレクトリを作成。

$ grep -A 5 "\[netlogon\]\$" /etc/samba/smb.conf
;[netlogon]
;   comment = Network Logon Service
;   path = /home/samba/netlogon
;   guest ok = yes
;   read only = yes

$ testparm -s -v 2>&1 | grep -A 4 "^\[netlogon\]"
[netlogon]
        comment = Network Logon Service
        path = /home/samba/netlogon
        guest ok = Yes

$ sudo mkdir -p /home/samba/netlogon

■NTドメインのプロファイルの配置場所
 ファイルシステムかSambaでACLの設定を行う。
 ファイルシステムは設定済み。
 ファイルシステムがサポートしていない場合はSamba側で指定する。

$ mount | grep attr | sed s/".*type ext. "//
(rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered)

$ testparm -s -v 2>&1 | grep "profile acls"
        profile acls = No
$ testparm -s 2>&1 | grep "profile acls"
        profile acls = Yes

■profiles共有
 ※隠し共有不可。
 これもコメントアウトを外して有効化、ディレクトリの作成。

$ grep -A 7 "\[profiles\]\$" /etc/samba/smb.conf
;[profiles]
;   comment = Users profiles
;   path = /home/samba/profiles
;   guest ok = no
;   browseable = no
;   create mask = 0600
;   directory mask = 0700

$ testparm -s -v 2>&1 | grep -A 6 "^\[profiles\]"
[profiles]
        comment = Users profiles
        path = /home/samba/profiles
        create mask = 0600
        directory mask = 0700
        browseable = No

$ sudo mkdir -p /home/samba/profiles

■Sambaサービスの起動

$ sudo /etc/init.d/samba start

■PDCでのSIDの確認

$ sudo net getdomainsid
SID for local machine LPIC3 is: S-1-5-21-3265833510-197033004-3638118188
SID for domain SAMBALOCAL is: S-1-5-21-3265833510-197033004-3638118188

■PDC -> BDCに必要な同期
 認証DBにはWindowsドメインのSAMでは無く、LDAPを使用する。

 SIDの保存場所は下記、tdbtoolやtdbdump、tdbbackup等でチェック。
 /var/lib/samba/secrets.tdb

$ sudo net rpc getsid SAMBALOCAL
Storing SID S-1-5-21-3265833510-197033004-3638118188 for Domain SAMBALOCAL in secrets.tdb

■ドメインアカウントとLinuxアカウントの対応
 デフォルトでは空。
 「getdomainsid」で調べたSIDを使って、
 「Domain Admins」「Domain Users」「Domain Guests」を作成。

$ sudo net groupmap list
$ for list in domadmins domusers domguests;do sudo groupadd "$list";done
$ sudo net groupmap add NTgroup='Domain Admins' UNIXgroup=domadmins sid='S-1-5-21-3265833510-197033004-3638118188-512'
$ sudo net groupmap add NTgroup='Domain Users' UNIXgroup=domusers sid='S-1-5-21-3265833510-197033004-3638118188-513'
$ sudo net groupmap add NTgroup='Domain Guests' UNIXgroup=domguests sid='S-1-5-21-3265833510-197033004-3638118188-514'
$ sudo net groupmap list
Domain Admins (S-1-5-21-3265833510-197033004-3638118188-512) -> domadmins
Domain Guests (S-1-5-21-3265833510-197033004-3638118188-514) -> domguests
Domain Users (S-1-5-21-3265833510-197033004-3638118188-513) -> domusers

$ getent group | grep ^dom
domadmins:x:10001:
domusers:x:10002:
domguests:x:10003:

■NTドメインのシステムポリシーの配置

 netlogon共有直下にシステムポリシーファイルを配置する。
 Windows上でポリシーエディタで編集する。
 ADのグループポリシーの使用は不可。

 WindowsNT系	NTConfig.pol
 Windows9x系	Config.pol

■アカウントポリシーの設定
 なんとなく、パスワードの有効期限っぽいキーがあります。

$ ls /var/lib/samba/account_policy.tdb
/var/lib/samba/account_policy.tdb

$ sudo tdbtool
tdb> open /var/lib/samba/account_policy.tdb
tdb> check
Database integrity is OK and has 17 records.
tdb> keys
key 21 bytes: minimum password age
key 31 bytes: refuse machine password change
key 20 bytes: reset count minutes
key 18 bytes: PRIV_S-1-5-32-550
key 18 bytes: PRIV_S-1-5-32-548
key 18 bytes: PRIV_S-1-5-32-551
key 18 bytes: PRIV_S-1-5-32-549
key 16 bytes: disconnect time
key 35 bytes: user must logon to change password
key 17 bytes: password history
key 17 bytes: lockout duration
key 20 bytes: min password length
key 18 bytes: PRIV_S-1-5-32-544
key 13 bytes: PRIV_S-1-1-0
key 21 bytes: maximum password age
key 20 bytes: bad lockout attempt
key 13 bytes: INFO/version
tdb> quit

■例えば、パスワードの変更禁止期間がデフォルトの0秒。

$ sudo pdbedit -P 'minimum password age'
account policy "minimum password age" description: Minimal password age, in seconds (default: 0 => allow immediate password change)
account policy "minimum password age" value is: 0

■あえて間違えると一覧を表示してくれます。

$ sudo pdbedit -P ''
No account policy by that name!
Account policy names are:
min password length
password history
user must logon to change password
maximum password age
minimum password age
lockout duration
reset count minutes
bad lockout attempt
disconnect time
refuse machine password change

■アカウントのロックアウトを設定する。

$ sudo pdbedit -P 'bad lockout attempt'
account policy "bad lockout attempt" description: Lockout users after bad logon attempts (default: 0 => off)
account policy "bad lockout attempt" value is: 0

$ sudo pdbedit -P 'bad lockout attempt' -C 6
account policy "bad lockout attempt" description: Lockout users after bad logon attempts (default: 0 => off)
account policy "bad lockout attempt" value was: 0
account policy "bad lockout attempt" value is now: 6

$ sudo pdbedit -P 'bad lockout attempt'
account policy "bad lockout attempt" description: Lockout users after bad logon attempts (default: 0 => off)
account policy "bad lockout attempt" value is: 6

■NTドメインのユーザーの権利
 特に設定はしていないが、デフォルトで有効なので、
 ユーザー権限の設定がサポートされている。

$ testparm -s 2>&1 | grep "enable privilege"
$ testparm -s -v 2>&1 | grep "enable privilege"
        enable privileges = Yes
$ sudo pdbedit -a root

■まだドメインrootアカウントが無ければ作成

$ sudo pdbedit -L -v -w root
Unix username:        root
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-3265833510-197033004-3638118188-1010
Primary Group SID:    S-1-5-21-3265833510-197033004-3638118188-513
Full Name:            root
Home Directory:       \\lpic3\root
HomeDir Drive:
Logon Script:
Profile Path:         \\lpic3\root\profile
Domain:               SAMBALOCAL
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          never
Kickoff time:         never
Password last set:    月, 06  5月 2013 08:54:43 JST
Password can change:  月, 06  52013 08:54:43 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

■SAMBALOCAL\labunixユーザにプリンタ共有の管理を行う権限を付与。
 ※ドメイン参加にroot以外のアカウントを使う場合は、同様に「SeMachineAccountPrivilege」を付与しておく。
	
$ sudo net rpc rights grant 'SAMBALOCAL\labunix' SePrintOperatorPrivilege
Enter root’s password:
Successfully granted rights.

$ net rpc rights list 'SAMBALOCAL\labunix'
Enter labunix’s password:
SePrintOperatorPrivilege

■ホームディレクトリ
 NISが無いので、%Lと同等のコンピュータ名がつく。
 pdbeditで各ユーザごとに変更が可能。

$ testparm -s -v 2>&1 | grep "logon home"
        logon home = \\%N\%U

$ sudo pdbedit --help | grep "\-h,"
  -h, --homedir=文字列               set home directory

■NT系マシンの移動プロファイル

 XP ProSP1以上、2000SP4以上ではプロファイルの保存場所のアクセス権をチェック
 するようになった。
 ACLに対応したファイルシステムであれば問題なし。
 ファイルシステムで対応していない場合は「profile acl = yes」とする。

$ testparm -s -v 2>&1 | grep "logon path"
        logon path = \\%N\%U\profile

$ sudo pdbedit --help | grep "\-p,"
  -p, --profile=文字列               set profile path

$ testparm -s -v 2>&1 | grep "profile acls"
        profile acls = Yes

 移動プロファイルに置かれるファイルの種類

 NTUSER.DAT	移動可能なプロファイル
 NTUSER.MAN	固定(移動不可な)プロファイル

 NTUSER.DATの「Owner SID」を変更することで他のユーザにも適用可能。

■9x系マシンの移動プロファイル

 logon homeパラメータの「\\サーバ名\共有名」までが使用される。
 「\\サーバ共有名\共有パス名」を指定しても上記が使用される。
 上記制限により、移動プロファイルの利用をしない場合は
 下記のようにパラメータの値を設定する。

 logon path =
 logon home =

■Windowsクライアントのドメイン参加

 コンピュータアカウントの作成とドメイン参加
 root権限か、SeMachineAccountPrivilegeユーザ権限を持ったユーザを
 ドメイン参加の認証ユーザとする。

 コンピュータアカウントの事前作成(コンピュータ名でSambaユーザを作成)
 UNIXユーザ作成の際のみコンピュータ名の後ろに「$」を付与する。

$ sudo useradd -s /dev/null -d /dev/null dummy-host$
$ sudo pdbedit -a -m dummy-host

■信頼関係
 別のドメインを信頼する場合の設定
 NT互換の明示的な片方向の信頼関係のみ。

$ sudo net rpc trustdom list
Enter root’s password:
Trusted domains list:

none

Trusting domains list:

none

$ sudo net rpc trustdom ?
Invalid command: net rpc trustdom ?
Usage:
net rpc trustdom add             Add trusting domain’s account
net rpc trustdom del             Remove trusting domain’s account
net rpc trustdom establish       Establish outgoing trust relationship
net rpc trustdom revoke          Revoke outgoing trust relationship
net rpc trustdom list            List in- and outgoing domain trusts
net rpc trustdom vampire         Vampire trusts from remote server

■WindowsドメインをSambaドメインが信頼する。
 以下の書式で行う。ユーザ名は「ドメイン$」
 ドメインアカウントは「administrator」でなくても良い。

$ sudo useradd -s /bin/false -d /dev/null MSNTDS$
$ sudo net rpc trustdom add MSNTDS [trust_password] \
  -U administrator%[admin pass]
$ sudo net rpc trustdom establish MSBTDS

■Windowsドメインからの移行
 WIndows側のPDCコンピュータ名をNTPDCとした場合。

 BDCとしてSIDを同期する。		「net rpc getsid」
 BDCとしてドメインに参加する。		「net join bdc」
 Sambaの設定				「smb.conf」
  ※ユーザ、コンピュータの自動作成スクリプト

$ sudo net rpc ? | grep "samdump\|vampire"
Invalid command: net rpc ?
net rpc samdump         Dump SAM data of remote NT PDC
net rpc vampire         Sync a remote NT PDC’s data into local passdb

 実際のユーザ、グループを作成せずに「net rpc vampire」が機能するか確認。

$ sudo net rpc samdump NTPDC
$ sudo net rpc vampire NTPDC

■NetBIOSのサフィックスの意味

 NetBIOS サフィックス (NetBIOS 名の 16 番目の文字)
 http://support.microsoft.com/kb/q163409

 例えば。
 1bがドメインマスタブラウザで、
 1cがドメインコントローラ、
 1dがマスタブラウザ(WORKGROUPの)
 1eはマスタブラウザ選定に参加ひているマシン。

$ nmblookup -A 192.168.1.10
Looking up status of 192.168.1.10
        LPIC3           <00> -         H <ACTIVE>
        LPIC3           <03> -         H <ACTIVE>
        LPIC3           <20> -         H <ACTIVE>
        ..__MSBROWSE__. <01> - <GROUP> H <ACTIVE>
        SAMBALOCAL      <1d> -         H <ACTIVE>
        SAMBALOCAL      <1b> -         H <ACTIVE>
        SAMBALOCAL      <1c> - <GROUP> H <ACTIVE>
        SAMBALOCAL      <1e> - <GROUP> H <ACTIVE>
        SAMBALOCAL      <00> - <GROUP> H <ACTIVE>

        MAC Address = 00-00-00-00-00-00

■WORKGROUP時の結果。

$ nmblookup -A 192.168.1.10
Looking up status of 192.168.1.10
        LPIC3           <00> -         B <ACTIVE>
        LPIC3           <03> -         B <ACTIVE>
        LPIC3           <20> -         B <ACTIVE>
        ..__MSBROWSE__. <01> - <GROUP> B <ACTIVE>
        WORKGROUP       <1d> -         B <ACTIVE>
        WORKGROUP       <1e> - <GROUP> B <ACTIVE>
        WORKGROUP       <00> - <GROUP> B <ACTIVE>