Как удалить группу «Пользователи» из папки каждого пользователя в Windows 7/2008?

431
eng3

Я вынужден добавить пользователя, который может иметь доступ только к одной папке. Поэтому мне нужно удалить разрешения пользователей и пользователей домена из всех моих файлов. Прямо сейчас каждый пользователь может видеть папку друг друга. Все папки «Пользователи» имеют разрешения на чтение для встроенной группы «DOMAIN \ Users», я бы хотел удалить это. Я попытался запустить в папке пользователей:

for /d %G in (*) do icacls %G /remove Users /t" 

и что-то делает со всеми файлами и папками, но когда я возвращаюсь и проверяю, разрешение «Пользователи» все еще там.

1
`icacls /?` говорит синтаксис `… / remove [: [g | d]] Sid`. Вам нужно использовать _SID_. Чтобы получить _SID_ для локальной группы `BUILTIN \ Users`, выполните синтаксический анализ` whoami / groups / FO CSV` или `wmic path win32_group, где" Caption = '% ComputerName% \\ Users' "get Sid`. Google для _Get SID от AD (Active Directory) пользователя / группы_, если вам это нужно. JosefZ 5 лет назад 0
@JosefZ: В нем также есть примечание, что «SID могут быть заданы в числовой форме или дружественном имени» grawity 5 лет назад 0

1 ответ на вопрос

1
JosefZ

По-видимому, /removeне влияет на унаследованные ACL:

C:\Windows\System32> pushd d:\bat\files2  d:\bat\files2> for /d %G in (*) do @icacls %G /T | findstr /I "folder \\Users" folder BUILTIN\Administrators:(F) BUILTIN\Users:(I)(RX) BUILTIN\Users:(I)(OI)(CI)(IO)(GR,GE) folder\xxx.csv BUILTIN\Administrators:(F) BUILTIN\Users:(I)(RX)  d:\bat\files2> for /d %G in (*) do @icacls %G /remove Users /T processed file: folder processed file: folder\xxx.csv Successfully processed 2 files; Failed processing 0 files  d:\bat\files2> for /d %G in (*) do @icacls %G /T | findstr /I "folder \\Users" folder BUILTIN\Administrators:(F) BUILTIN\Users:(I)(RX) BUILTIN\Users:(I)(OI)(CI)(IO)(GR,GE) folder\xxx.csv BUILTIN\Administrators:(F) BUILTIN\Users:(I)(RX) 

Нужно отключить наследование и сначала скопировать ACE :

d:\bat\files2> for /d %G in (*) do @(icacls %G /inheritance:d /T&&icacls %G /remove Users /T) processed file: folder processed file: folder\xxx.csv Successfully processed 2 files; Failed processing 0 files processed file: folder processed file: folder\xxx.csv Successfully processed 2 files; Failed processing 0 files  d:\bat\files2> for /d %G in (*) do @icacls %G /T | findstr /I "folder \\Users" folder BUILTIN\Administrators:(F) folder\xxx.csv BUILTIN\Administrators:(F) 

Обратите внимание на использование &&оператора в следующем однострочнике

for /d %G in (*) do @(icacls %G /inheritance:d /T&&icacls %G /remove Users /T) 

вместо

for /d %G in (*) do @icacls %G /inheritance:d /T for /d %G in (*) do @icacls %G /remove Users /T 

Пример применяется к следующей структуре файла:

d:\bat\files2> tree . /f  D:\BAT\FILES2 │ SampleInput.eml │ └───folder xxx.csv