Как получить право собственности на файлы из командной строки?

34

Время от времени я сталкиваюсь с файлом, который мне нужен, чтобы стать владельцем. Я обычно использую caclsдля изменения разрешений ntfs, но это не похоже на владение. Под * nix я бы запустил что-то вроде chown me:me <file>. Есть ли окна, эквивалентные chown?

Джо
источник
Жаль, что setACL не работает с приведенным выше сценарием. Сообщения об ошибках на Win XP, 7 и 8, и вы должны быть профессором, чтобы найти, что с ним не так

Ответы:

25

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

subinacl /file test.txt /setowner=domain\foo

Это позволяет вам устанавливать права доступа для любого пользователя без необходимости быть администратором (как я полагаю, требуется takeown.exe).

CRB
источник
Недействительно для Windows XP. Могу ли я загрузить SUBINACL.exe (Windows 2003 Resource Kit) и использовать его в Windows XP?
Kiquenet
Что вы можете! Это, вероятно, откуда я это взял. Попробуй здесь .
crb
26

Вы ищете "TAKEOWN.EXE", который был первым в Windows Server 2003 в качестве стандартного компонента, и я полагаю, что элемент ресурсного набора ранее. Он доступен в Windows 7 и, возможно, в более новых системах.

takeown /f <some-file-or-folder> /r

/rвыполняет операцию рекурсивно для всех дочерних элементов указанной папки. В отличие от этого subinacl, вы должны войти в систему как пользователь, которым вы пытаетесь стать владельцем; или вы можете просто назначить право собственности на группу «Администраторы».

Вот копия его документации, сохраненная на SS64 :

Синтаксис TAKEOWN [/ s Компьютер [/ u [Домен] Имя пользователя [/ p [Пароль]]]] / f Имя файла [/ a] [/ r [/ d {Y | N}]]

Ключ / s Компьютер Имя или IP-адрес удаленного компьютера (не используйте обратную косую черту). по умолчанию = локальный компьютер. Этот параметр применяется ко всем файлам и папкам, указанным в команде.

/ u [Домен] UserName Запустить сценарий с разрешениями указанной учетной записи пользователя. по умолчанию = системные разрешения.

/ p [Пароль] Пароль учетной записи пользователя, указанный в параметре / u.

/ f FileName Имя файла, UNC-путь или шаблон имени каталога. Принимает подстановочный знак *

/ a передать право собственности группе администраторов вместо текущего пользователя.

/ r Выполнить рекурсивную операцию для всех файлов в указанном каталоге и подкаталогах.

/ d {Y | N} Подавить запрос подтверждения, который отображается, когда текущий пользователь не имеет разрешения «Список папок» в указанном каталоге, и вместо этого использовать значение по умолчанию: Y: стать владельцем каталога. N: пропустить каталог. Обратите внимание, что вы должны использовать эту опцию вместе с опцией / r. Если параметр / a не указан, право собственности на файл предоставляется пользователю, который в данный момент вошел в систему на компьютере.

Смешанные шаблоны с использованием (? И *) не поддерживаются командой takeown.

После изменения владельца файла / папки вы можете назначить полные права доступа к файлам, а затем прочитать или удалить их.

Эван Андерсон
источник
Kiquenet,
У SS64 есть лучшая ссылка на документацию: ss64.com/nt/takeown.html
jpaugh
17

Взять на себя ответственность и полные права на папку и все внутри:

takeown /F somedir /A /R
icacls somedir /grant:r User:F /T

Обязательно запустите командную строку от имени администратора!

Мне пришлось запустить командную строку от имени администратора, она работала у меня в Windows 8.1. С неловкостью Windows 8.1 мне пришлось искать «команду», щелкнув правой кнопкой мыши по значку командной строки. Для меня, чтобы увидеть опцию «Запуск от имени администратора». На моей панели задач была закреплена командная строка, но при щелчке правой кнопкой мыши по ней не отображался параметр «Запуск от имени администратора».

В Windows 10 «Запуск от имени администратора» должен быть доступен для вас как опция правой кнопки мыши.

Синтаксис принятия :

takeown [/s <Computer> [/u [<Domain>\]<User name> [/p [<Password>]]]] /f <File name> [/a] [/r [/d {Y|N}]]

takeown Reference .

Синтаксис Icacls :

icacls <FileName>[/GRANT [: r] <Sid>: <Perm> [...]] [/ Denegar <Sid>: <Perm> [...]] [/Remove [:g|:d]] <Sid> [...]] [/ t] [/ c] [/ l] [/ q] [/ setintegritylevel <Level>: <Policy> [...]]Icacls <Directory>[/ sustituir <SidOld><SidNew>[...]] [/ restore <ACLfile>[/ c] [/ l] [/q]]

Ссылка icacls .

chipiik
источник
1
Имейте в виду, что icacls задыхается от длинных имен путей. Сообщение об ошибке «файл не найден» немного вводит в заблуждение, худший icalcs прерывает обработку остальной части дерева без сообщения. Вы можете использовать трюк создания тома SUBST глубже в дереве, чтобы иногда обойти это. Takeown.exe допускает длинные имена.
Эндрю Деннисон
Недействительно
8

Я знаю, что это действительно старый пост, но есть способ, встроенный в Windows 7 и новее (может быть, в Windows Vista, но я не уверен). Запустите следующую команду из расширенной командной строки в папке, которую вы хотите сбросить. /tприказывает icaclsвыполнить операцию рекурсивно.

icacls .\* /setowner %UserDomain%\%UserName% /t
icacls .\* /reset /t

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

Затем вторая команда принудительно наследует разрешения вниз по дереву для всех дочерних папок и файлов.

Надеюсь, это поможет кому-то в будущем.

Джим
источник
Первой команды мне было достаточно.
Бенуа Бланшон
6

Возможно, вы захотите взглянуть на SetACL , швейцарский армейский нож управления разрешениями. Вот пример того, как назначить владение всеми файлами на диске C: «Администраторам» и снять защиту наследования от всех дочерних объектов за один раз:

SetACL.exe -on "C:\\" -ot file -actn setprot
           -op "dacl:np;sacl:nc"
           -rec cont_obj
           -actn setowner -ownr "n:S-1-5-32-544;s:y"

Вы также можете добавить -silent.

Хельге Кляйн
источник
3

В Windows Server 2003 R2 (и более поздних версиях) вы можете воспользоваться встроенным инструментом icacls.exe для изменения владельца из командной строки, а также всеми традиционными манипуляциями cacls.exe, на которые он распространяется ...

Обратите внимание, что по умолчанию icacls.exe находится в режиме «редактирования», а cacls.exe по умолчанию - в режиме «замены» - желанное изменение для тех из нас, кто укушен (более одного раза) этим небольшим нюансом cacls!

jnaab
источник
icacls хорош тем, что включен в последние версии окон и позволяет назначать права собственности любому пользователю.
Дэвид
1

Другой альтернативой является fileacl. Он небольшой и может устанавливать / снимать флаг «наследовать / не наследовать» на объекте, в отличие от большинства утилит windows.

Skelewir
источник
0

Я нашел решение с помощью Windows Tools: cacls

cacls <file or directory> /E /T /G <user>:F
chepseskaf
источник
0
  1. откройте командную строку от имени администратора и перейдите в проблемный каталог
  2. взять на себя ответственность за все файлы там ... пример: takeown /f *.jpg
  3. предоставить права доступа пользователям по вашему выбору ... пример: icacls *.jpg /grant "Everyone":F(обратите внимание, что в неанглийской версии Windows «Все» может не существовать, например, в немецкой версии Windows он работает только с «Jeder» - настоящий облом, что Windows переводит параметры команды!)
Йорг
источник