【问题标题】:How do I change the permissions in openshift container platform?如何更改 openshift 容器平台中的权限?
【发布时间】:2021-01-18 19:14:47
【问题描述】:

我是 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 中部署时,该目录中的某些文件的权限被拒绝。

【问题讨论】:

    标签: linux docker openshift


    【解决方案1】:

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

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

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

    支持任意用户 ID

    默认情况下,OpenShift 容器平台 使用任意分配的用户 ID 运行容器。这提供了 由于 容器引擎漏洞,从而实现升级 主机节点的权限。

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

    将以下内容添加到您的 Dockerfile 设置目录和文件 允许 root 组中的用户在 构建图像:

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

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

    【讨论】:

      【解决方案2】:

      将此添加到我的Dockerfile 工作:

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

      【讨论】:

        【解决方案3】:

        Dockerfile 中的以下更改为我解决了这个问题

        #Add user 
        RUN useradd -rm -d /home/ubuntu -s /bin/bash -g root -G sudo -u 1001 ubuntu
        #Add permissions
        RUN chown -R ubuntu:root /home/ubuntu && \
            chgrp -R 0 /home/ubuntu && \
            chmod -R 775 /home/ubuntu 
        ##Specify the user with UID
        USER 1001
        

        【讨论】:

          【解决方案4】:

          OpenShift 默认使用任意 UID 运行 Pod。您可以使用 oc rsh <pod name> id 检查 pod 中使用的 UID。您的 pod 可能不使用您指定的 admin 运行。

          您构建的容器需要admin权限,因此您应该将anyuid SCC配置为默认服务帐户以避免权限错误。 关于 SCC 的更多信息在这里:Enable Container Images that Require Root

          e.g.> default scc 默认用于运行 pod

          $ oc adm policy add-scc-to-user anyuid -z default
          $ oc delete pod <your pod name>
          

          仅供参考,在构建您的映像之前,请在此处查看:General Container Image Guidelines 有助于构建您在 OpenShift 上使用的映像。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-09-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多