web-dev-qa-db-ja.com

Windowsでコマンドラインを使用してディレクトリのアクセス許可をユーザーに付与する方法は?

Windowsのコマンドラインを使用して、ディレクトリ上のユーザーにアクセス許可(読み取り、書き込み、変更)を許可する方法を教えてください。

231
Amitabh

Vistaでは、caclsは非推奨です。これが最初のヘルプラインです。

C:\>cacls
NOTE: Cacls is now deprecated, please use Icacls.

Displays or modifies access control lists (ACLs) of files

代わりにicaclsを使うべきです。これは、JohnがD:\testフォルダとそのすべてのサブフォルダを完全に制御できるようにする方法です。

C:\>icacls "D:\test" /grant John:(OI)(CI)F /T

MSのドキュメントに従って

  • F =フルコントロール
  • CI = Container Inherit - このフラグは、下位のコンテナーがこのACEを継承することを示します。
  • OI = Object Inherit - このフラグは、下位ファイルがACEを継承することを示します。
  • /T =既存のファイルとサブフォルダに再帰的に適用します。 (OICIは新しいファイルとサブフォルダにのみ適用されます)。クレジット:@AlexSpenceによるコメント。

完全なドキュメントについては、引数なしで "icacls"を実行するか、Microsoftのドキュメント here および here を参照してください。

358
Călin Darie

ICACLSを使用することもできます。

Users group フルコントロール をフォルダに付与するには、次の手順を実行します。

>icacls "C:\MyFolder" /grant Users:F

C:\MyFolderのIISユーザーに Modify 権限を付与するには(IISが必要な場合は、特定のフォルダにR/Wファイルを書き込みます)。

>icacls "C:\MyFolder" /grant IIS_IUSRS:M

ICACLS /としますか? あなたはすべての利用可能なオプションを見ることができるでしょう。

69
Vin.X

caclsコマンドを使用してください。 こちら を参照してください。

CACLSファイル/ e/p {USERNAME}:{PERMISSION}

どこで、

/ p:新しい権限を設定します

/ e:アクセス許可を編集し、古いアクセス許可をそのまま使用します。つまり、ACLを置き換えずに編集します。

{USERNAME}:ユーザー名

{PERMISSION}:許可は次のいずれかです。

R - 読み取り

W - 書き込み

C - 変更(書き込み)

F - フルコントロール

たとえば、次のコマンドを使用してRocky Full(F)コントロールを許可します(Windowsコマンドプロンプトで入力します)。

C:> CACLSファイル/ e/p rocky:f

次のコマンドを入力して完全なヘルプを読みます。

C:> Cacls /?

18
Jorge Ferreira

コマンドプロンプトを開き、次のコマンドを実行します。

icacls "c:\somelocation\of\path" /q /c /t /grant Users:F

Fはフルアクセスを与えます。

/q /c /tはサブフォルダーに権限を適用します。

注:「管理者として実行」が役に立つ場合があります。

18

私は以下の方法を試してみて、それは私のために働く:
1。 cmd.exeを開く
2。 takeown /R /F *.*
3。 icacls * /T /grant [username]:(D)
4。 del *.* /S /Q

ファイルが自分のアクセスになり、それが "Delete"に割り当てられ、それからファイルとフォルダを削除できるようになります。

11
Ray Huang

破損したアクセス許可:フォルダとそのサブオブジェクトへのアクセスの回復

質問に答えて投稿された回答の大部分にはいくつかの利点がありますが、私見のいずれも完全な解決策を提供していません。以下は Windows 7 へのパーフェクトソリューションです - パーミッション設定が破損しているためにフォルダからロックアウトされている場合:

icacls "c:\folder" /remove:d /grant:r Everyone:(OI)(CI)F /T  

Windows 10 user/SIDは/remove:dオプションの後に指定する必要があります。

icacls "c:\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T  


メモ

  1. 指定したディレクトリにコマンドが適用されます。

  2. ユーザー「Everyone」を指定すると、 every 考えられるユーザーが含まれるため、最も広い権限が設定されます。

  3. オプション "/ remove:d"は、明示的なALLOW設定を上書きするため、存在する可能性のある明示的なDENY設定をすべて削除します。新しいALLOW設定を作成するために必要な準備です。 DENY設定が存在しないことが多いため、これは予防策にすぎませんが、申し訳ありませんが安全です。

  4. オプション "/ grant"は、新しいALLOW設定、つまり存在する可能性があるすべての明示的なALLOW設定を置き換える( ":r")明示的な許可を作成します。

  5. 「F」パラメータ(すなわち作成された許可)はこれを完全制御の許可とする。

  6. "/ T"パラメータは再帰を追加し、これらの変更を指定されたディレクトリ(すなわちファイルとサブフォルダ)内のすべての current サブオブジェクトとフォルダ自体に適用します。

  7. "(OI)"と "(CI)"パラメータも再帰を追加し、その後に作成されたサブオブジェクトにこれらの変更を適用します。
    .

補遺(2019/02/10) -

Windows 10のコマンドライン above が今日私に親切に提案されたので、ここにあります。私はWindows 10でそれをテストすることができませんでした、しかし、あなたが持っているならばそれを試してみてください(そしてあなたは コメントを投稿してください below)。

