¿Cómo agregar permisos a las canalizaciones con nombre de Windows usando PowerShell?

¿Cómo agregar permisos a las canalizaciones con nombre de Windows usando PowerShell?

¿Cómo puedo agregar permisos para que un grupo específico lea/escriba desde una canalización con nombre existente, usando un script de PowerShell?

Hasta aquí llegué:

$AccessRule = New-Object System.IO.Pipes.PipeAccessRule( "Users", "FullControl", "Allow" )
$PipeSecurity = [System.IO.Directory]::GetAccessControl("\\.\pipe\docker_engine")
$PipeSecurity.AddAccessRule($AccessRule) 

error de tiro

No se puede convertir el argumento "regla", con valor: "System.IO.Pipes.PipeAccessRule", para que "AddAccessRule" escriba "System.Security.AccessControl.FileSystemAccessRule"

Respuesta1

$account="<DOMAIN>\<USERNAME>"
$npipe = "\\.\pipe\docker_engine"                                                                                 
$dInfo = New-Object "System.IO.DirectoryInfo" -ArgumentList $npipe                                               
$dSec = $dInfo.GetAccessControl()                                                                                 
$fullControl =[System.Security.AccessControl.FileSystemRights]::FullControl                                       
$allow =[System.Security.AccessControl.AccessControlType]::Allow                                                  
$rule = New-Object "System.Security.AccessControl.FileSystemAccessRule" -ArgumentList $account,$fullControl,$allow
$dSec.AddAccessRule($rule)                                                                                        
$dInfo.SetAccessControl($dSec)

Respuesta2

Si bien la solución de Ben funciona, las reglas de acceso se pierden cada vez que se reinicia el demonio Docker.

Pero hay una solución permanente en el caso de Docker:
cree el archivo %programdata%\docker\config\daemon.jsoncon el siguiente contenido:

{
    "group": "Users"
}

Esto permite que todos los usuarios del grupo de Windows Usersabran la canalización con nombre sin privilegios de administrador.

mejor enero


Este es eldocumentación.

-G, --cadena de grupo | Grupo para el socket Unix (por defecto "docker")

Dice "socket Unix" pero también funciona para la tubería con nombre.

El grupo predeterminado parece ser docker, pero no lo crea el demonio. Y Docker Desktop crea un grupo llamado docker-users.

información relacionada