首页 > 解决方案 > 如何更改 openshift 容器平台中的权限?

问题描述

我是 Openshift 的新手。我已经在 openshift 中部署了一个应用程序。当我检查日志时,某些文件出现权限被拒绝错误。现在,我想更改已部署在 Openshift 中的容器的权限,但我收到“不允许操作”警告。我该如何解决 ?

这适用于运行最新版本 MongoDB 的 linux。我已经尝试在我的 docker 文件中执行 RUN chmod 777 /path/to/directory ,创建了图像并在我的 yaml 文件中提取了相同的图像,我将其部署在我的 openshift 中。但是,当我检查我的 docker 容器时,它显示该目录的权限已更改,但是当我部署时,我在日志中收到“权限被拒绝”的警告。

FROM node:10.16.3

RUN apt update && apt install -y openjdk-8-jdk

RUN useradd -ms /bin/bash admin

# Set the workdir /var/www/myapp
WORKDIR /var/www/myapp

# Copy the package.json to workdir
COPY package.json .

# Run npm install - install the npm dependencies
RUN npm install

RUN npm install sqlite3

# Copy application source
COPY . .

RUN chown -R admin:admin /var/www/myapp

RUN chmod 775 /var/www/myapp

USER admin

# Copy .env.docker to workdir/.env - use the docker env
#COPY .env.docker ./.env

# Expose application ports - (4300 - for API and 4301 - for front end)
# EXPOSE 4300 4301
EXPOSE 52000

CMD [ "npm", "start" ]

虽然,当我运行我的 dockerifle 时,权限发生了变化,但是当我尝试在我的 openshift 中部署时,我得到该目录中某些文件的权限被拒绝。

标签: linuxdockeropenshift

解决方案


默认情况下,任何在 OpenShift 中启动的容器都会获得一个随机用户 ID。因此,未设计用于处理此类随机 UID 的图像将因权限错误而失败。

为了使您的图像正常工作,我建议您阅读以下最新 OpenShift 文档的文章:https ://docs.openshift.com/container-platform/4.2/openshift_images/create-images.html

这是与您的问题相关的简短版本:

支持任意用户 ID

默认情况下,OpenShift Container Platform 使用任意分配的用户 ID 运行容器。这为由于容器引擎漏洞而逃离容器的进程提供了额外的安全性,从而在主机节点上实现了升级的权限。

对于支持以任意用户身份运行的映像,映像中的进程可能写入的目录和文件应归根组所有,并且可由该组读取/写入。要执行的文件也应该具有组执行权限。

将以下内容添加到 Dockerfile 设置目录和文件权限,以允许 root 组中的用户在构建的映像中访问它们:

RUN chgrp -R 0 /some/directory && \
    chmod -R g=u /some/directory 

因为容器用户始终是根组的成员,所以容器用户可以读写这些文件。root 组没有任何特殊权限(与 root 用户不同),因此这种安排没有安全问题。此外,容器中运行的进程不能监听特权端口(低于 1024 的端口),因为它们不是作为特权用户运行的。


推荐阅读