一、非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
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 移除权限设置