kubernetes篇 容器用户权限控制
问题起源
问题起源于一个开发BUG:正常运行一段时间的POD,突然有一天运行报错了,错误是没有操作目录的权限,查其原因,原来是镜像被更新了,镜像添加了操作用户,而被操作的目录(NFS目录)并不具备普通用户操作的权限。
DOCKER容器如何控制用户
容器的操作用户其实是镜像控制的,打造镜像的时候有一个USER选项,运行USER [uid:gid] 就可以指定用什么用户来运行该镜像,这方面知识可以查看一下DOCKFILE编写语法。如果没有添加该语句,镜像默认使用root权限运行,而添加了该语句,DOCKFILE后面的命令就使用该用户权限运行。那么问题就来了,镜像里面的用户跟操作系统有什么关系,或者说,跟NFS目录权限有什么关系?
DOCKER-LINUX的用户映射
在这个BUG的基础上做个简单的测试,当文件系统某个目录只能允许ROOT操作的时候,启动一个运行用户为ROOT的容器,使他来操作该目录,结果是成功的。
这时候可以推理出,DOCKER中的运行用户与文件系统用户是存在某种关联的。这大概也是安装DOCKER需要使用ROOT用户或者ROOT组权限的原因之一,因为需要修改一些用户映射配置。
拜读了一下这篇文章,可以对这些用户管理有一个清晰的认识:
https://medium.com/@mccode/understanding-how-uid-and-gid-work-in-docker-containers-c37a01d01cf
作者通过例子验证得到了几个结论:
1.linux主机通过uid和gid来控制用户对目录的操作权限,docker容器中也是如此。
2.当docker容器中的操作用户为root时,他相当于宿主机上的root
3.当docker容器中的操作用户为非root时,根据其uid在宿主机上的权限限制获取对应权限
第三个结论是这么说的:
限制容器的使用权限会同时对主机的用户系统产生影响
1.如果使用已知的uid运行容器,那他可以直接获取该uid在宿主机上的权限来限制容器
2.最好使用已知的uid去启动容器(使用用户名也可以,但是这只是友好的方式,其本质还是提供uid),这样去限制容器权限
3.由于uid和gid以及用户名的的映射关系,容器内的进程在容器外看起来像是属于不同用户
看完这些之后又看到有一篇文章说可以修改docker和宿主机之间的映射规则,改变运行用户的权限,虽然用处不大,但是可以蛮了解下:
https://blog.csdn.net/lsysafe/article/details/90437811
其操作系统为Ubuntu,所以我没有跟着验证:
编辑/etc/default/docker,添加: DOCKER_OPTS="--userns-remap=default" 或 DOCKER_OPTS="--userns-remap=自定义的用户名" 此时会在/etc/subuid和/etc/subgid添加用户的映射ID system@system-virtual-machine:~$ cat /etc/subuid /etc/subgid
system:100000:65536
dockremap:165536:65536
apps:231072:65536
system:100000:65536
dockremap:165536:65536
apps:231072:65536 如dockremap这一行表示,从操作系统UID为165536用户开始直到UID为165536+65536映射容器的UID0至65535,0为容器的ROOT用户,/etc/default/docker文件这一行DOCKER_OPTS="--userns-remap=default"指定了引用 /etc/subuid,/etc/subgid文件的哪个用户,用户组,default一般指dockremap
另一个bug
容器内指定的用户在宿主机上不存在也是不影响运行的,但是会引起另一个问题:
当该容器第一次运行时使用了一些操作对目录增删改之后,如果该容器(注意是pod,如果仅仅是容器重启不一定有这个问题)被重启,那么该容器会运行报错拒绝访问。
原因在于,第一个POD的运行用户为某个“野鸡”用户,当再一次运行该POD时,虽然其UID和第一次运行的一样,但是对于宿主机来说,其又是另一个“野鸡”用户,操作失败。
kubernetes篇 容器用户权限控制的更多相关文章
- linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)
linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制) 发表于2012//07由feng linux 本身的ugo rwx的权限,对于精确的权限控制很是力不从心的,ac ...
- Python 学习 第十篇 CMDB用户权限管理
Python 学习 第十篇 CMDB用户权限管理 2016-10-10 16:29:17 标签: python 版权声明:原创作品,谢绝转载!否则将追究法律责任. 不管是什么系统,用户权限都是至关重要 ...
- Vue-Access-Control:前端用户权限控制解决方案
原文地址:http://refined-x.com/2017/11/28/Vue2.0用户权限控制解决方案/ Vue-Access-Control是一套基于Vue/Vue-Router/axios 实 ...
- asp.net core根据用户权限控制页面元素的显示
asp.net core根据用户权限控制页面元素的显示 Intro 在 web 应用中我们经常需要根据用户的不同允许用户访问不同的资源,显示不同的内容,之前做了一个 AccessControlHelp ...
- [Kubernetes]基于角色的权限控制之RBAC
Kubernetes中有很多种内置的编排对象,此外还可以自定义API资源类型和控制器的编写方式.那么,我能不能自己写一个编排对象呢?答案是肯定的.而这,也正是Kubernetes项目最具吸引力的地方. ...
- 基于RESTful API 怎么设计用户权限控制?
前言 有人说,每个人都是平等的:也有人说,人生来就是不平等的:在人类社会中,并没有绝对的公平,一件事,并不是所有人都能去做:一样物,并不是所有人都能够拥有.每个人都有自己的角色,每种角色都有对某种资源 ...
- 基于RESTful API 设计用户权限控制
RESTful简述 本文是基于RESTful描述的,需要你对这个有初步的了解. RESTful是什么? Representational State Transfer,简称REST,是Roy Fiel ...
- springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】
项目结构: 1.maven项目的pom中引入shiro所需的jar包依赖关系 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
- 转载 SAP用户权限控制设置及开发
创建用户SU01 事务码:SU01,用户主数据的维护,可以创建.修改.删除.锁定.解锁.修改密码等 缺省:可以设置用户的起始菜单.登录的默认语言.数字显示格式.以及日期和时间的格式设置 参数:SAP很 ...
随机推荐
- Odoo Controller详解
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826241.html 一:Controller 一般通过继承的形式来创建controller类,继承自od ...
- maven nexus 私服搭建 Linux版
准备工作 已安装jdk 已安装maven 下载Nexus Repository OSS:https://www.sonatype.com/download-oss-sonatype 如果无法下载成功, ...
- out文件 dev c++
解决办法:工具→编译选项→代码生成/优化→代码性能→生成代码性能信息选Yes→确定
- spring boot cli 知识点
spring boot cli 版本列表: https://repo.spring.io/snapshot/org/springframework/boot/spring-boot-cli/ spri ...
- Spring全家桶相关文章汇总(Spring,SpringBoot,SpringData,SpringCloud)
因为Spring框架包含的组件比较多,写的博客内容也比较多,虽然有分专栏但是依然不方便查找,所以专门用一篇文章来记录相关文章,会不定期更新. 一.Spring 1.基础内容 Spring介绍 Sp ...
- For 32-bit BOOL is a signed char, whereas under 64-bit it is a bool.
https://stackoverflow.com/questions/31267325/bool-with-64-bit-on-ios/31270249#31270249 Definition of ...
- Error handling in Swift does not involve stack unwinding. What does it mean?
Stack unwinding is just the process of navigating up the stack looking for the handler. Wikipedia su ...
- WGS84与CGCS2000坐标系
1.WGS84,WGS是世界大地测量系统World Geodetic System的缩写,84是说此坐标系是1984年建立的: 2.自上世纪60年代,美国军方相继推出WGS60.WGS66.WGS ...
- Xamarin.Forms一些常见问题
安装 1.查看Xaramin.Forms的版本 在vs项目中查看引用的包(Xamarin.Forms)的版本,或者直接进文件夹看 C:\Microsoft\Xamarin\NuGet\xamarin. ...
- Linux(Contos7)下使用SSH远程安装MySQL 8.0.17 完整笔记
1. 使用putty 配置远程服务器连接,登录服务器. 由于没有指定下载包 使用 yum install mysql-server 提示 未指定包,如: 2. 因为甲骨文的收购了Mysql并且对My ...