変更は最初のステップとしてDENY設定を削除することだけに関係します。 DENY設定がまったく存在しない可能性があるので、そのオプションは効果がないかもしれません。 Windows 7では、 /remove:d の後にユーザーを指定する必要はありませんが、私はそれについては間違っているかもしれません。

5
Ed999

私はしばらくこれに苦しみました、そしてこのスレッドの答えを組み合わせることだけが私のために働きました(Windows 10上で):
1。 cmdまたはPowerShellを開き、ファイルが保存されているフォルダに移動します。
2。 takeown/R/F
3。 icacls */T /助成金:F

がんばろう!

4
Daniil Shevelev

念のために、このページにつまずく人が他にいる場合は、さまざまな権限を1つのコマンドにまとめたい場合は、次のようにします。

icacls "c:\TestFolder" /grant:r Test_User:(OI)(CI)(RC,RD,RX)

さまざまな権限のcsv文字列をメモします。

3
Ads

アカウントをプロビジョニングおよび作成するためのExcelのvbaスクリプト付き。管理者のxアカウントを使用して、このツールによって作成されたフォルダとサブフォルダに、新しいユーザーに完全な権限を付与する必要がありました。

caclsは次のようになりました。cacls\FileServer\Users \ユーザー名/ e/g Domain\Username:C

私はこのコードをWindows 7以降に移行する必要がありました。私の解決策は次のようになりました。

icacls\FileServer\Users \ユーザー名/ grant:rドメイン\ユーザー名:(OI)(CI)F/t

/ grant:r - 指定したユーザーにアクセス権を与えます。許可は以前に与えられた明示的な許可を置き換えます。 :rがないと、以前に与えられた明示的なパーミッションにパーミッションが追加されます。

(OI)(CI) - このフォルダー、サブフォルダー、およびファイル。

F - フルアクセス

/ t - すべてのサブフォルダをたどってファイル/ディレクトリを照合します。

これが私に与えたものは、ユーザーがそのフォルダを見ることだけができ、彼らがファイルを読み書きできるサブフォルダを作成することができるこのサーバ上のフォルダでした。新しいフォルダを作成するだけでなく。

2
Gus

XCACLS.VBSはACL情報を変更/編集する非常に強力なスクリプトです。 c:\ windows\system32\cscript.exe xcacls.vbs helpはすべてのスイッチとオプションを返します。

公式ディストリビューションは マイクロソフトサポートページ から入手できます。

1
g222

一括フォルダの作成とアクセス許可の付与は、以下のPowerShellスクリプトを使用して行います。

Import-Csv "D:\ Scripts\foldernames.csv" | foreach-object {$ username = $ _。フォルダ名

# foldername is the header of csv file

$domain = “example.com”

$folder= "D:\Users"

$domainusername = $domain+“\”+$username

New-Item $folder\$username –Type Directory

Get-Acl $folder\$username  

$acl = Get-Acl $folder\$username

$acl.SetAccessRuleProtection($True, $False)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("SYSTEM","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$domain\Domain Admins","Read", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($domainusername,"Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)

Set-Acl $folder\$username $acl

}

注意:csvファイルに同じドメインユーザー名を作成する必要があります。そうしないと、権限の問題が発生します。

1
user2934980

私は管理者です、そして、いくつかのスクリプトはディレクトリの中のすべてのファイルとサブフォルダの私の名前に "拒否"許可を置きました。 icacls "D:\test" /grant John:(OI)(CI)F /Tコマンドを実行しても、このリストの私の名前から「Deny」権限が削除されていないように見えたため、うまくいきませんでした。

私にとってうまくいった唯一のことは、icacls "D:\test" /reset /Tコマンドですべての許可をリセットすることです。

0
B. Zoli
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide
0
Yashwanth

優秀なポイントCălinDarie

Caclを使用するためのスクリプトがたくさんありました。ルートマウントボリュームの例を変更するスクリプトが見つからなかったため、icaclsに移動しました。例:d:\ datafolder。私はついに以下のスクリプトを作成しました。それは一時的なドライブとしてボリュームをマウントしてからsecを適用します。それをアンマウントします。それは私があなたがルートマウントセキュリティを更新することができることを私が見つけた唯一の方法です。

1は、フォルダmount GUIDを一時ファイルに取得し、GUIDを読み取り、ボリュームを一時ドライブXとしてマウントします。秒を適用して変更をログに記録し、ボリュームをXからのみマウント解除します:ドライブはマウントされたフォルダが変更または適用された秒以外中断されないようにドライブします。

これが私のスクリプトのサンプルです。

**mountvol "d:\%1" /L >tempDrive.temp && FOR /f "tokens=*" %%I IN (tempDrive.temp) DO mountvol X: %%I 
D:\tools\security\icacls.exe  %~2 /grant domain\group:(OI)(CI)F /T /C >>%~1LUNsec-%TDWEEK%-%TMONTH%-%TDAY%-%TYEAR%-%THOUR%-%TMINUTE%-%TAM%.txt
if exist x:\*.* mountvol X: /d**
0
HandyMannyHE