linux - 如何更改 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 中部署时,我得到该目录中某些文件的权限被拒绝。
解决方案
默认情况下,任何在 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 的端口),因为它们不是作为特权用户运行的。
推荐阅读
- javascript - 多个异步执行NodeJS
- arrays - 将 csv 字符串拆分为适用于 bash 和 zsh 的数组的最简单方法
- ios - Snapchat SDK 卡在完成页面 Swift/Xcode
- javascript - 如何在反应中创建一个单独的函数来获取数据并在每次需要时调用
- java - 无法从适配器调用活动功能
- r - 有没有办法永久删除 R 数据框中的行?
- node.js - 在 react 中从 cloudant 中获取数据
- php - 在集合中使用 groupBy 时 laravel 更改对象
- node.js - npm:启动脚本失败
- python - 要通过 lambda 排序的列表