2013-08-21 4 views
0

Предположим, у меня есть каталог myDir дерево со множеством вложенных подкаталогов. Я предоставляю полный доступ к этому каталогу со всеми его файлами и вложенными подкаталогами до myUser с командой: Как исключить подкаталог из обработки cacls в пакетном файле

cacls myDir /T /E /G myUser:F

Пока что так хорошо.

Теперь у меня есть подкаталог myDir/A/B/C, который я хотел бы исключить из обработки cacls. То есть, я не хотел бы предоставлять myUser доступ к этому подкаталогу.

Что вы предложите?

Самый простой способ - просто переместить эту папку в другое место перед запуском cacls и переместить ее обратно после этого. Имеет ли это смысл?

+0

ли вы пробовали это? – captcha

+0

Другим решением является добавление второй команды, которая удаляет доступ «myuser» из папки. – foxidrive

ответ

1

Вам необходимо сгенерировать список файлов для обработки и исключить те, которые вы не хотите, поскольку CACLS не разрешает фильтрацию.

Здесь я использую «dir» для создания списка файлов для обработки. Вы также можете использовать «forfiles».

(Вы можете сделать скрипт более компактным с помощью труб, но вместо этого я использовал временные файлы, чтобы сделать его более понятным).

@echo off 
setlocal 

set TMPFILE=%TEMP%\dirs.txt 
set TMPFILE2=%TEMP%\dirs2.txt 

@rem Generate the list of dir names to be processed 
dir "%~1" /ad /s /b /p > %TMPFILE% 

@rem Filter out the unwanted ones 
findstr /i /v /C:"myDir\A\B\C" < %TMPFILE% > %TMPFILE2% 

@rem And execute a command on each 
for /F "delims=;" %%x in (%TMPFILE2%) do call :dostuff "%%x" 

goto :EOF 

:dostuff 
    @rem do the directory itself 
    cacls "%~1\ /E /G myUser:F 

    @rem do the files 
    cacls "%~1\*" /E /G myUser:F 

    goto :EOF 
3

Унаследованные разрешения папки отображаются в виде:

OI - наследует Object - Эта папка и файлы. (отсутствие наследования для вложенных папок)
CI - Наследование контейнера - Эта папка и подпапки.
IO - унаследуют только - АСЕ не применяется к текущему файлу/директории

Они могут быть объединены в folllows:
(OI) (CI) Эта папка, вложенные папки и файлы.
(OI) (CI) (IO) Только подпапки и файлы.
(CI) (IO) Только подпапки.
(OI) (IO) Только для файлов.

Так BUILTIN \ Администраторы: (OI) (CI) F означает, что оба файла и подкаталоги наследуют 'F' (FullControl)
аналогично (CI) R означает Директории унаследует 'R' (только для чтения папки = разрешение List)

Чтобы действительно изменить наследование папки/директории использовать iCACLS /grant или iCACLs /deny

+0

Вопрос был о том, как сделать cacls не chane разрешениями определенной папки при обработке всего дерева. Разрешения устанавливаются для каждого объекта, а наследование не является автоматическим. Просто настройка разрешения для наследования не изменяет права доступа к существующим дочерним элементам - в основном это действует как шаблон ACL по умолчанию, который будет использоваться при создании новых детей. – joeking