AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1017150
Accepted
Yanick Girouard
Yanick Girouard
Asked: 2020-05-15 07:01:56 +0800 CST2020-05-15 07:01:56 +0800 CST 2020-05-15 07:01:56 +0800 CST

如何管理以非 root 用户运行的容器的绑定挂载所有权和权限?

  • 772

我们在 RHEL 主机上使用 Red Hat 容器镜像,全部基于它们的 ubi7 或 ubi8 镜像,默认情况下,它们以默认用户 (uid 1001) 运行。

这在容器需要对主机目录进行写访问(即写入日志或临时文件)时提出了挑战,因为主机的 UID 和 GID 保存在容器中,而容器写入的文件将归该 UID 所有容器用户。

据我所知,这给我留下了两个选择:

  1. 在我的主机上创建一个 UID 为 1001 的用户,并将该用户设置为已安装卷的所有者。这可能会带来问题,因为 UID 1001 是在不强制使用特定 UID 的主机上添加新用户时将使用的第一个 UID。因此,如果需要将容器部署在可能具有或不具有相同一致 UID 映射的多台服务器上,则可能很难管理。然而,据我所知,这将是唯一的方法,容器写入的文件的所有者(UID 1001)与主机上的所需用户匹配,并且主机上写入的文件的所有者与现有的 UID 匹配容器。
  2. 将挂载的主机目录设为全局可写,这会带来许多安全隐患,其中之一是主机上的任何用户都有权删除容器写入的文件。如果 UID 1001 已分配给主机上的另一个用户,这些文件也可能显示为由另一个用户拥有。

通常,我会在容器镜像中创建一个匹配的 user:group 组合,在需要的地方重置所有权和权限并重建它,但是对于 Red Hat 创建的镜像,这意味着很多工作要做,因为一切都是为了使用 UID 1001 运行,并且有许多脚本(容器入口点修复权限、生成容器用户)以这种方式强制它。

我是否正确理解了所有内容,还是有另一种(更好的)方法可以做到这一点?

linux mount docker
  • 2 2 个回答
  • 5757 Views

2 个回答

  • Voted
  1. Best Answer
    Yanick Girouard
    2020-05-15T07:28:05+08:002020-05-15T07:28:05+08:00

    我只是想通了... Red Hat 映像会自动将默认用户的 uid 更改为您使用 generate-container-user 脚本运行容器的任何内容,因此我只需要使用 USER 完成我的 Dockerfile 或运行它与 --user 一起工作。

    • 2
  2. Zoredache
    2020-05-15T09:54:50+08:002020-05-15T09:54:50+08:00

    还有另一种方法吗?

    另一种选择是使用 ACL。ACL 可以比用户/组/其他标准 *nix 权限灵活得多。

    当然,ACL 的灵活性也使它们变得更加复杂。您可以使用类似下面的示例来设置 ACL。

    花一些时间阅读 acl、setfacl、getfacl 的手册页并进行一些测试以确保您获得正确的权限。ACL 很复杂,下面只是一个示例。

    • https://linux.die.net/man/5/acl
    • https://linux.die.net/man/1/setfacl
    • https://linux.die.net/man/1/getfacl

    例子

    set_acl 脚本

    TMP_DIR_ACL=path/acl_directories
    FILE_ACL=path/acl_files
    ITEMPATH=/srv/data
    OWNER=root
    GROUP=root
    
    # set user/group owner on any existing files/dirs
    find $ITEMPATH ! -user $OWNER -exec chown --no-dereference $OWNER {} +
    find $ITEMPATH ! -group $GROUP -exec chgrp --no-dereference $GROUP {} +
    # set acls for all existing direcoties
    find $ITEMPATH -type d -exec setfacl --modify-file $DIR_ACL $ITEMPATH {} +
    # set acls for all existing files
    find $ITEMPATH -type f -exec setfacl --modify-file $FILE_ACL $ITEMPATH {} +
    # makes any files created in a directory be owned by the directories group
    find $ITEMPATH -type d -exec chmod g+s {} +
    

    acl_directories

    group::r-x
    mask::rwx
    other::r-x
    user::rwx
    user:1001:rwx
    default:group::rwx
    default:mask::rwx
    default:other::r-x
    default:user::rwx
    default:user:1001:rwx
    

    acl_files

    user::rwX
    user:1001:rwX
    group::r-X
    other::r-X
    
    • 1

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve