
Wie kann ich mithilfe eines Powershell-Skripts einer bestimmten Gruppe Lese-/Schreibberechtigungen für eine vorhandene Named Pipe hinzufügen?
So weit bin ich gekommen:
$AccessRule = New-Object System.IO.Pipes.PipeAccessRule( "Users", "FullControl", "Allow" )
$PipeSecurity = [System.IO.Directory]::GetAccessControl("\\.\pipe\docker_engine")
$PipeSecurity.AddAccessRule($AccessRule)
Fehler auslösen
Das Argument „rule“ mit dem Wert „System.IO.Pipes.PipeAccessRule“ für „AddAccessRule“ kann nicht in den Typ „System.Security.AccessControl.FileSystemAccessRule“ konvertiert werden.
Antwort1
$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)
Antwort2
während Bens Lösung funktioniert, gehen die Zugriffsregeln bei jedem Neustart des Docker-Daemons verloren.
Aber es gibt eine dauerhafte Lösung für Docker:
Erstellen Sie die Datei %programdata%\docker\config\daemon.json
mit folgendem Inhalt:
{
"group": "Users"
}
Dadurch können alle Benutzer in der Windows-Gruppe Users
die benannte Pipe ohne Administratorrechte öffnen.
Bester Jan
Dies ist dasDokumentation.
-G, --group string | Gruppe für den Unix-Socket (Standard „Docker“)
Es heißt „Unix-Socket“, funktioniert aber auch für die benannte Pipe.
Die Standardgruppe scheint zu sein docker
, wird aber nicht vom Daemon erstellt. Und Docker Desktop erstellt eine Gruppe namens docker-users
.