• ベストアンサー

サーバ管理 フォルダ作成とアクセス権

こんにちは、 Windows2000serverを管理しています。 200ぐらいのフォルダとそのフォルダへのアクセス権を設定しないといけないのですが、簡単にできるソフトなどないでしょうか? 例えば、EXCELでフォルダ名の列、アクセス権を設定するユーザの列を書いておいてそれを読み込んで作ってくれるなど。 何かお分かりの方がいましたらお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nota55
  • ベストアンサー率37% (138/366)
回答No.6

色々実験してみましたら,普通にCACLSで出来ました。 ◎単にEveryoneを削除したい(チェックはついたまま) →#5の方法もしくは,バッチの:MD_AND_CACLSを以下に変更。 ---ここから--- :MD_AND_CACLS For /F "usebackq eol=; tokens=1 delims=," %%i in (acl.txt) DO md %%i For /F "usebackq eol=; tokens=1,2 delims=," %%i in (acl.txt) DO cacls %%i /e /g %%j REM Everyoneのアクセス権を削除 For /F "usebackq eol=; tokens=1 delims=," %%i in (acl.txt) DO cacls %%i /e /r everyone ---ここまで--- ◎Everyoneを削除して,チェックも外したい →バッチの:MD_AND_CACLSを以下に変更。 ---ここから--- :MD_AND_CACLS For /F "usebackq eol=; tokens=1 delims=," %%i in (acl.txt) DO md %%i REM Everyoneのアクセス権を削除 For /F "usebackq eol=; tokens=1 delims=," %%i in (acl.txt) DO cacls %%i /e /r everyone For /F "usebackq eol=; tokens=1,2 delims=," %%i in (acl.txt) DO cacls %%i /e /g %%j ---ここまで--- 上記は, ディレクトリ作成→アクセス権設定→everyone削除 ディレクトリ作成→evryone削除→アクセス権設定 という違いでしかありません。 ただし後者においても,新たに設定したアクセス権が 一階層上のフォルダのアクセス権を完全に含む場合, チェックがつきます。(多分そういう仕様) 例) DIR_1…Use1:F,User2:C,Group1:F | |--DIR_2…Use1:F,User2:C,Group1:F,User3:F |  | |  |----DIR_2.1…Use1:F,User2:C,Group1:F | |--DIR_2…Use1:F,C,Group1:F,User3:F この場合DIR_2にチェックがつく。 DIR2.1は一階層上のDIR_2のアクセス権を完全に含まない (User3がない)のでチェックはつかない。

norinori1
質問者

お礼

返信が遅れました。大変すみません。 バッチファイルの書き方など大変参考になりました。 本当にありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • nota55
  • ベストアンサー率37% (138/366)
回答No.5

単にEveryoneフルコントロールを削除するだけであれば, ルート(D:)上でEveryoneのアクセス権を消すと, 下位のフォルダから消えると思います。 (念のため,事前にD:にAdministratorをフルコントロールで 入れておいたほうがいいかもしれませんが) ただ, 「継承可能なアクセス許可を親からこのオブジェクトに継承できるようにする。」 のチェックを外す方法となると……CACLSでは無理ですので 別の手を考えないといけませんね。

norinori1
質問者

お礼

返信ありがとうございます。非常に参考になりました。

すると、全ての回答が全文表示されます。
  • nota55
  • ベストアンサー率37% (138/366)
回答No.4

ああああ,acls.txtに余計な"が。 "c:\test_dir1_depth1",users:w guest:r administrator:f" ↓ "c:\test_dir1_depth1",users:w guest:r administrator:f

norinori1
質問者

お礼

何度も送っていただいて恐縮です。 ありがとうございます。

norinori1
質問者

補足

こんにちは、 d:にフォルダを作ろうとしています。 d:everyone フルコントロール フォルダのセキュリティで 「継承可能なアクセス許可を親からこのオブジェクトに継承できるようにする。」にチェックが入っているため、batを行うと、everyoneフルコントロールが残ってしまいます。 BATファイルにこれを削除するように書き換えたいのですが、どうすればいいのでしょうか? よろしくお願いします。

すると、全ての回答が全文表示されます。
  • nota55
  • ベストアンサー率37% (138/366)
回答No.3

