
Как добавить разрешения для определенной группы на чтение/запись из существующего именованного канала, используя скрипт PowerShell?
Вот насколько я продвинулся:
$AccessRule = New-Object System.IO.Pipes.PipeAccessRule( "Users", "FullControl", "Allow" )
$PipeSecurity = [System.IO.Directory]::GetAccessControl("\\.\pipe\docker_engine")
$PipeSecurity.AddAccessRule($AccessRule)
выдать ошибку
Невозможно преобразовать аргумент "rule" со значением: "System.IO.Pipes.PipeAccessRule" для "AddAccessRule" в тип "System.Security.AccessControl.FileSystemAccessRule"
решение1
$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)
решение2
Хотя решение Бена работает, правила доступа теряются при каждом перезапуске демона Docker.
Но в случае с Docker есть постоянное решение:
создайте файл %programdata%\docker\config\daemon.json
со следующим содержимым:
{
"group": "Users"
}
Это позволяет всем пользователям в группе Windows Users
открывать именованный канал без прав администратора.
Лучший Ян
Этодокументация.
-G, --group string | Группа для сокета unix (по умолчанию "docker")
Там написано «unix socket», но работает и для именованного канала.
Группа по умолчанию, похоже docker
, , но она не создана демоном. А Docker Desktop создает группу с именем docker-users
.