¿Cómo tomar posesión de los archivos desde la línea de comando?

34

De vez en cuando me encuentro con un archivo del que necesito tomar posesión. Normalmente lo uso caclspara cambiar los permisos ntfs, pero no parece tener propiedad. Bajo * nix, ejecutaría algo como chown me:me <file>. ¿Hay una ventana equivalente a chown?

Joe
fuente
Lástima que setACL no funcione con el script anterior. ErrorMessages en Win XP, 7 y 8 y tiene que ser un Proffesor para encontrar lo que está mal con él

Respuestas:

25

subinacl es una herramienta poderosa del administrador de sistemas de Windows para hacer todo lo relacionado con la propiedad y las ACL. Puede cambiar la propiedad a cualquier persona que no sea usted ( no puede hacer esto con la GUI ).

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

Esto le permite configurar el permiso para cualquier usuario que desee, sin tener que ser administrador (como creo que takeown.exe requiere).

crb
fuente
No es válido para Windows XP. ¿Puedo descargar SUBINACL.exe (kit de recursos de Windows 2003) y usarlo en Windows XP?
Kiquenet
¡Seguro que puede! Eso es probablemente de donde lo obtuve. Tratar aquí .
crb
26

Está buscando "TAKEOWN.EXE", que fue el primero en Windows Server 2003 como componente estándar, y creo que era un elemento del kit de recursos anterior. Está disponible en Windows 7 y quizás en sistemas más nuevos.

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

/rrealiza la operación de forma recursiva en todos los elementos secundarios de la carpeta especificada. A diferencia subinacl, debe iniciar sesión como el usuario con el que intenta tomar posesión; o simplemente puede asignar la propiedad al grupo "Administradores".

Aquí hay una copia de su documentación, tal como se conserva en SS64 :

Sintaxis TAKEOWN [/ s Computer [/ u [Domain] UserName [/ p [Password]]]] / f FileName [/ a] [/ r [/ d {Y | N}]]

Clave / s Computadora El nombre o la dirección IP de una computadora remota (no utilice barras invertidas). predeterminado = computadora local. Este parámetro se aplica a todos los archivos y carpetas especificados en el comando.

/ u [Dominio] Nombre de usuario Ejecute el script con los permisos de la cuenta de usuario especificada. predeterminado = permisos del sistema.

/ p [Contraseña] La contraseña de la cuenta de usuario que se especifica en el parámetro / u.

/ f FileName Nombre del archivo, ruta UNC o patrón de nombre de directorio. Acepta el carácter comodín *

/ a Dar propiedad al grupo Administradores en lugar del usuario actual.

/ r Realiza una operación recursiva en todos los archivos en el directorio y subdirectorios especificados.

/ d {Y | N} Suprime la solicitud de confirmación que se muestra cuando el usuario actual no tiene el permiso "Lista de carpetas" en un directorio especificado y, en su lugar, usa un valor predeterminado: Y: toma posesión del directorio. N: omita el directorio. Tenga en cuenta que debe usar esta opción junto con la opción / r. Si no se especifica el parámetro / a, la propiedad del archivo se otorga al usuario que actualmente ha iniciado sesión en la computadora.

Los patrones mixtos que usan (? Y *) no son compatibles con el comando takeown.

Después de cambiar el propietario de un archivo / carpeta, puede asignar permisos completos a los archivos y posteriormente leerlos o eliminarlos.

Evan Anderson
fuente
SS64 tiene un mejor enlace de documentación: ss64.com/nt/takeown.html
jpaugh
17

Tome posesión y todos los derechos de la carpeta y todo lo que contiene:

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

¡Asegúrese de iniciar el símbolo del sistema como administrador!

Tuve que iniciar un símbolo del sistema como administrador, funcionó para mí en Windows 8.1. Con la incomodidad de Windows 8.1, tuve que buscar "comando", hacer clic derecho en el icono del símbolo del sistema. Para mí, para ver la opción "Ejecutar como administrador". Tenía un símbolo del sistema anclado a mi barra de tareas, pero al hacer clic derecho sobre él no se mostraba la opción "Ejecutar como administrador".

En Windows 10, "Ejecutar como administrador" debe estar disponible para usted como una opción de clic derecho.

Takeown Syntax :

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

Takeown Referencia .

Sintaxis de 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]]

Referencia de icacls .

chipiik
fuente
1
Tenga en cuenta que icacls se ahoga en nombres de ruta largos. El mensaje de error "archivo no encontrado" es un poco engañoso, peor aún, icalcs aborta el procesamiento del resto del árbol sin mensaje. Puede usar el truco de crear un volumen SUBST más profundo en el árbol para solucionar esto a veces. Takeown.exe tolera nombres largos.
Andrew Dennison el
No válido para Windows XP
Kiquenet
8

Sé que esta es una publicación muy antigua, pero hay una forma integrada en Windows 7 y más reciente (puede estar en Windows Vista, pero no estoy seguro). Ejecute lo siguiente desde un símbolo del sistema escalado en la carpeta que desea restablecer. /tle dice icaclsque realice la operación de forma recursiva.

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

El primer comando restablece el propietario a quien haya iniciado sesión a través de las variables de entorno. Por supuesto, se puede usar un nombre específico en su lugar.

El segundo comando obliga a que los permisos se vuelvan a heredar en el árbol a todas las carpetas y archivos secundarios.

Espero que esto ayude a alguien en el futuro.

Jim
fuente
El primer comando fue suficiente para mí.
Benoit Blanchon
6

Es posible que desee echar un vistazo a SetACL , la navaja suiza de gestión de permisos. Aquí hay un ejemplo de cómo asignar la propiedad de todos los archivos en la unidad C: a "Administradores" y eliminar la protección de herencia de todos los objetos secundarios de una sola vez:

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"

También puedes agregar -silent.

Helge Klein
fuente
3

En Windows Server 2003 R2 (y versiones posteriores) puede aprovechar la herramienta integrada icacls.exe para cambiar la propiedad desde la línea de comandos, así como todas las manipulaciones tradicionales de cacls.exe sobre las que se expande ...

Tenga en cuenta que por defecto icacls.exe en el modo "editar", mientras que cacls.exe por defecto en el modo "reemplazar" - ¡un cambio bienvenido para aquellos de nosotros mordidos (más de una vez) por ese pequeño matiz de cacls!

jnaab
fuente
icacls es bueno porque está incluido en versiones recientes de Windows y permite asignar la propiedad a cualquier usuario.
David
1

Otra alternativa es fileacl. Es pequeño y puede establecer / deshabilitar el indicador "heredar / no heredar" en el objeto, a diferencia de la mayoría de las utilidades de Windows.

Skelewir
fuente
0

He encontrado una solución usando las herramientas de Windows: cacls

cacls <file or directory> /E /T /G <user>:F
chepseskaf
fuente
0
  1. Abra el símbolo del sistema como usuario administrador y cambie al directorio problemático
  2. tomar posesión de todos los archivos allí ... ejemplo: takeown /f *.jpg
  3. conceda derechos de acceso a los usuarios que elija ... ejemplo: icacls *.jpg /grant "Everyone":F(tenga en cuenta que en inglés no Windows "Todos" podría no existir, por ejemplo, en alemán Windows solo funciona con "Jeder" - ¡un verdadero fastidio que Windows traduzca las opciones de comando!)
Jörg
fuente