質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

3回答

2825閲覧

バッチファイルで特定のユーザだけアクセスが出来るフォルダを作成したい

dai3922

総合スコア34

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2018/11/06 08:24

編集2018/11/08 06:44

Administratorsグループに所属するユーザからもアクセスが出来ないフォルダを
バッチファイルで作成したいと考えています。

=手順=
0. 社内のクライアントPCに設定ファイルなどを格納するフォルダ(以下、「設定フォルダ」)をローカルの任意の場所に作成。
0. 設定フォルダへは、タスクスケジューラに登録したユーザA(例:admintest)でログインさせ、プログラム実行時に使用する設定ファイルなどを参照させます。

⇒上記2点はリモート実行で可能だと確認。

=条件=
0. 各クライアントPCでは使用者名などのユーザを各々で使用しており、各ユーザは各クライアントPCでAdministratorsグループに所属しています。
0. 設定フォルダへアクセスが可能なユーザA(例:admintest)はすべてのクライアントPCで共通のユーザ名、パスです。
0. 各使用者が各ユーザにてクライアントPCにログインしている時、設定フォルダ内容の変更が行われるといけないので、アクセスはブロックさせたいと考えています。(タスクスケジューラからの実行のみに限定)

⇒【問題】上記②につきまして、各ユーザはAdministratorsグループに所属していることから、どの様に設定すれば良いか苦慮しております。

各クライアントPCに実行させるバッチファイルを下記の様に作成しましたが、
通常使用しているユーザで設定フォルダに入ることが出来てしまいました。

@Echo off rem カレントディレクトリを移動 cd /d %~dp0 rem ユーザ作成 NET USER admintest pass /add rem ※念の為administratorsに参加させていますが、設定フォルダにアクセス・プログラムを実行させるためだけの用途のユーザです。 NET localgroup administrators admintest /add rem 設定フォルダ作成 mkdir c:\Test_directory rem アクセス権の設定 icacls c:\Test_directory /grant admintest:(OI)(CI)F rem 本バッチを終了 exit /B

以上です。
説明がわかりにくく申し訳ありませんが、上記お教え頂けますでしょうか。

【2018/11/08 14:29追記】
以下のようにリスト(テキストファイル)に記載してあるユーザ名を指定し、そのユーザ名では設定フォルダへのアクセスができなくなることを確認しました。

rem リストにあるユーザ名からのアクセスを拒否 FOR /F "tokens=1-7 skip=1 delims=," %%i IN (%master_userlist%) DO icacls c:\Test_directory /deny %%i:(RD,WD)

しかし問題点として、各クライアントPCで新規ユーザを作成された場合、
リストに存在しないユーザ名の為、設定フォルダへのアクセスが出来てしまいます。
各クライアントPCにある各ユーザ、今回アクセスさせたいadmintestはいずれもAdministratorsグループに所属していますが、「admintestのみ設定フォルダへアクセス可能、それ以外のユーザはアクセス不可」と設定することは可能でしょうか?
また、下記も試しましたが、EVERYONEの設定の方が強いらしく、admintestが設定フォルダにアクセス出来なくなってしまいます。

rem everyoneのアクセス権を拒否 icacls c:\Test_directory /deny everyone:(RD,WD) rem admintestのみアクセス権拒否を解除 icacls c:\Test_directory /remove:d admintest

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

以下の方法で実現ができました。

1.「admintest1」と「admintest2」だけアクセスできるようにします。
2.上記以外のユーザもAdministrator権限を持っているため、Administratorグループを拒否すると、例え上記ユーザを個別に/grantしていても、拒否の方が優先されました。
3.そのため、上記以外のユーザも全て含めた「ユーザリスト.txt」に書き出し、それらユーザを個別に拒否する方法に致しました。(他の処理でも使用することからユーザリストを一元管理したかったため、上記ユーザも含めています)
4.遅延環境変数展開+if分で上記ユーザを除外して/denyします。

rem 遅延環境変数の展開を開始 setlocal enabledelayedexpansion rem アクセス権拒否設定 FOR /F "tokens=1-7 skip=1 delims=," %%i IN (ユーザリスト.txt) DO ( set skip_notskip=notskip if %%i==admintest1 set skip_notskip=skip if %%i==admintest2 set skip_notskip=skip if not !skip_notskip!==skip icacls c:\Test_directory /deny %%i:(RD,WD) ) rem 遅延環境変数の展開を終了 endlocal

以上です。
ご協力頂きましたお二方、ありがとうございました。

投稿2019/02/22 09:35

編集2019/02/22 09:38
dai3922

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ただフォルダ作成しただけでは「Administrators:読み取り」「Users:読み取り」許可があるからでしょう。/grantにオプション付与してはいかがでしょうか。

以下、icacls /? より抜粋

ICACLS <名前> [/grant[:r] <SID>:perm[...]] [/deny <SID>:perm [...]] [/remove[:g|:d]] <SID>[...]] [/T] [/C] [/L] [/Q] [/setintegritylevel Level:policy[...]] /grant[:r] <SID>:perm は、指定されたユーザー アクセス権を付与します。 :r を指定すると、以前に付与されたすべての明示的なアクセス許可は新しい アクセス許可に置き換えられます。 :r を指定しない場合、新しいアクセス許可は以前に付与された明示的な アクセス許可に追加されます。

※windows7の結果なので、windows10で同じであるかわかりません。ご自身のヘルプを確認ください

投稿2018/11/06 08:49

yukky1201

総合スコア2751

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dai3922

2018/11/07 23:52

ご回答頂きありがとうございます。 /grantだけでおっしゃる通りの状況でした。 他のオプションを確認してみます。
guest

0

/grantだけでなく、/deny/removeも要るのでは?

投稿2018/11/06 08:31

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dai3922

2018/11/07 23:38

いつもご回答頂きありがとうございます。 許可設定だけしていた自分の頭が単純で涙が出そうです。 試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問