AWS CodeDeploy 将 运行ning 保留为 root,在第一个 运行 之后中断
AWS CodeDeploy keeps running as root, breaks after first run
以前我以用户 www-data 的身份正确地使用了 CodeDeploy 运行,一切都很好,但我认为 CodeDeploy 不知何故被破坏了,因为它现在总是 运行 作为 root 用户。然后,由于“错误的权限”,它在部署中中断,因为它不应该尝试 运行 作为 root 用户,而是 www-data 用户。
我检查了另一台运行正常的 CodeDeploy 设置的服务器,并且设置匹配,除了在 运行ning“ps aux | grep codedeploy-agent”之后没有根用户条目,在这里看到:
CodeDeploy 在这里说它 运行ning 作为 PID 3914 - 那么为什么有一个 PID 为 3650 的根条目?我认为它在 运行ning CodeDeploy 时也使用根条目 PID 3650,因为它正在创建具有“root:root”权限的新目录。但是在工作服务器上,一切都是用我配置的“www-data:wheel”创建的。
那么,我怎样才能在不破坏其他任何东西的情况下删除 root 用户执行所有操作? (我不想在不知道它是否安全的情况下删除东西,这也是另一个团队工作的服务器,所以我试图避免完全重建或卸载 - 以及破坏他们的任何东西。)
仅供参考,首先将其作为 www-data 运行ning CodeDeploy 运行,我使用这篇文章更改了用户,它在其他服务器上运行了几个月:https://aws.amazon.com/premiumsupport/knowledge-center/codedeploy-agent-non-root-profile/
*注意:尝试删除另一个 post 中推荐并打印在屏幕截图中的 .pid 和 .pid.lock 文件,但没有任何作用。
这归结为对 CodeDeploy 代理的更新。可能是更新过程中的意外替换或不兼容的更改需要将设置重置为默认设置。
我建议为 CodeDeploy 保留这些默认设置,因为它可以在修补或未来更新期间重新配置(这使它不受您的控制)。而是通过 appspec file.
设置权限
您可以通过每个部署所需的 appspec 文件定义在 CodeDeploy 运行 中执行操作的用户。
通过指定 runas
挂钩将 运行 作为该用户,如下例所示。
version: 0.0
os: linux
files:
- source: Config/config.txt
destination: /webapps/Config
- source: source
destination: /webapps/myApp
hooks:
BeforeInstall:
- location: Scripts/UnzipResourceBundle.sh
- location: Scripts/UnzipDataBundle.sh
AfterInstall:
- location: Scripts/RunResourceTests.sh
timeout: 180
ApplicationStart:
- location: Scripts/RunFunctionalTests.sh
timeout: 3600
ValidateService:
- location: Scripts/MonitorService.sh
timeout: 3600
runas: codedeployuser
您还可以设置特定目录或文件具有的 permissions(来自 files
层次结构。
以前我以用户 www-data 的身份正确地使用了 CodeDeploy 运行,一切都很好,但我认为 CodeDeploy 不知何故被破坏了,因为它现在总是 运行 作为 root 用户。然后,由于“错误的权限”,它在部署中中断,因为它不应该尝试 运行 作为 root 用户,而是 www-data 用户。
我检查了另一台运行正常的 CodeDeploy 设置的服务器,并且设置匹配,除了在 运行ning“ps aux | grep codedeploy-agent”之后没有根用户条目,在这里看到:
CodeDeploy 在这里说它 运行ning 作为 PID 3914 - 那么为什么有一个 PID 为 3650 的根条目?我认为它在 运行ning CodeDeploy 时也使用根条目 PID 3650,因为它正在创建具有“root:root”权限的新目录。但是在工作服务器上,一切都是用我配置的“www-data:wheel”创建的。
那么,我怎样才能在不破坏其他任何东西的情况下删除 root 用户执行所有操作? (我不想在不知道它是否安全的情况下删除东西,这也是另一个团队工作的服务器,所以我试图避免完全重建或卸载 - 以及破坏他们的任何东西。)
仅供参考,首先将其作为 www-data 运行ning CodeDeploy 运行,我使用这篇文章更改了用户,它在其他服务器上运行了几个月:https://aws.amazon.com/premiumsupport/knowledge-center/codedeploy-agent-non-root-profile/
*注意:尝试删除另一个 post 中推荐并打印在屏幕截图中的 .pid 和 .pid.lock 文件,但没有任何作用。
这归结为对 CodeDeploy 代理的更新。可能是更新过程中的意外替换或不兼容的更改需要将设置重置为默认设置。
我建议为 CodeDeploy 保留这些默认设置,因为它可以在修补或未来更新期间重新配置(这使它不受您的控制)。而是通过 appspec file.
设置权限您可以通过每个部署所需的 appspec 文件定义在 CodeDeploy 运行 中执行操作的用户。
通过指定 runas
挂钩将 运行 作为该用户,如下例所示。
version: 0.0
os: linux
files:
- source: Config/config.txt
destination: /webapps/Config
- source: source
destination: /webapps/myApp
hooks:
BeforeInstall:
- location: Scripts/UnzipResourceBundle.sh
- location: Scripts/UnzipDataBundle.sh
AfterInstall:
- location: Scripts/RunResourceTests.sh
timeout: 180
ApplicationStart:
- location: Scripts/RunFunctionalTests.sh
timeout: 3600
ValidateService:
- location: Scripts/MonitorService.sh
timeout: 3600
runas: codedeployuser
您还可以设置特定目录或文件具有的 permissions(来自 files
层次结构。