gpt4 book ai didi

powershell - Docker windows容器文件访问权限问题

转载 作者:行者123 更新时间:2023-12-02 20:09:45 42 4
gpt4 key购买 nike

Windows Server 2016 host, running Docker EE through the default MSFTdocker provider.

Docker version 17.06.2-ee-5, build 508bb92

docker-compose version 1.17.1, build 6d101fb0

我有一个基于 microsoft/windowsservercore:latest 的 Windows 容器,我正在尝试为 Bamboo 服务器设置一个图像。在创建构建计划期间,服务器会生成一个密码以在 Bamboo 和 Bitbucket 之间进行通信。在正在运行的容器中,密码文件夹/文件生成失败并出现以下错误:

java.nio.file.AccessDeniedException: C:\bamboo-home\xml-data\configuration\cipher\cipher.key_0

我已经尝试使用卷 C:\bamboo-home 连接到我的 Windows 主机,并完全包含在容器中。两次都是同样的错误。

Windows 容器使用名为“containeradministrator”的管理员帐户运行;默认图像和使用入口点时都是这种情况,如下所示。

标准图像运行:

PS C:\> docker run -it microsoft/windowsservercore:latest powershell
Windows PowerShell Copyright (C) 2016 Microsoft Corporation. All
rights reserved.

PS C:\> whoami
user manager\containeradministrator

并在自定义图像上测试入口点:

PS C:\test> docker-compose build
Building testentrypoint
Step 1/2 : FROM microsoft/windowsservercore:latest
---> 2cddde20d95d
Step 2/2 : ENTRYPOINT whoami
---> Running in 7fe31f02e45f
---> 60822e1907f1
Removing intermediate container 7fe31f02e45f
Successfully built 60822e1907f1
Successfully tagged test/entrypoint:latest
PS C:\test> docker-compose up
Creating network "test_default" with the default driver
Creating test_testentrypoint_1 ...
Creating test_testentrypoint_1 ... done
Attaching to test_testentrypoint_1
testentrypoint_1 | user manager\containeradministrator
test_testentrypoint_1 exited with code 0

据我所知,这个用户是 Administrator 的别名,尽管有趣的是它没有以这个名字出现在 net user 中:

PS C:\> net user

User accounts for \\

-------------------------------------------------------------------------------
Administrator DefaultAccount Guest
The command completed with one or more errors.

所以这可能是一个问题,但无论如何,据我所知,用户拥有完全的管理员权限:

PS C:\> $user = [Security.Principal.WindowsIdentity]::GetCurrent()
PS C:\> $user

AuthenticationType : Negotiate
ImpersonationLevel : None
IsAuthenticated : True
IsGuest : False
IsSystem : False
IsAnonymous : False
Name : User Manager\ContainerAdministrator
Owner : S-1-5-93-2-1
User : S-1-5-93-2-1
Groups : {S-1-1-0, S-1-5-32-545, S-1-5-6, S-1-2-1...}
Token : 3052
AccessToken : Microsoft.Win32.SafeHandles.SafeAccessTokenHandle
UserClaims : {http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name: User Manager\ContainerAdministrator, http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid: S-1-5-93-2-1, http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid:
S-1-1-0, http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid: S-1-5-32-545...}
DeviceClaims : {}
Claims : {http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name: User Manager\ContainerAdministrator, http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid: S-1-5-93-2-1, http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid:
S-1-1-0, http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid: S-1-5-32-545...}
Actor :
BootstrapContext :
Label :
NameClaimType : http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
RoleClaimType : http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid

PS C:\> (New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
True

所以我尝试了以下方法:

  1. 在容器中运行构建步骤,将文件夹权限设置为“所有人 - 完全访问”

  2. 启动时在正在运行的容器中手动运行脚本,执行相同的操作

  3. 运行时连接容器,手动运行powershell也一样

每次尝试生成密码文件之前,权限如下所示:

PS C:\> Get-ACL C:\bamboo-home\xml-data\configuration\ | fl

Path : Microsoft.PowerShell.Core\FileSystem::C:\bamboo-home\xml-data\configuration\
Owner : User Manager\ContainerAdministrator
Group : User Manager\ContainerAdministrator
Access : Everyone Allow FullControl
NT AUTHORITY\SYSTEM Allow FullControl
BUILTIN\Administrators Allow FullControl
S-1-5-21-2465844383-291681238-1546083700-500 Allow FullControl
Audit :
Sddl : O:S-1-5-93-2-1G:S-1-5-93-2-1D:AI(A;OICIID;FA;;;WD)(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;S-1-5-21-2465844383-291681238-1546083700-500)

并且尝试生成后出现上述错误,权限变为:

PS C:\> Get-ACL C:\bamboo-home\xml-data\configuration\ | fl

Path : Microsoft.PowerShell.Core\FileSystem::C:\bamboo-home\xml-data\configuration\
Owner : User Manager\ContainerAdministrator
Group : User Manager\ContainerAdministrator
Access : Everyone Allow FullControl
Audit :
Sddl : O:S-1-5-93-2-1G:S-1-5-93-2-1D:AI(A;OICI;FA;;;WD)

为什么默认帐户(可能是名为 containeradministrator 的管理员)在似乎表明它拥有所有权时却失去了对该目录的访问权限?为什么它不能首先创建文件(或文件夹,就此而言),因为在这两种情况下,“每个人”都应该具有完全访问权限?

最佳答案

我没有发现主机/容器权限之间的问题,但我提出容器的方式允许问题发生。通过更改我的设置过程,我能够更正此问题。

初始创建(创建文件夹的权限失败):

  1. 在主机上创建空白文件夹。
  2. 作为卷链接到容器内部文件夹(在本例中为 C:\bamboo-home)。这是 Bamboo 将放置其所有配置/工作区内容的文件夹。
  3. 在容器内安装产品,除 cipher 文件夹失败外,一切正常。直到这一步才注意到问题。

新创建(正常工作):

  1. 在主机上创建空白文件夹。
  2. 作为卷链接到容器内部文件夹(在本例中为 C:\empty)。这不会链接到 C:\bamboo-home,它将根据需要在运行的容器内部创建。
  3. 在容器内安装产品。完成后,将容器文件夹中的所有文件复制到创建的新空白文件夹中。这样,权限在容器本身内部以一致的方式设置,并且以前的问题得到缓解。

关于powershell - Docker windows容器文件访问权限问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47312143/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com