Сменить владельца папки ntfs

Обновлено: 05.07.2024

Решено: нужно сменить владельца файлов на ntfs разделе

Модератор: SLEDopit

Решено: нужно сменить владельца файлов на ntfs разделе

Господа, столкнулся с проблемой. Требуется поменять привилегии на другого пользователя, состоящего в группах users и root на директорию /windows/C .При попытке переставить указатель с Доступ к файлам на Создание и удаление файлов, указатель все равно прыгает обратно на Доступ к файлам. И никакой возможности изменить ничего не получается, ни доступ ни группу. Как быть?

я так понимаю, вы это делаете все в графике?
скриншот не затруднит приложить?
/windows/C находится на виндовом диске? там ntfs?

откройте любой эмулятор терминала и скопируйте сюда вывод команд:
mount
ls -la /windows/
getfacl /windows/C

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

Да, раздел виндосовский, ntfs. Драйвера на запись уже ставил не могу поменять только права.

если я правильно понимаю, что вы хотите изменить владельца всего, что есть в /windows/C на другово пользователя, то это лучше делать с помощью опций команды mount:

я, правда, за отсутствием ntfs не могу это проверить, но, наврено должно работать.

Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит. А каким образом с помощью команды mount я могу это сделать? И даже странно, почему я не могу сменить пользователя/группу и права в ручную из под рута. И даже странно, почему я не могу сменить пользователя/группу и права в ручную из под рута.
Потому что ntfs не поддерживает unix атрибуты доступа. Так что права назначаются через mount на всю точку монтирования И даже странно, почему я не могу сменить пользователя/группу и права в ручную из под рута.
Потому что ntfs не поддерживает unix атрибуты доступа. Так что права назначаются через mount на всю точку монтирования


Не мог бы написать полностью команду как это сделать? Спасибо.

Не мог бы написать полностью команду как это сделать? Спасибо.
man mount && man fstab && echo "/путь/к/устройству /windows/C ntfs-3g rw,uid=Inpush,locale=utf8 0 0"
Как то так. Не мог бы написать полностью команду как это сделать? Спасибо.
man mount && man fstab && echo "/путь/к/устройству /windows/C ntfs-3g rw,uid=Inpush,locale=utf8 0 0"
Как то так.


После ввода такой команды вылезает Linux Programmer Manual, вот с таким кодом:

NAME
mount - mount a file system

SYNOPSIS
mount [-lhV]

