В моей среде у меня есть несколько проектов, которые включают запуск отчетов аудита NTFS ACL и различные действия по очистке ACL на нескольких файловых серверах. Есть две основные причины, по которым я не могу выполнять эти действия локально на серверах:
1) У меня нет локального доступа к серверам, поскольку они фактически принадлежат и администрируются другой компанией.
2) Они NAS-серверы SNAP которые работают под управлением модифицированной ОС Linux (называемой GuardianOS), поэтому даже если бы я мог получить локальный доступ, я не уверен в наличии инструментов для выполнения необходимых мне операций.
Из-за этого я закончил тем, что развернул свой собственный инструмент отчетов аудита ACL, который рекурсивно проходил бы вниз по файловой системе, начиная с указанного пути верхнего уровня, и выдавал HTML-отчет обо всех группах / пользователях, с которыми он столкнулся в списках ACL, как а также отображение изменений в разрешениях при спуске по дереву. Разрабатывая этот инструмент, я обнаружил, что накладные расходы сети были худшей частью выполнения этих операций, и благодаря многопоточности процесса я смог добиться значительно большей производительности.
Однако я все еще не могу найти хороший инструмент для модификации и очистки ACL. Ваши стандартные готовые инструменты (cacls, xcacls, Explorer) кажутся однопоточными и значительно ухудшают производительность при передаче по сети.
Вопрос
Существуют ли какие-либо более быстрые инструменты, чем Explorer или CACLS, для выполнения изменений NTFS ACL по сети?
Ваша среда звучит немного странно (NTFS работает в Linux?) - однако, если вы можете получить доступ и изменить ACL из другого окна Windows, то рассматривали ли вы возможность использования PowerShell? В нем есть простые командлеты get-acl и set-acl, которые сделают то, что вы хотите.
Вот статья MS о простых вещах: http://www.microsoft.com/technet/scriptcenter/csc/tips/ps/acl.mspx
Прелесть PowerShell в ее гибкости, поэтому, например, вы можете легко прочитать набор желаемых списков ACL, возможно, с некоторыми правилами, а затем заставить PowerShell пойти и сделать это за вас ...
Единственное, что будет - производительность - я, честно говоря, не уверен, будет ли это быстрее, чем запуск CACLS в CMD / пакетном файле или нет ...
Удачи!
Вы можете посмотреть SetACL (http://setacl.sourceforge.net/). Он доступен как элемент управления ActiveX, поэтому вы можете интегрировать его в свой собственный код в многопоточном режиме.
Это старый пост, но чего бы он ни стоил, я обнаружил, что powershell Set-ACL далеко не демон скорости, и что альтернативы сценариям VB часто быстрее.