Windowsサーバでアカウント・権限の一括登録

社内のテスト用Webサーバ(WindowsNT Server)を新マシン(WindowsSerever2003)に移行しました。
登録してある顧客・社内の数百のユーザ、アクセス権を移行させる方法にとても悩みました。
もはやNTを使っている環境も限られると思いますが、備忘録として手順のメモを残します。

Windowsアカウントの移行

NTサーバに登録してあるWindowsアカウントを新サーバに移行します。
1.addusers.exeの入手
Microsoftから配布されていますので入手します。
AddUsers による大量のユーザーの自動作成
ftp://ftp.microsoft.com/bussys/winnt/winnt-public/reskit/nt40/i386/addusers_x86.exe
入手したexeファイルをC:\などに保存します。
2.Windowsアカウントの準備
NTサーバでaddusersコマンドを実行して、登録されているWindowsアカウントをファイルに出力します。

C:\>addusers /d:u users.txt

ただしシステムユーザーも含めた全アカウントが出力され、またパスワードは出力されないので移行に際してはあまり使えません。
今回は別ソフトで管理していたユーザーのリスト(名前,ID,PW)のテキストファイルを使うことにしました。
3.addusersコマンド
addusersコマンドはテキストファイルのリストを読み込んで、Windowsにアカウントを追加することができます。
テキストファイルの書式は下記の通り。

[User]
user1,フルネーム1,pw1,,,,,
user2,フルネーム2,pw2,,,,,
user3,フルネーム3,pw3,,,,,
[Local]
group,グループ名,user1,user3

日本語が入る場合はUnicodeで保存します。
その他、詳細な書式は下記をご覧ください。
Q2-19 Addusers.exeの具体的な使用方法について教えてください。
Q2-11 大量のユーザーアカウントを一括作成する方法はありますか?
以上の準備ができたら新サーバでコマンドを実行します。

C:\>addusers.exe /c user.txt /p:e

これで新しいサーバにWindowsアカウントが追加されました。
参考
大量のユーザー・アカウントを一括登録する – @IT
Windows Serverにおけるユーザアカウントとアクセス権を一括で設定する方法

Windows権限の一括登録(cacls/icacls)

テストサーバでは案件ごとにディレクトリを作成して、それぞれに任意のWindowsユーザーのアクセス権限(読み取り)を追加して基本認証をかけています。
その状態を新しいサーバに再現します。
1.caclsコマンドでアクセス権の確認
稼働中のNTサーバで、どのフォルダにどのWindowsユーザーの権限が追加されているか確認します。
NTサーバでcaclsコマンドを使います。

C:\>cacls C:\Folder\* > caclslist.txt

これでC:\Folder以下のフォルダ名と権限の一覧がファイルに出力されます。
出力内容の詳細は以下参考。
caclsコマンドの出力の見方 - @IT
2.caclsコマンドでアクセス権の追加
次に新しいサーバにアクセス権を追加します。
新しいサーバで下記コマンドを叩きます。

C:\>cacls C:\Folder\* /t /e /c /g user:r

オプションの意味は次の通り。
/t:フォルダ以下に適用
/e:アクセス権の追記(これがないと既存アクセス権が消える!)
/c:エラー無視
/g:userにアクセス権を付与
r:読み取り
Q2-16 アクセス権を一括で設定する方法はありますか。
1コマンドで1ユーザー分なので、これをユーザーの数だけテキストファイルに複数行記述して一気にバッチ処理を行います。
(拡張子をbatにして実行できたけど、下記のような処理が必要な場合がある?
caclsコマンドをバッチ・ファイルで利用する - @IT
・・・しかし、「読み取り」権限ではなく「読み取りと実行」権限が付与されました。
Webサーバなので読み取りだけに絞りたい。
Windows Server World Online – アクセス権完全掌握マニュアルPart5
3.icalsコマンドを使ってアクセス権追加
いろいろ調べるとWindowsServer2003(とVista)にはicalsコマンドと言うものが実装されています。
Icacls-Microsoft
しかしググっても他の情報があまりない。試行錯誤を繰り返し下記コマンドで成功しました。

C:\>icacls C:\Folder /grant user:(OI)(CI)R

(OI)(CI)がポイント(そのフォルダ自身とそれ以下のフォルダ、ファイルに適用)。
caclsコマンドの出力の見方 - @IT
以上で数百の任意のフォルダに任意のユーザーのアクセス権を一括で追加することができました。
(正確には一括ではなくて、いくつも手順を踏んでいるけど)
いまやこのようなレガシーなアクセス管理でなくActive Directoryが主流だと思われます。
Active Directoryの勉強をする必要があるのかなぁ・・・。

コメント

タイトルとURLをコピーしました