Назад | Перейти на главную страницу

Как смоделировать среду WORM с Active Directory / NTFS

Предположим, в NTFS / Active Directory у меня есть два подключенных диска:

H:\
I:\

Пользователи могут редактировать файлы в H: \, но не в I: \. Я хочу, чтобы пользователи могли с помощью сценария перемещать свои файлы на диск I: \, если не произойдет перезапись. После копирования файлов сценарий удаляет разрешения на запись для скопированных файлов в I: \ таким образом, что пользователи больше не могут изменять разрешения обратно, а файлы в I: \ становятся в некотором смысле постоянными.

Как я могу настроить это безопасным способом?

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

Возможно, у вас может быть запланированная задача, работающая с разрешениями на запись на диске I, которая извлекает файлы. Возможно, они могли бы создать файл с названием «readytocopy.txt» или что-то в этом роде. Когда запланированная задача находит этот файл в каталоге пользователя, она копирует файлы (кроме readytocopy.txt).

Какую конкретную проблему вы пытаетесь решить?

После кучи проб и ошибок этот сценарий PowerShell, кажется, делает это:

$worm="C:\WORM"
mkdir -Force $worm
cd $worm

<#  https://serverfault.com/a/17869

SYSTEM - Full Control - Apply onto: This folder, subfolders, and files
Administrators - Full Control - Apply onto: This folder, subfolders, and files
Authenticated Users - Read - Apply onto: This folder, subfolders, and files
Authenticated Users - Create Files / Write Data - Apply onto: This folder and subfolders

#>

$acl  = Get-Acl $worm
$ace1 = New-Object Security.AccessControl.FileSystemAccessRule 'Users', `
        'CreateDirectories, CreateFiles, ListDirectory, Read', `
        'ContainerInherit, ObjectInherit', `
        'None', `
        'Allow'
$acl.AddAccessRule($ace1)
Set-Acl -AclObject $acl -Path $worm

$acl  = Get-Acl $worm
$ace1 = New-Object Security.AccessControl.FileSystemAccessRule 'Users', `
        'DeleteSubdirectoriesAndFiles,Delete', `
        'ContainerInherit, ObjectInherit', `
        'None', `
        'Deny'
$acl.AddAccessRule($ace1)
Set-Acl -AclObject $acl -Path $worm

$acl  = Get-Acl $worm
$ace1 = New-Object Security.AccessControl.FileSystemAccessRule 'Users', `
        'WriteData', `
        'ObjectInherit', `
        'InheritOnly', `
        'Deny'
$acl.AddAccessRule($ace1)
Set-Acl -AclObject $acl -Path $worm

Однако это не надежно, поскольку администратор может вернуть себе контроль с помощью:

icacls C:\WORM /T /Q /C /RESET

Я скажу, что если вам нужно решение промышленного уровня для соответствия требованиям SEC или что-то еще, вам, возможно, придется инвестировать в NetApp и SnapLock:

https://library.netapp.com/ecmdocs/ECMP1196889/html/GUID-7334EEB5-94E9-4500-BA40-681DEC572420.html

Это возможно с помощью комбинации сценария, запланированной задачи и разрешений NTFS.

Предполагая, что у вас нет подпапок и есть только файлы в одной папке, вот как этого добиться:

Группы

  • Создать группу пользователей
  • Создать группу администраторов

(используйте встроенные, если хотите)

Разрешения NTFS для папки назначения (I :)

  • Чтение, перечисление содержимого папки, выполнение, запись - только эта папка, группе пользователей
  • Полный доступ - эта папка, подпапка, файлы для группы администраторов

Запланированное задание

  • Скрипт, который удаляет все разрешения на запись из каждого файла, имеющего разрешения на запись.
  • Может быть пакетным скриптом с использованием icacls.exe, Powershell, vbscript, чего угодно
  • Установить задачу на ручной запуск
  • Требуется запускать от имени пользователя, который имеет полный контроль над папкой и файлами (группа администраторов)
  • Предоставьте группе пользователей соответствующие права для запуска запланированной задачи (может быть задачей на их локальном или удаленном компьютере)

Сценарий

  • Может быть практически любой язык (PS, вероятно, предпочтение)
  • Копирует файл (ы), только если они не существуют
  • После копирования с помощью Powershell вызовите Start-ScheduledTask или, если вы используете другой язык сценариев, используйте schtasks.exe для запуска запланированной задачи. Работает на локальных или удаленных машинах.

Наступит время, когда пользователь все еще будет доступен для записи, в зависимости от того, как закодированы сценарии, сколько файлов находится в папке и т. Д., Это займет всего миллисекунды.

Вы должны иметь возможность сделать это с обычными разрешениями NTFS. Я нашла эту статью. Ему около 10 лет, но он довольно ясно показывает этот пример:

https://technet.microsoft.com/en-us/magazine/2006.01.howitworksntfs.aspx

  1. Предоставьте разрешения на чтение и выполнение и запись только для этой папки (выбранной в списке «Применить к») пользователям, которым вы хотите иметь доступ к папке.
  2. Предоставьте разрешение на чтение и выполнение для вложенных папок и файлов только одним и тем же пользователям.
  3. Предоставьте право записи специальному пользователю-владельцу-создателю.

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