非root运行docker容器

一、非root运行docker容器

1、自己的容器,可以在dockerfile中处理一下

FROM ubuntu:24.04
COPY ./myapp  /myapp

RUN groupadd --gid 5000 newuser \
    && useradd --home-dir /home/newuser --create-home --uid 5000 \
        --gid 5000 --shell /bin/sh --skel /dev/null newuser
USER newuser
CMD  /myapp

2、第三方镜像,Kubernetes中Pod安全上下文和Pod安全策略,可以帮助我们以非root身份运行三方镜像。

3、使用Kubernetes Pod安全策略,可以阻止root启动的容器运行

参考:如何以非root用户运行Docker容器_用非root账号登录pod-CSDN博客

 二、如何用非root用户启动dockerd?

dockerd由于使用了linux domain socket,需要root用户启动,如何用非root用户启动呢?

方法1、sudo

方法2、创建docker用户和用户组,具体是什么原理呢???

参考:docker基础:使用非root用户操作docker_docker 不用root-CSDN博客

 三、如何用非root用户运行tcpdump,ping?

方法1、setuid,setgid

方法2、setcap,getcap

参考:谁说抓包必须用root权限-CSDN博客

ping,tcpdump这个程序,我们可以通过chmod允许普通用户执行,但它访问网卡某些系统调用时,内核要求必须是root用户

ping一般大家以普通用户使用发现没有什么问题,因为操作系统默认给他加了权限。

有的操作系统用的是setuid的方法,可以 ll /bin/ping看一下权限位中有没有s权限

有的操作系统用的是setcap方法,可以用getcap /bin/ping看一下

$ getcap /bin/ping
/bin/ping = cap_net_raw+ep

通过setcap可以设置权限,比如

gaofeng@ubuntu:~/c_code$ ./hello3
main is running
create iSocket error, check root          //没有rawsocket权限

sudo setcap cap_net_admin,cap_net_raw=eip hello3

或 sudo setcap cap_net_raw+eip hello3

也可以用 setcap -r hello3 移除权限设置

你可能感兴趣的:(docker,容器,非root,setuid,setcap)