hola, estoy intentado crear una carpeta como la de SYSTEM INFORMATION.
(https://www.vichaunter.org/wp-content/uploads/2016/12/system-volume-information-ubicacion-no-disponible.jpg)
Hace poco hice una reparación de disco y se crearon unas carpetas
found.000
found.001
found.002
resulta que éstas carpetas son idénticas en comportamiento a las de 'system information'
La única manera de acceder a éstas carpetas es desde fuera del sistema. Ni en modo seguro se puede. O bien desde Linux, un disco de arranque o algo así.
Entonces tengo la curiosidad de cómo se crean estas carpetas.
He conseguido crear carpetas que deniegan el acceso con net y consola pero son fáciles de volver a hacerlas accesibles con simples comandos de consola.
gracias
Para anticiparme a posibles ejemplos. Esto no sirve:
Dim fs As FileSystemSecurity = File.GetAccessControl(TextBox1.Text)
fs.AddAccessRule(New FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny))
File.SetAccessControl(TextBox1.Text, CType(fs, FileSecurity))
No permite acceder pero el cuadro que muestra no es el mismo.
He estado un buen rato investigando y parece un tema relacionado permisos y auditoría de una carpeta o directorio.
Al hacer clic en la carpeta found.000 con el botón derecho. pestaña SEGURIDAD/OPCIONES AVANZADAS.
Vemos las pestañas Permisos y Auditoría. Toqueteando un poco y activando todos los permisos para mí, conseguí abrir la carpeta y además volverla al estado de "acceso denegado".
Ahora es cuestión de aplicarlo usando NET :-\.
Continuaré investigando...
Cita de: FJDA en 12 Octubre 2017, 22:44 PM
resulta que éstas carpetas son idénticas en comportamiento a las de 'system information'
La única manera de acceder a éstas carpetas es desde fuera del sistema. Ni en modo seguro se puede. O bien desde Linux, un disco de arranque o algo así.
Para poder acceder al directorio "
C:\System Volume Information" y/o cualquier directorio cuyo propietario sea "
SYSTEM" y donde el usuario no tenga permisos, simplemente debes tomar posesión y conceder los permisos necesarios al usuario actual. No es necesario "salirse del sistema operativo" y usar una distro de Linux, lo único que hace falta es ser un usuario con permisos de
Administrador:
(https://i.imgur.com/j6ZeV5u.png)
Para que veas lo sencillo que resulta acceder, con las herramientas command-line de Windows se haría de la siguiente manera:
@Echo OFF
Set "dirpath=C:\System Volume Information"
"Takeown.exe" /F "%dirpath%" /R /D S
"Icacls.exe" "%dirpath%" /Grant "%USERNAME%":"F" /T
Y en VB.NET para concederle permisos de control total al usuario actual (suponiendo que este sea Administrador) lo harías de la siguiente manera:
Dim user As IdentityReference = WindowsIdentity.GetCurrent(TokenAccessLevels.AllAccess).User
Dim acl As New FileSystemAccessRule(user, FileSystemRights.FullControl, AccessControlType.Allow)
Dim dirpath As String = "C:\System Volume Information"
Dim ds As DirectorySecurity = Directory.GetAccessControl(dirpath)
ds.ResetAccessRule(acl)
' Si deseas modificar el propietario...
' ds.SetOwner(user)
'
' Si deseas modificar el grupo...
' Dim group As New SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, Nothing)
' ds.SetGroup(group)
Directory.SetAccessControl(dirpath, ds)
Nota: es probable que para modificar el propietario por motivos de seguridad primero debas habilitar el privilegio de proceso
SE_TAKE_OWNERSHIP_NAME:
- Privilege Constants | MSDN (https://msdn.microsoft.com/en-us/library/windows/desktop/bb530716(v=vs.85).aspx)
- AdjustTokenPrivileges function | MSDN (https://msdn.microsoft.com/es-es/library/windows/desktop/aa375202(v=vs.85).aspx)
( en realidad se requiere mucho más p/invoking, como implementar la estructura
LUID_AND_ATTRIBUTES, llamar a la la función
OpenProcessToken,
LookupPrivilegeValue, etc, pero no quiero colapsarte con más enlaces a la API de Windows. )
Cita de: FJDA en 12 Octubre 2017, 22:44 PMHe conseguido crear carpetas que deniegan el acceso con net y consola pero son fáciles de volver a hacerlas accesibles con simples comandos de consola.
Bueno, arriba ya te he demostrado que siendo usuario
Administrador es posible tener acceso a cualquier archivo y directorio del sistema de archivos, por lo tanto creo que lo que intentas hacer no tiene mucho sentido en realidad. No puedes pretender crear un directorio que realmente sea inaccesible para un usuario
Administrador (siempre que éste tengo un mínimo de conocimiento para saber como acceder).
saludos