【问题标题】:how to identify if any applications inside docker container as running as root如何识别docker容器内的任何应用程序是否以root身份运行
【发布时间】:2019-02-13 16:30:18
【问题描述】:

我们使用了很多在 docker 容器中运行的 3rd 方图像 [例如:gitlab、jenkins、centos7 ..]。我想知道如何检查容器中运行的任何应用程序是否以 root 用户身份运行。是否与在普通服务器上检查 ps -elf|grep root 相同,但在容器内。

【问题讨论】:

    标签: docker doc


    【解决方案1】:

    您可以将终端连接到正在运行的容器,一旦进入其中,您就可以运行 ps 命令:

    附加到容器

    $ docker exec -it <container_id> /bin/bash
    

    您可以在官方文档站点中阅读有关 docker exec 的更多信息:https://docs.docker.com/engine/reference/commandline/exec/

    希望对你有帮助!

    【讨论】:

    • 是的,我知道这一点。但是一旦我连接到 runner 容器,ps -elf|grep root 是检查应用程序是否以 root 身份运行的唯一方法?
    • 我认为你可以不用 grep 来做到这一点:ps -f -u root -U root
    • 如果没有要附加的外壳,这将不起作用。 docker ps 然后 docker top 将显示 user
    【解决方案2】:

    您可以使用与进程 ID 关联的 docker top 命令... 结合“docker ps”和“docker top”可以使事情..

    你可以这样做:

    docker ps | perl -ne '@cols = split /\s{2,}/, $_; printf "%15s\n", $cols[0]' > tmp.txt &&  tail -n $(($(wc -l < tmp.txt)-1)) tmp.txt | xargs -L1 docker top | perl -ne '@cols = split /\s{2,}/, $_; printf "%15s %65s\n", $cols[0], $cols[7]' && rm tmp.txt
    

    这不是一个完美的答案((应该很漂亮),并且还要注意它仅适用于运行容器。在运行容器之前从图像的角度检查这一点会更安全。 然后,每次获取图像时,只需这样检查:

    d image inspect <image id> | grep -i user
    

    我可能错了,但我认为没有用户意味着 root。否则,您将不得不在那里分析输出。

    【讨论】:

      【解决方案3】:

      运行容器

      要获取主机上正在运行的容器中的所有进程及其 UID,您可以执行以下操作:

      for c in $(docker ps -q); do docker inspect $c -f "{{ .Name }}:"; docker top $c | awk '{print $1, $2, $8}'; echo "--------------"; done
      

      这将打印类似的东西

      /webserver-dockerized_nginx_1:
      UID PID CMD
      root 13437 nginx:
      systemd+ 13522 nginx:
      systemd+ 13526 nginx:
      systemd+ 13527 nginx:
      systemd+ 13528 nginx:
      --------------
      

      对于您正在运行的所有容器。

      图片

      要获取主机上所有图像的配置用户,您可以这样做

      docker image inspect $(docker image ls -q) -f "{{ .RepoTags }}: {{ .ContainerConfig.User }} {{ .Config.User }}"
      

      这将输出类似

      [nginx:mainline-alpine]:
      [memcached:alpine]: memcache memcache
      [redis:5-alpine]:
      

      正如 Marvin 所说:如果输出中没有用户,则 Dockerfile 中没有定义 USER,因此容器将以 root 身份运行(参考:Docker Documentation

      【讨论】:

        猜你喜欢
        • 2018-06-18
        • 2023-03-10
        • 1970-01-01
        • 2020-12-19
        • 2020-11-16
        • 1970-01-01
        • 2014-08-10
        • 2011-04-20
        • 2018-07-02
        相关资源
        最近更新 更多