zoukankan      html  css  js  c++  java
  • capacilitys docker中的权限设置 privileged

    capacilities是docker 中对docker权限设置的重要方面;

    http://blog.csdn.net/wangpengqi/article/details/9821227

    上面这篇文档中有对linux capacilitys的介绍,但是还不足够

    https://www.cnblogs.com/iamfy/archive/2012/09/20/2694977.html

    超级细致的一篇文档讲linux的权限capacilities

    下面是docker代码中关于--privileged的设置,当使用了Privileged加了所有的权限

    func setCapabilities(s *specs.Spec, c *container.Container) error {
        var caplist []string
        var err error
        if c.HostConfig.Privileged { //如果配置了Privileged选项
            caplist = caps.GetAllCapabilities()
        } else {
            caplist, err = caps.TweakCapabilities(s.Process.Capabilities.Effective, c.HostConfig.CapAdd, c.HostConfig.CapDrop)
            if err != nil {
                return err
            }
        }   
        s.Process.Capabilities.Effective = caplist
        s.Process.Capabilities.Bounding = caplist
        s.Process.Capabilities.Permitted = caplist
        s.Process.Capabilities.Inheritable = caplist
        return nil
    }


    下面是所有的权限

    CAP_CHOWN:修改文件属主的权限

    CAP_DAC_OVERRIDE:忽略文件的DAC访问限制

    CAP_DAC_READ_SEARCH:忽略文件读及目录搜索的DAC访问限制

    CAP_FOWNER:忽略文件属主ID必须和进程用户ID相匹配的限制

    CAP_FSETID:允许设置文件的setuid位

    CAP_KILL:允许对不属于自己的进程发送信号

    CAP_SETGID:允许改变进程的组ID

    CAP_SETUID:允许改变进程的用户ID

    CAP_SETPCAP:允许向其他进程转移能力以及删除其他进程的能力

    CAP_LINUX_IMMUTABLE:允许修改文件的IMMUTABLE和APPEND属性标志

    CAP_NET_BIND_SERVICE:允许绑定到小于1024的端口

    CAP_NET_BROADCAST:允许网络广播和多播访问

    CAP_NET_ADMIN:允许执行网络管理任务

    CAP_NET_RAW:允许使用原始套接字

    CAP_IPC_LOCK:允许锁定共享内存片段

    CAP_IPC_OWNER:忽略IPC所有权检查

    CAP_SYS_MODULE:允许插入和删除内核模块

    CAP_SYS_RAWIO:允许直接访问/devport,/dev/mem,/dev/kmem及原始块设备

    CAP_SYS_CHROOT:允许使用chroot()系统调用

    CAP_SYS_PTRACE:允许跟踪任何进程

    CAP_SYS_PACCT:允许执行进程的BSD式审计

    CAP_SYS_ADMIN:允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等

    CAP_SYS_BOOT:允许重新启动系统

    CAP_SYS_NICE:允许提升优先级及设置其他进程的优先级

    CAP_SYS_RESOURCE:忽略资源限制

    CAP_SYS_TIME:允许改变系统时钟

    CAP_SYS_TTY_CONFIG:允许配置TTY设备

    CAP_MKNOD:允许使用mknod()系统调用

    CAP_LEASE:允许修改文件锁的FL_LEASE标志

    //----------------------------------

    下面这篇文档列出了整个docker启动,说了下docker启动之后默认的capabilitys:

    https://github.com/docker/libcontainer/blob/master/SPEC.md#security

    看下都有啥哈:

    CAP_NET_RAW 13 1
    CAP_NET_BIND_SERVICE 10 1
    CAP_AUDIT_READ 37 1
    CAP_AUDIT_WRITE 29 1
    CAP_DAC_OVERRIDE 1 1
    CAP_SETFCAP 31 1
    CAP_SETPCAP 8 1
    CAP_SETGID 6 1
    CAP_SETUID 7 1
    CAP_MKNOD 27 1
    CAP_CHOWN 0 1
    CAP_FOWNER 3 1
    CAP_FSETID 4 1
    CAP_KILL 5 1
    CAP_SYS_CHROOT 18 1

    上面说道,如果没有设置privileged的话,那么这个进程其实是按照默认值来配置的:

    caps.TweakCapabilities

    我挨个看下值都是多少,所以在宿主机上看这个进程的实际permitted capacilitys应该是:0x10a80425fb

    sudo docker run -it ubuntu /bin/bash 发现这个进程的优先级是:

    CapInh:    00000000a80425fb
    CapPrm:    00000000a80425fb
    CapEff:    00000000a80425fb
    CapBnd:    00000000a80425fb
    CapAmb:    00000000a80425fb

    (差不多啦,版本不同,最新的版本中也增加了AUDIT的功能)反正总得来说,就是docker里的进程你虽然是root了,但是并不是所有的权限都是有的。。。。。,也不能是为所欲为的;

    那么 sudo docker run -it -privileged ubuntu /bin/bash的话

    这个进程在宿主机上就是无敌的了。。。。。。

    CapInh:    0000003fffffffff
    CapPrm:    0000003fffffffff
    CapEff:    0000003fffffffff
    CapBnd:    0000003fffffffff
    CapAmb:    0000003fffffffff
    用啥东西测试一下呢?

    用这里的俩程序去测试一下吧

    https://github.com/honpey/codebox/tree/master/sched

  • 相关阅读:
    数据库设计三大范式
    常用正则表达式
    全国省市县无刷新多级关联菜单
    可选择Email和用户名登录的代码
    注册与登录界面的美化
    只能输入汉字js脚本
    js确认删除对话框
    同步文本框内容的JS代码
    网站变灰代码
    悬浮右侧可展开搜索的客服代码
  • 原文地址:https://www.cnblogs.com/honpey/p/8503616.html
Copyright © 2011-2022 走看看