Windowsでコマンドラインを使用してディレクトリの権限をユーザーに付与する方法


277

Windowsコマンドラインを使用して、ディレクトリのユーザーに権限(読み取り、書き込み、変更)を付与するにはどうすればよいですか?

回答:


420

Vista以降、caclsは非推奨です。最初の2行のヘルプ行は次のとおりです。

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

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


4
フェリペ:(OI)および(CI)パラメーターはこれを再帰的にします
Chris Miller

22
WindowsエクスプローラーのUIでアクセス許可を変更しようとすると、アクセス拒否の問題が発生しました。末尾に/ Tフラグを追加すると、既存のオブジェクトが置き換えられ、問題を解決できました。C:> icacls "D:\ test" / grant John:(OI)(CI)F / T
Alex Spence

9
@AlexSpenceグレートポイント!/ Tは、の権限更新するのに必要とされている既存のファイルとフォルダを。(OI)と(CI)は、将来作成されるファイルとフォルダーにのみ適用されます。
Jesse

5
* nixの世界から来て、「chown / chmod」を使用してCLI経由でアクセス権を設定し、アクセス権を設定するため、このスレッドは非常に役立ちました。
bgarlock 2015年

5
これをWindows 10のPowershellで実行すると、「OIが認識されません」というエラーが表示されます。解決策:user + perms引数を引用符で囲みます。次に例を示しますC:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
JDS

78

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

Usersグループにフォルダへのフルコントロールを付与するには:

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

IISユーザーに変更アクセス許可を付与するにC:\MyFolder(IISが特定のフォルダーにファイルをR / Wする必要がある場合):

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

あなたがICACLS /を行う場合/?利用可能なすべてのオプションを確認できます。


そしてcacls、それがなくなったので、icaclsを使用するのはさらに理由です。
Ian Boyd

2
フルコントロールを追加しても、/grant Users:(OI)(CI)F使用するまでは機能しませんでした
JanZahradník'15

Users他のものと交換する必要がありますか?によるicacls "C:\MyFolder" /grant Users:F
iori

現在のユーザーが「ユーザー」という名前のユーザーグループのメンバーである場合(Windows 7では通常そうです)、そのグループに権限を付与すると、現在のユーザーのアクセス権に影響します。その他の場合は、Usersという名前を現在のユーザーの実際の名前(Johnなど)に置き換えます。つまり、/ grant John:(OI)(CI)F
Ed999

24

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

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

F フルアクセスを提供します。

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

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


「管理者として実行」が必要であり、単に最良の答えです!
Jeb50

20

caclsコマンドを使用します。こちらの情報をご覧ください

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

どこ、

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

/ e:パーミッションを編集し、古いパーミッションをそのままにします。つまり、ACLを置き換えるのではなく編集します。

{USERNAME}:ユーザーの名前

{権限}:権限は次のいずれかです。

R-読み取り

W-書き込み

C-変更(書き込み)

F-フルコントロール

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

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

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

C:> cacls /?


正解です。注意すべき唯一のことは、ファイルは、アクセス許可を変更する実際のファイルであることです。[files]または{files}のほうが適切な説明かもしれません。
コナー・ロス

14
Caclsは非推奨です。
Hardik Thaker 2013

cacls関連性がある; それはまだ利用可能ですWindows 10。Microsoft cmd.exeもPowershellを支持して非難するでしょう。

1
@ Chinggis6「まだ利用可能」であるということは、何かを使用することをお勧めしたり、他の人に使用を勧めたりすることを意味するものではありません。また、cmd.exeは廃止されておらず、廃止される可能性も低いためicacls、まったく反対の点ではまったくありません。
underscore_d 2017年

1
知っている。使用または推奨するのが良いかどうかは述べていませんcacls.exe。また、cmd.exeすでに廃止されていることについても触れませんでした。下位互換性やその他の理由がある場合でも、ユーザーは少なくとも上位バージョンでの使用可能性を認識しておく必要があると思います。

12

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

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


7

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

質問への回答で投稿された回答のほとんどにはいくつかのメリットがありますが、IMHOのどれも完全なソリューションを提供しません。権限の設定が破損しているためにフォルダーからロックアウトされている場合、次の(おそらく)Windows 7の完璧なソリューションです。

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

以下のためのWindows 10ユーザー/ SIDは、後に指定する必要があります/remove:dオプション:

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


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

  2. ユーザー「Everyone」を指定すると、可能なすべてのユーザーが含まれるため、可能な限り広い権限が設定されます。

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

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

  5. 「F」パラメーター(つまり、作成された許可)は、これに完全な制御権を付与します。

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

  7. 「(OI)」および「(CI)」パラメーターも再帰を追加し、これらの変更を後で作成されるサブオブジェクトに適用します。

補遺(2019/02/10) -

Windowsの10のコマンドライン上では、親切ので、ここでそれは、今日の私に示唆されました。Windows 10でテストすることはできませんが、テストしている場合は試してみてください(次にコメント投稿してください)。

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

補遺(2019/11/21) -

コマンドを言語に依存しないようにするために、ユーザーastarkは、Everyoneを* S-1-1-0という用語に置き換えることをお勧めします。英語版のWindowsしかインストールしていないので、この提案をテストすることはできませんが、それは妥当なようです。


EXPLICITパーミッションはオーバーライドされるため、INHERITEDパーミッションのプロビジョニングは必要ありません。したがって、新しい明示的な設定を作成すると、存在する可能性のある継承された設定がすべて無効になります(新しい明示的な設定に再帰が含まれるため)。
Ed999 2018年

Invalid parameter "/remove:d"
DFSFOT 2018年

Windows 7でicacls.exeを実行しています(実行のみ可能)。Windows8または10に存在する可能性のある変更についてはコメントもテストもできません。Windows7 64ビットでテストしたところ、削除オプションはDENY設定を削除するのに効果的です。これを使用すると、拒否設定が存在しない場合はエラーメッセージが表示される可能性がありますが、そのような設定がない場合は、とにかく削除できません。
Ed999、18年

コマンドラインを元の回答(ディレクトリパス用に保存)に正確に再現しないと、コマンドが失敗します。特に、私の回答に含まれていない引用符は追加しないでください。(たとえば)/ remove:dオプションを引用符で囲むと、コマンドはもちろん失敗します。
Ed999、18年

1
@DFSFOTまあ、私は同情します。しかし、私はWindows 7を使用しています。神の恵みにより、Windows 10を使用することはありません。Ubuntuに移行したいのです。私は疑うこと/削除を:グラムは、おそらく許可し、エントリ(手段のみを認め、この文脈で「許可された」と、それは任意の拒否エントリを処理しないようにという可能性といえ)をDENYの両方、すべての権限を削除します。一方、/ remove:dはおそらくDENYエントリのみを削除し、ALLOWエントリは変更されません。しかし、もちろん私には確信が持てません。
Ed999 2018年

5

私はしばらくの間、これで苦労してのみ、このスレッドで答えを組み合わせること(Windowsの10に)私の仕事:
1.に、cmdまたはPowerShellとファイルをフォルダに移動
2. takeown / R / F
3. icacls * / T / grant dan:F

幸運を!


3

このページでつまずく人が他にいる場合に備えて、1つのコマンドでさまざまなアクセス許可をまとめたい場合は、次のように使用しました。

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

さまざまな権限のcsv文字列に注意してください。


どうもありがとうございました。RXとRDの許可を設定するのに役立ちました。インターネットで示されているほとんどの例では、/ F完全なアクセス許可で説明されていました。
Mani

2

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

caclsは次のようになります。cacls \ FileServer \ Users \ Username / e / g Domain \ Username:C

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

icacls \ FileServer \ Users \ Username / grant:r Domain \ Username:(OI)(CI)F / t

/ grant:r-指定したユーザーにアクセス権を付与します。アクセス許可は、以前に付与された明示的なアクセス許可を置き換えます。:rがない場合、以前に付与された明示的な権限に権限が追加されます

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

F-フルアクセス

/ t-ファイル/ディレクトリに一致するようにすべてのサブフォルダーをトラバースします。

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



1

フォルダーの一括作成と権限の付与は、以下のPowerShellスクリプトを使用することで機能します。

Import-Csv "D:\Scripts\foldernames.csv" | foreach-object {
    $username = $_.foldername 

    # 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ファイルに同じドメインユーザー名を作成する必要があります。そうしないと、権限の問題が発生します


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

2
これらはファイルの属性(読み取り専用、アーカイブ、システム、非表示)であり、権限ではなく、ユーザーアカウントにリンクされています。
ロビンベネット

0

優れたポイントカリンダリー

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

1は一時ファイルにフォルダーマウント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

私は管理者であり、スクリプトによっては、ディレクトリ内のすべてのファイルとサブフォルダで自分の名前に "拒否"アクセス許可が設定されています。icacls "D:\test" /grant John:(OI)(CI)F /Tこのリストから私の名前から「拒否」権を削除していないように見えるため、コマンドの実行は機能しませんでした。

私のために働いた唯一のことは、icacls "D:\test" /reset /Tコマンドですべての権限をリセットすることです。


'' / remove:d ''を指定して、存在する可能性のある明示的なDENY設定を削除することにより、resetコマンドを使用せずに問題を解決できます-私の完全な解決策(上記)を参照してください。
Ed999 '19年

-1

"c:>"および ">"なしで動作するWindows 10

例えば:

F = Full Control
/e : Edit permission and kept old permission
/p : Set new permission

cacls "ファイルまたはフォルダのパス" / e / pユーザー名:F

(これにより、エラー2502および2503も修正されます)

cacls "C:\ Windows \ Temp" / e / pユーザー名:F


-5

これは私のために働いたものです:

  1. アクセスを拒否するフォルダを手動で開きます。

  2. そのフォルダー内の実行可能ファイル/アプリケーションファイルを選択します。

  3. それを右クリックしてProperties->に移動しますCompatibility

  4. 今を見てPrivilege Level、それを確認してくださいRun As Administrator

  5. をクリックしChange Settings for all usersます。

これで問題は解決しました。


問題は、コマンドラインを介して上記を実行することです。あなたの提案はうまくいくかもしれませんが、セットアップする必要があるサーバーへのターミナルアクセス(ssh)しか持っていない場合は適用されないため、cmdスクリプトを使用する必要があります
Ivaylo Slavov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.