む。しまった。 これではユーザ名/グループ名に空白があるとダメだ。 acls.txtとバッチファイルを以下に差し替えて下さい。 ---acls.txtここから--- "c:\test_dir1_depth1",users:w guest:r administrator:f" "c:\test_dir1_depth1\depth2",users:w administrator:f "c:\test_dir2","creator owner:f" ---acls.txtここまで--- ◎変更点 ユーザ名に空白があるばあいは""で括る。 めんどくさければ全て""で括ってもOK。 ---バッチファイルここから--- @echo フォルダ作成とACLの設定を行います。 @echo よろしいですか?(y/n) ※yキー以外で実行を中止。 @echo off Set /p ret= If %ret%==y goto MD_AND_CACLS goto END :MD_AND_CACLS For /F "usebackq eol=; tokens=1 delims=," %%i in (acl.txt) DO md %%i For /F "usebackq eol=; tokens=1,2 delims=," %%i in (acl.txt) DO cacls %%i /e /g %%j :END ---バッチファイルここまで-- ◎変更点 For に usebackq を追加。 (""で括られた値を正しく処理するため)

norinori1
質問者

お礼

返信ありがとうございます。非常に参考になりました。

すると、全ての回答が全文表示されます。
  • nota55
  • ベストアンサー率37% (138/366)
回答No.2

#1です。 *******考慮しなければいけない点********* その1 バッチファイルは下位のフォルダにACLを継承しないため, 馬鹿正直にacl.txtでアクセス権を列挙しなければいけません。 継承させたいときは cacls %%i /e /g %%j を cacls %%i /e /t /g %%j としてやればいいのですが,その場合は acl.txtを 上位のフォルダ→下位のフォルダとなるように並べかえる 必要があるかもしれません。(未検証) その2 アクセス権は追加される形になります。(置き換えではない) このあたりはコマンドプロンプトから cacls /? で /e についての記述を読んで下さい。 置き換えたい場合は /e を外せばよいのですが,その際は 全てのフォルダに Administrator:f を与えないと ダメかもしれません。(未検証) その3 caclsコマンドは,読みとり・書き込み・変更・フルコントロール の4種類しか設定できません。 ファイルの作成・編集はOKだけどフォルダはNGなんていう 細かい制御をしたいときは http://members.jcom.home.ne.jp/unimaru/software/console.html の UniCacls.exe を使うとよいかもしれません。 その場合は以下が必要となります。 ・UniCacls.exeをバッチファイルと同じフォルダに保存 ・acls.txt のアクセス権の記述をUniCacls用に変更 ・バッチファイルの DO cacls を DO unicacls.exe に変更 なお UniCacls の書式はコマンドプロンプトから UniCaclsのあるフォルダに移動して, unicacls と 入力すると参照できます。 バッチファイルで何をしているかは, For /? をデスクトップが透けて見えるまで読み倒して下さい。 参考URL http://www.monyo.com/technical/windows/20.html http://www.monyo.com/technical/windows/11.html http://members.jcom.home.ne.jp/unimaru/software/console.html

norinori1
質問者

お礼

返信ありがとうございます。非常に参考になりました。

すると、全ての回答が全文表示されます。
  • nota55
  • ベストアンサー率37% (138/366)
回答No.1

コマンドでcaclsってのがあります。 色々考慮しなければいけない点はさておき,とりあえず 一番簡単な例として。 1.フォルダのパスとユーザ名とアクセス権のリストを作り  acl.txt として保存する。 ◎書式: フォルダのフルパス,ユーザ名:アクセス権 ユーザを複数指定する場合は,半角スペースを開けて列挙。 (グループ名とユーザ名は特に意識しなくもいいみたい) アクセス権の書式は caclsコマンドを参照。 ---サンプルここから--- "c:\test_dir1_depth1",users:w guest:r administrator:f "c:\test_dir1_depth1\depth2",users:w administrator:f "c:\test_dir2",y_noda:f ---サンプルここまで--- 2.acl.txtと同じフォルダに以下のバッチファイルを作成。 ---バッチファイルここから--- @echo フォルダ作成とACLの設定を行います。 @echo よろしいですか?(y/n) ※yキー以外で実行を中止。 @echo off Set /p ret= If %ret%==y goto MD_AND_CACLS goto END :MD_AND_CACLS For /F "eol=; tokens=1 delims=," %%i in (acl.txt) DO md %%i For /F "eol=; tokens=1,2 delims=," %%i in (acl.txt) DO cacls %%i /e /g %%j :END ---バッチファイルここまで--- バッチを実行するとacl.txtで指定したフォルダを作成し ACLを設定します。 その他の説明が長くなりそうなんで一旦ここで切ります。

norinori1
質問者

お礼

返信が遅れました。アドバイスありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A