mount -a [-fFnrsvw] [-t vfstype] [-O optlist]
mount [-fnrsvw] [-o options [. ]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir

DESCRIPTION
All files accessible in a Unix system are arranged in one big tree, the
file hierarchy, rooted at /. These files can be spread out over sev‐
eral devices. The mount command serves to attach the file system found
on some device to the big file tree. Conversely, the umount(8) command
will detach it again.

The standard form of the mount command, is
mount -t type device dir
This tells the kernel to attach the file system found on device (which
is of type type) at the directory dir. The previous contents (if any)
and owner and mode of dir become invisible, and as long as this file
system remains mounted, the pathname dir refers to the root of the file
system on device.

Three forms of invocation do not actually mount anything:
mount -h
prints a help message;
mount -V
prints a version string; and just
mount [-l] [-t type]
lists all mounted file systems (of type type). The option -l adds the
(ext2, ext3 and XFS) labels in this listing. See below.

Since Linux 2.4.0 it is possible to remount part of the file hierarchy
somewhere else. The call is
mount --bind olddir newdir
After this call the same contents is accessible in two places. One can
Manual page mount(8) line 1

date

17.01.2020

directory

PowerShell, Windows 10, Windows Server 2016

comments

комментариев 13

Для управления доступом к файлам и папкам в Windows на каждый объект файловой системы NTFS (каталог или файл) назначается специальный ACL (Access Control List, список контроля доступа). В ACL объекта задаются доступные операции (разрешения), которые может совершать с этим объектом пользователь и/или группы . В большинстве случаев администраторы Window для управления NFTS разрешениями на файлы и папки используют графический интерфейс File Explorer (свойства папки/файла -> вкладка Security/Безопасность) или консольную утилиту icacls. В этой статье мы рассмотрим способы управления разрешениями на объекты файловой системы NTFS из PowerShell. Вы можете использовать эти команды в скриптах и для автоматизации управлением NTFS разрешениями на файловых серверах Windows.

упраление ntfs разрешениями на папки из проводника Windows

Встроенные командлеты для управления ACL в NTFS: Get-Acl и Set-Acl

В PowerShell v5 (Windows 10 / Windows Server 2016) для управления ACL имеется два отдельных встроенных командлета (входят в модуль Microsoft.PowerShell.Security):

Мы не будем подробно останавливаться на этих встроенных командлетах, т.к. их функционал в большинстве случае недостаточен для управления NTFS разрешениями в реальных задачах. Рассмотрим лишь несколько типовых примеров их использования.

Выведем текущего владельца папки (файла) и список назначенных NTFS разрешений:

get-acl C:\Drivers\ |fl

командлет get-acl из модуля Microsoft.PowerShell.Security

Path : Microsoft.PowerShell.Core\FileSystem::C:\Drivers\
Owner : WORKSTAT1\root

Group : WORKSTAT1\Отсутствует
Access : NT AUTHORITY\Authenticated Users Allow Modify, Synchronize
NT AUTHORITY\SYSTEM Allow FullControl
BUILTIN\Администраторы Allow FullControl
BUILTIN\Пользователи Allow ReadAndExecute, Synchronize
WORKSTAT1\root Allow Modify, Synchronize
Audit :
Sddl : O:S-1-5-21-3650440056-3766451173-3310994491-1001G:S-1-5-21-3650440056-766451173-3310994491-513D:PAI(A;OICI;0x 1301bf;;;AU)(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;0x1200a9;;;BU)(A;OICI;0x1301bf;;;S-1-5-21-3650440056-37664 51173-3310994491-1001) Как вы видите, текущие разрешения также представлены в виде SDDL строки – мы вкратце рассматривали этот формат описания доступа в статье Управление правами на службы Windows.

Можно вывести только списки NTFS разрешений в более понятном формате:

get-acl - узнать ntfs разрешения на каталог или папку из powershell

С помощью следящей команды можно скопировать NTFS разрешения с одной папки и применить их на другую:

Get-Acl C:\Drivers | Set-Acl C:\Distr

Для выполнения этой операции учетная запись должна быть владельцем ресурса (Owner) и обладать правами Take Ownership.

Главная проблема при использовании Set-ACL – командлет всегда пытается сменить владельца ресурса, даже если вы просто хотите изменить NTFS разрешения. В результате, чтобы добавить права на объект нужно использовать такую конструкцию:

$path = "c:\drivers"
$user = "WORKSTAT1\user1"
$Rights = "Read, ReadAndExecute, ListDirectory"
$InheritSettings = "Containerinherit, ObjectInherit"
$PropogationSettings = "None"
$RuleType = "Allow"
$acl = Get-Acl $path
$perm = $user, $Rights, $InheritSettings, $PropogationSettings, $RuleType
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $perm
$acl.SetAccessRule($rule)
$acl | Set-Acl -Path $path

Чтобы убрать NTFS доступ к папке для пользователя или группы:
$path = "c:\drivers"
$acl = Get-Acl $path
$rules = $acl.Access | where IsInherited -eq $false
$targetrule = $rules | where IdentityReference -eq "WORKSTAT1\user1"
$acl.RemoveAccessRule($targetrule)
$acl | Set-Acl -Path $path

Чтобы отключить наследование для папки из PowerShell:

Также с помощью Get-acl и Set-Acl можно управлять параметрами NTFS-аудита объектов (см. статью Кто удалил файл на сервере?), либо информацией о текущих разрешениях на OU в AD.

Используем модуль NTFSSecurity для управления разрешениями из PowerShell

Как я уже говорил, встроенный модуль для управления ACL на объекты в PowerShell не самый удобный. Для управления NTFS правами на файлы и папки в Windows лучше использовать отдельный модуль их галереи PowerShell – NTFSSecurity. Последнюю версию модуля NTFSSecurity (4.2.4 на данный момент) можно установить командой Install-Module -Name NTFSSecurity , или скачать вручную (линк). При ручной установке достаточно распаковать содержимое архива модуля в каталог C:\Windows\System32\WindowsPowerShell\v1.0\Modules\NTFSSecurity (не забудьте разблокировать скачанные файлы).

Импортируйте модуль NTFSSecurity в сессию PowerShell:

Выведем список команд, доступных в модуле (доступно 36 командлетов):

Get-Command -Module NTFSSecurity

NTFSSecurity модуль powershell для управления правами на файлы и папки

Выведем текущие NTFS разрешения на каталог:
Get-Item 'c:\distr' | Get-NTFSAccess

Как вы видите, текущие разрешения представлены в более удобной форме.

Get-NTFSAccess получить текущие ntfs права powershell

Чтобы предоставить конкретному пользователю и группе группе полные права на папку, выполните команду:
Add-NTFSAccess -Path C:\distr -Account 'WORKSTAT1\confroom','BUILTIN\Администраторы' -AccessRights 'Fullcontrol' -PassThru

Совет. По умолчанию командлеты модуля NTFSSecurity не возвращают никаких данных, чтобы команда после выполнения выводила новые ACL, используйте параметр PassThru.

Чтобы предоставить права только на верхнем уровне и не изменять разрешения на вложенные объекты (только на папку), используйте команду:

Add-NTFSAccess c:\data\public -Account corp\aaivanov -AccessRights Modify -AppliesTo ThisFolderOnly

Удалить назначенные NTFS разрешения:

Remove-NTFSAccess -Path C:\distr -Account 'WORKSTAT1\confroom' -AccessRights FullControl -PassThru

Следующей командой можно лишить указанную учетную прав на все вложенные объекты в указанной папке (наследованные разрешения будут пропущены):

Get-ChildItem -Path C:\distr -Recurse | Get-NTFSAccess -Account 'WORKSTAT1\confroom' -ExcludeInherited |Remove-NTFSAccess -PassThru

Следующей командой можно назначить учетную запись Administrator владельцем всех вложенных объектов в каталоге:

Get-ChildItem -Path C:\distr -Recurse -Force | Set-NTFSOwner -Account 'Administrator'

Чтобы очистить все разрешения, назначенные на объекты каталога вручную (не будет удалены унаследованные разрешения):

Get-ChildItem -Path C:\distr -Recurse -Force | Clear-NTFSAccess

Включить NTFS наследование для всех объектов в каталоге:

Get-ChildItem -Path C:\distr -Recurse -Force | Enable-NTFSAccessInheritance

Чтобы вывести все разрешения, которые назначены вручную, исключая унаследованные разрешения:

dir C:\distr | Get-NTFSAccess –ExcludeInherited

Можно вывести разрешения, назначенные для определенного аккаунта (не путайте с эффективными разрешениями, речь о них ниже):

dir C:\distr | Get-NTFSAccess -Account corp\aaivanov

Проверка эффективных NTFS разрешений на объекты из PowerShell

Вы можете проверить эффективные NTFS разрешения на конкретный файл или папку с помощью командлета Get-EffectiveAccess . Допустим вы предоставили доступ на некоторую папку нескольким группам безопасности AD и теперь хотите понять, есть ли у конкретного аккаунта (SID) доступ к данной папке или нет. Как это сделать, не выводя состав групп AD, в которых входит его учетная запись? В этой ситуации как раз поможет функция проверки эффективные NTFS разрешений. Допустим, нужно проверить эффективные права на все вложенные папки в каталоге для пользователя confroom.

Get-ChildItem -Path c:\distr -Recurse -Directory | Get-NTFSEffectiveAccess -Account 'WORKSTAT1\confroom' | select Account, AccessControlType, AccessRights, FullName

Как работать с разрешениями NTFS ACL в Powershell

Основной способ ограничения доступа к файлам и папкам дает файловая система NTFS с ее таблицами ACL. Это может быть право только на чтение файла (открытие и просмотр), на чтение и запись (открытие, просмотр, изменение и сохранение) и многие другие. Такие права мы чаще устанавливаем через GUI назначая права не конечному пользователю, а группе в которой он состоит. Все действия по созданию и изменению мы так же можем сделать через Powershell.

Навигация по посту

На мой взгляд использование консоли Powershell лишнее при выдаче таких прав. Риск совершить ошибку в консоли намного выше, чем при работе в GUI, да и время для написания команды уйдет больше. Есть специфичные задачи, например в виде аудита или перенос прав где Powershell очень поможет.


Основы разрешений

ACL (access controll list) - делится на два вида:

  1. SACL (System Access Control List) - используется для аудита;
  2. DACL (Discretionary Access Control List) - используется для выдачи и проверки разрешений пользователям и группам.

Оба этих типа разрешений хранятся в специальной таблице MFT (Master File Table).

Основное средство для редактирования этих разрешений в GUI можно увидеть зайдя в свойства файла или папки:


В области 4 выделены следующие разрешения:

  • Read - открытие файла и папки;
  • List folder contents - открытие папки;
  • Write - создание файлов и папок и их изменение;
  • Read & Execute - открытие и запуск исполняемых файлов;
  • Modify - открытие, создание, изменение и удаление файлов и папок;
  • Full Control - включает разрешения modify, а так же управление разрешениями файла или папки.

Чаще всего мы работаем с разрешениями выше, но есть еще один список с возможностью настройки прав более тонко:


Как можно догадаться - разрешения указанные в области 1 это просто набор нескольких правил из области 3. Их так же еще называют "Premission Sets" и "Special Premissions".

Групповые разрешения могут принимать флаги Allow и Deny, которые разрешат или запретят указанные действия. Указывать разрешения для пользователей через Deny считается плохой практикой и практически не используется.

Кроме этого существует наследование:


Наследование помогает установить разрешения для одной папки так, что оно будет применяться ко вложенным файлам и папкам. Если наследование отключить (2), то у нас будет возможность убрать все наследуемые разрешения или оставить их.

Функции по работе со строками в Powershell

Получение текущих разрешений в Powershell

На примере ниже я верну разрешения для папки "C:\TestFolder\"


В области 1 выделен владелец папки, а под областью 2 отображаются все группы и пользователи с правами.

Мы можем проверять права не только локальной, но и сетевой папки. На примере ниже возвращена та же папка:


Поиск всех папок с правами у определенной группы

Представим, что мы хотим проверить права данные определенной группе. Мы можем заходить в свойства каждой папки и смотреть вкладку "Безопасности", а можем сделать это через Powershell.

Обычно у нас есть какой-то каталог с общим доступом с папками внутри, на которые мы выдаем разрешения. В моем случае такой каталог "Moscow", а на папки внутри я уже даю права:


В следующем примере я узнаю на какие папки установлены разрешения для TestGroup:


Изменение, копирование и добавление разрешений

Еще одна причина использовать Powershell - это возможность копирования разрешений. Например так я поставлю разрешения для папки Folder2 такие же, как и Folder2:


Возможности добавить нового пользователя в список ACL или изменить его права одним командлетом у нас нет. В обоих случаях мы должны будет создавать копию объекта ACL, изменять ее отдельным классом, а затем применять используя метод. Сам объект, который мы получаем через Get-ACL, имеет множество методов:


Для создания нового объекта с правами используется класс "FileSystemAccessRule", который в команде будет выглядеть так:

Расшифровать значения можно следующим образом:

  • IdentityReference\String - пользователь или группа формата "DOMAIN\Administrator";
  • FileSystemRights - сами разрешения, например "Read";
  • InheritanceFlags и PropagationFlags - определяют наследование. Например вы можете сделать так, что папки внутри указанной будут наследовать разрешения, а файлы нет. Ниже будут приведены несколько примеров. Более подробно об этом можно почитать на сайте Microsoft;
  • AccessCpmtrolType - разрешить или запретить (Allow/Deny).

Изменение и добавление прав у пользователя и групп

Допустим у нас есть пользователь "Test User (001)" с возможностью чтения папки "Folder1" и мы хотим добавить еще права на запись. Это будет выглядеть так:


Таким же образом работает добавление новой группы или пользователя в список ACL:


Права, которые мы можем дать имеют сокращенное название и они отображены далее:


У вас может быть много ошибок связанных с созданием класса с новыми разрешениями. Я бы советовал выводить существующие права и сравнивал бы их с новыми - это позволит снизить вероятность ошибок.


При этом вы можете применить набор разрешений, например в виде Write, но результат будет отображаться в виде "Special Premission":



Поэтому я рекомендую смотреть существующие разрешения на примере того, как я сделал это выше.

Удаление прав у пользователя или группы

Для удаления всех разрешений есть метод "RemoveAccessRuleAll". Работает он так же:


Для удаления конкретного права, например только возможность чтения, есть метод "RemoveAccessRule". С этим методом у меня были проблемы после которых действующие разрешения менялись на Special и изменить эту ситуацию у меня не получилось. Если вам нужно все же убрать одно разрешение - я бы советовал удалять все разрешения у пользователя, а затем добавлять их заново. У пользователя было право на Чтение и Запись, но мне нужно было оставить только чтение:


Смена владельца

Смена владельца файла или папки делается через метод SetOwner. Этот метод, в качестве идентификатора, принимает SID пользователя и что бы его узнать нужно использовать класс "System.Security.Principal.Ntaccount". На практике это выглядит так:


Как отсортировать в Powershell объекты через Sort-Object

Включение или отключение наследования папок и файлов

Для управления наследованием используется метод "SetAccessRuleProtection", который устанавливает следующее:

  1. Нужно ли блокирование от родительской папки.
  2. Нужна ли перезапись прав.

Значения указываются в $True или $False. Например так я включу наследование и заменю существующие разрешения родительскими:


Сбор всех прав и их экспорт в CSV

Учитывая примеры выше мы можем временно собирать отчеты по выданным правам. Пример того, как может выглядеть отчет:


В качестве субъекта доступа ко всем файлам и папкам всегда имеется Владелец. Владелец файла стоит особняком среди всех остальных субъек­тов доступа (пользователей и групп).

То есть один и тот же пользователь может получать доступ или через разрешения свой учетной записи (или группы в которую он входит), или через свои права владельца, если он таковым является. Это позволяет более гибко настраивать разрешения.

Изменение владельца файла или папки

Владельцем объекта (файла или папки) автоматически становится пользователь, его создавший. Однако в дальнейшем статус владельца может получить и другой пользователь. Во-первых, смена владельца становится возможна в двух случаях:

  1. Когда изначальный владелец или любой пользователь, имеющий полный доступ к файлу (папке), предоставит другому пользователю разрешение Смена владельца. После этого пользователь сможет в любой момент стать владельцем объекта.
  2. Когда владельцем является член группы Администраторов . В этом случае, независимо от имеющихся прав, любой член группы Администраторов может назначать разрешения на доступ к объекту.

Во-вторых, непосредственно сменить владельца можно следующим об­разом (эти действия должен предпринять пользователь, желающий стать владельцем и обладающий на это правом):

1 . Перейдите на вкладку Безопасность окна Свойства файла или папки, а на ней нажмите на кнопку Дополнительно .


2 . Далее в появившемся диалоговом окне Дополнительные параметры безопасности нажимаем Изменить .


Далее в окне Выбор: "Пользователь" "Группа" в поле Введите имена выбираемых объектов введите имя пользователя или (группы) нового владельца и нажмите кнопку OK .


В том случае, если вы хотите стать владельцем папки и всех вложенных в нее файлов и подпапок, то необходимо в окне Дополнительные параметры безопасности установить флажок Заменить владельца подконтейнеров и объектов. Далее нажмите кнопку ОК .


Также можно воспользоваться инструментом поиска при вводе имени пользователя нового владельца в окне Выбор: "Пользователь" "Группа" нажав на кнопку Дополнительно .


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


В окне Выбор: "Пользователь" "Группа" в поле Введите имена выбираемых объектов появится имя пользователя(группы) которое вы выбрали на предыдущем шаге, нажимаем OK .


В следующем окне нажимаем кнопку OK .


Смена владельца произведена.

Изменение разрешений при копировании и перемещении объектов

При копировании или перемещении файлов и папок разрешения могут меняться, вызывая непредвиденные и неприятные последствия. Напри­мер, после перемещения файла пользователю может быть запрещена какая-либо форма доступа к нему, или наоборот - незапланированно предоставлен доступ, которого пользователь не должен иметь.

Чтобы избежать подобных ситуаций, нужно иметь ясное представление о том, что происходит с разрешениями при копировании и перемеще­нии файлов и папок. При этом все зависит от того, куда вы копируете или перемещаете файлы.

Так, при КОПИРОВАНИИ файлов или папок с одного NTFS-тома на другой или в пределах одного и того же тома разрешения будут измене­ны в соответствии с тем, какие разрешения установлены на томе или папке, куда производится копирование. Причем созданная копия будет восприниматься как новый файл, а его владельцем становится пользо­ватель, производивший копирование.

При ПЕРЕМЕЩЕНИИ файлов или папок с одного NTFS-тома на дру­гой или в переделах одного и того же тома будет происходить следую­щее:

  • Файл или папка сохранят свои изначальные разрешения.
  • Пользователь, осуществляющий перемещение файлов, становится их владельцем и создателем.

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

Мы рассмотрели копирование и перемещение файлов в пределах NTFS-разделов. Что касается копирования на разделы FAT, то здесь и рассматривать нечего - все разрешения будут утеряны, так как FAT32 их не поддерживает ни в каком виде.

При перемещении файла с NTFS-раздела на раздел FAT32 вы должны будете также иметь разрешение на изменение перемещаемого файла и папки.

Методика планирования разрешений

К NTFS-разрешениям доступа не стоит относиться пренебрежительно. Их необходимо назначать обдуманно и системно. Особенно это заме­чание касается администраторов, которым необходимо в ходе своей де­ятельности обеспечивать работу некоторого парка компьютеров. Эту процедуру необходимо спланировать заранее.

Ваше планирование даст наибольший эффект, если вы будете учитывать приведенные ниже правила:

Читайте также: