Kenichi Maehashi's Blog

脳内コアダンプ

RSS
Category: Computer
The PowerShell is a modern, object-oriented scripting envrironment for Windows XP, Vista and 7. I'm trying the PowerShell for a few days and found that it is really well-organized. I also feel that the PowerShell assembles good points from C#, Visual Basic, Haskell and Perl. Although its syntax is a little complicated, the PowerShell has possibility to replace not only the old-fashioned "batch" files, but also the VBScripts and the JScripts.

It runs on Windows XP (I'm not using XP already, but it has a big meaning to support it), has no need to parse String manually, and is free --- enough to make me feel that I never want to write batch files any more.
Category: Computer
# 日本語の情報でまとまっているところが少なかったのと、
# SID について触れている人があまり居なかったので、今更ですが記事にしてみます。

サーバ環境: CentOS 5.4 (x86_64) + Samba 3.4.3
クライアント環境: Windows 7 Enterprise (32-bit / 64-bit) または Windows Server 2008 R2 Enterprise (どちらも RTM)

クライアント側で以下の通り、レジストリの修正を行う必要があります。
これを行わないと、Windows 7 や Server 2008 R2 クライアントは Samba ドメインに参加できず「指定されたドメインがないか、またはアクセスできません」というエラーが生じます。

以下のコマンドを管理者権限で実行してください:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters" /v DomainCompatibilityMode /t REG_DWORD /d 1 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters" /v DNSNameResolutionRequired /t REG_DWORD /d 0 /f

これで、クライアントは Samba ドメインに参加できるようになります。ドメインの参加に成功した後、「このコンピューターのプライマリ ドメイン DNS 名を "" に変更できませんでした」というメッセージが表示されますが、これはドメインの機能に影響しないので無視して大丈夫です。

いつも通りコンピュータを再起動すれば、ドメインユーザはクライアント コンピュータにログオンできるようになります。ログオン中にエラー「このワークステーションとプライマリ ドメインとの信頼関係に失敗しました」が生じる場合は、PDC (および BDC がある場合はその全て) の SID がドメイン SID と一致していることを確認してください。サーバで以下のコマンドを実行すれば、SID を確認できます。
# net getdomainsid
SID for local machine SMBPDC is: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-123456789
SID for domain SMBDOMAIN is: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-987654321
SID が local machine と domain で異なる場合は、local machine の SID を domain の SID に一致させます。上の例であれば、次のようなコマンドで実現できます:
# net setlocalsid S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-987654321
これで、二つの SID が同じ値になっていることを確認できます。
# net getdomainsid
SID for local machine SMBPDC is: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-987654321
SID for domain SMBDOMAIN is: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-987654321
# Read this article in English.
Category: Computer
Server Side: CentOS 5.4 (x86_64) + Samba 3.4.3
Client Side: Windows 7 Enterprise (32-bit / 64-bit) or Windows Server 2008 R2 Enterprise, both RTM

You can do it, but you need to change registry values on the client side.
Without configurations listed below, Windows 7 or Server 2008 R2 clients cannot join to Samba domains (the error message will be: "The specified domain either does not exist or could not be contacted").

Run these commands as the Administrator:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters" /v DomainCompatibilityMode /t REG_DWORD /d 1 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters" /v DNSNameResolutionRequired /t REG_DWORD /d 0 /f

Now clients can join to Samba-based domains. After successfully joinning to a domain, you will see the message saying "Changing the Primary Domain DNS name of this computer to '' failed". Actually this error doesn't affect the domain function itself, so just ignore the message.

After restarting the computer (as you usually do after joinning to a domain), users can log on to the client computer. If you encounter the error ("The trust relationship between this workstation and the primary domain failed") while logging on, make sure that your PDC (and all BDCs if exists) has the same SID as the domain SID. You can check your SID by running the following command on the server side:
# net getdomainsid
SID for local machine SMBPDC is: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-123456789
SID for domain SMBDOMAIN is: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-987654321
If SIDs are different between the local machine and the domain, change the local machine SID to the domain SID. In the above example, you can accomplish this by:
# net setlocalsid S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-987654321
Now these two SIDs should have the same value:
# net getdomainsid
SID for local machine SMBPDC is: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-987654321
SID for domain SMBDOMAIN is: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-987654321
# Japanese translation of this article is here.