精华内容
下载资源
问答
  • 如何以非root用户运行Docker容器

    千次阅读 2020-04-07 07:16:16
    需要用root用户运行Docker? 组织中,经常以Root用户运行Docker中的容器。但是你的工作负载真的需要root权限吗?显然很少。尽管如此,默认情况下,你的容器仍将以root用户身份运行。但这可能会带来严重的安全问题。...

    原文发表于kubernetes中文社区,为作者原创 原文地址

    需要用root用户运行Docker?

    组织中,经常以Root用户运行Docker中的容器。但是你的工作负载真的需要root权限吗?显然很少。尽管如此,默认情况下,你的容器仍将以root用户身份运行。但这可能会带来严重的安全问题。实际上,如果以root用户运行容器内部的进程,就是以root用户身份运行主机的进程。这就为那些恶意访问主机的攻击者,提供了机会。

    只需在常用的任何镜像上使用以下命令,你就可以自己查看它使用的用户身份,

    $ kubectl run -i --tty hello-world --image=hello-world --restart=Never -- sh
    # ps aux
    PID   USER     TIME  COMMAND
      1   root     0:10  sh
    

    显然,作为最佳实践,我们应该避免以超级用户身份运行容器。因此,让我们看看如何以非root用户身份运行容器。

    将非root用户添加到Dockerfile

    你可以在Dockerfile中使用RUN命令创建用户,这个用户仅具有容器内工作负载所需的权限。

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

    上面的命令行创建了一个用户newuser, 并指定了用户登录后使用的主目录和shell 。如下所示,将用户添加到你的Dockerfile中:

    FROM ubuntu:18.04
    COPY . /myapp
    RUN make /myapp
    ...
    USER newuser
    CMD python /myapp/hello.py
    

    **从第5行开始,每个命令都是以newuser身份而不是root身份运行。**是不是很简单?

    但是,我们并不总是仅使用自定义镜像。我们还使用了许多第三方镜像,因此我们无法像上面那样将root权限的用户注入其中。

    这些第三方Docker镜像默认情况下将以root用户身份运行,除非我们对其进行处理。如果你使用不知名来源中的镜像,那么该镜像很可能嵌入了恶意命令,这就可能会影响集群的安全性。

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

    使用Pod安全上下文

    你可以使用Pod安全上下文,将Pod的执行限制为特定的非root用户。通过在Pod规范中添加一个字段securityContext,就可以为Pod指定这些安全设置 。

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      securityContext:
        runAsUser: 5000
        runAsGroup: 5000
      volumes:
      - name: my-vol
        emptyDir: {}
      containers:
      - name: my-container
        image: hello-world
        command: ["sh", "-c", "sleep 10 m"]
        volumeMounts:
        - name: my-vol
          mountPath: /data/hello
        securityContext:
          allowPrivilegeEscalation: false
    

    在以上规范中,我们创建了一个为非root的用户,runAsUser指定Pod内的任何容器 仅以userID为5000的运行。runAsGroup 指定的容器内所有进程的组ID。否则,则组ID将是0。

    现在,你可以创建此pod并检查容器中运行的进程:

    $ kubectl apply -f my-pod.yaml
    $ kubectl exec -it my-pod – sh
    ps
    PID   USER     TIME  COMMAND
      1   5000     0:00  sleep 10 m
      6   5000     0:00  sh
    

    如上所示,PID 1正在以userID为5000的用户而不是root用户身份运行。

    使用Kubernetes Pod安全策略

    Kubernetes Pod安全策略定义了Pod必须运行的条件。换句话说,如果不满足这些条件,Kubernetes将阻止Pod运行。

    PodSecurityPolicy示例:

    apiVersion: policy/v1beta1
    kind: PodSecurityPolicy
    metadata:
      name: my-psp
    spec:
      privileged: false
      #Required to prevent escalations to root.
      allowPrivilegeEscalation: false
      allowedCapabilities:
      - '*'
      volumes:
      - 'nfs'
      hostNetwork: true
      hostPorts:
      - min: 8000
        max: 8000
      hostIPC: true
      hostPID: true
      runAsUser:
        #Require the container to run without root.
        rule: 'MustRunAsNonRoot'
      seLinux:
        rule: 'RunAsAny'
      supplementalGroups:
        rule: 'RunAsAny'
      fsGroup:
        rule: 'RunAsAny'
    

    该安全策略实现以下目的:

    • 限制容器在特权模式下运行。
    • 限制需要根目录的容器。
    • 仅允许容器NFS存储卷。
    • 仅允许容器访问主机端口8000。

    应用:

    kubectl create -f my-psp.yaml
    

    查看:

    $ kubectl get psp
    NAME    PRIV   RUNASUSER         FSGROUP   SELINUX   VOLUMES
    My-psp  false  MustRunAsNonRoot  RunAsAny  RunAsAny  [nfs]
    

    现在已经创建了策略,你可以通过尝试以root特权运行容器来对其进行测试。

    $ kubectl run --image=my-root-container
    

    pod安全策略将禁止其运行,并给出错误消息:

    $ kubectl get pods
    NAME         READY    STATUS     
    my-root-pod  0/1      container has runAsNonRoot and image will run as root
    

    结论

    在这篇文章中,我强调了默认设置下,使用root用户运行Docker容器有着固有风险。我还提出了多种方法来克服这种风险。

    • 如果你正在运行自定义镜像,请创建一个新的非root用户并在Dockerfile中指定它。
    • 如果使用的是第三方镜像,则可以在容器或容器级别设置安全上下文。
    • 还有一种方法是创建一个Pod安全策略,该策略将不允许任何容器以root特权运行。

    译文链接: https://dzone.com/articles/docker-without-root-privileges

    展开全文
  • Kubernetes 以root用户运行pod

    千次阅读 2020-11-06 13:53:05
    Kubernetes 以root用户运行pod 首先找到你需要进入对应namespace的pod名 kubectl get pod 找到pod所在的节点以及容器id kubectl describe pod “pod名” 在所给信息中找到以下字段: Node:所查pod所在的...

    Kubernetes 以root用户运行pod

    1. 首先找到你需要进入对应namespace的pod名

       kubectl get pod  
      
    2. 找到pod所在的节点以及容器id

      kubectl describe pod “pod名”
      

      在所给信息中找到以下字段:

      Node:所查pod所在的节点

      Container ID:所查pod的容器id,形如docker://...注意Container ID 不包括docker://

    3. ssh到pod对应节点

    4. 以root用户权限进入pod

      docker exec -it -u root 'Container ID' /bin/bash
      
    展开全文
  • crontab 指定非root用户运行脚本

    千次阅读 2019-09-08 08:35:12
    crontab 脚本默认是root用户运行,在Laravel项目中,如果运行PHP-FPM的用户是非root, 比如www ,而定时任务又是root用户执行的,,会导致生成的laravel日志文件属于root,进而www用户无权限写入日志。 crontab常用...


    crontab 脚本默认是root用户运行,在Laravel项目中,如果运行PHP-FPM的用户是非root, 比如www ,而定时任务又是root用户执行的,,会导致生成的laravel日志文件属于root,进而www用户无权限写入日志。

    crontab常用命令

    crontab -u //指定某个用户的cron服务
    crontab -l //列出某个用户的cron服务的详细内容
    crontab -r //删除某个用户的cron服务
    crontab -e //编辑某个用户的cron服务
    

    以上命令默认的用户是root,如果想指定某个用户,方式如下

    crontab -u www -e //编辑www用户的命令
    crontab -u www -l //查看www用户的命令列表
    

    指定非root用户

    如果直接编辑www的crontab命令,会发现其中的命令并没有执行,例如:

    * * * * * /usr/bin/php /{laravel项目根目录}/artisan schedule:run >> /dev/null 2>&1
    

    发现并不执行,而放在crontab -e中的却可以正常执行。

    此时查看/var/logs/cron日志发现如下报错信息:

    Apr 11 13:15:01 izuf60div2wtc0k655uschz CROND[2174]: (www) CMD (/usr/bin/php /{laravel项目根目录}/artisan schedule:run >> /dev/null 2>&1)
    Apr 11 13:15:01 izuf60div2wtc0k655uschz CROND[2174]: (CRON) ERROR chdir failed (/home/www): No such file or directory
    

    发现是由于指定了www用户的定时任务后,运行crontab命令失败了。原因是:找不到/home/www目录

    /home/www创建对应目录后,命令正常执行, 日志权限问题也随之解决。

    (完)

    参考:

    https://blog.csdn.net/cuiliwu/article/details/82623815

    https://learnku.com/articles/6775/about-laravel-log-permissions

    展开全文
  • root用户运行jenkins中shell命令

    万次阅读 2017-11-11 13:47:11
    以centOS系统为例,记录下修改Jenkins以root用户运行的方法

    以centOS系统为例,记录下修改Jenkins以root用户运行的方法。

    修改Jenkins配置文件

    # 打开配置文件
    vim /etc/sysconfig/jenkins
    # 修改$JENKINS_USER,并去掉当前行注释
    $JENKINS_USER="root"

    修改Jenkins相关文件夹用户权限

    chown -R root:root /var/lib/jenkins
    chown -R root:root /var/cache/jenkins
    chown -R root:root /var/log/jenkins

    重启Jenkins服务并检查运行Jenkins的用户是否已经切换为root

    # 重启Jenkins(若是其他方式安装的jenkins则重启方式略不同)
    service jenkins restart
    # 查看Jenkins进程所属用户
    ps -ef | grep jenkins
    # 若显示为root用户,则表示修改完成
    展开全文
  • root用户运行docker

    万次阅读 2017-08-27 12:48:49
    1、 首先创建docker用户组,如果docker用户组存在可以忽略sudo groupadd docker 2、把用户添加进docker组中sudo gpasswd -a ${USER} docker 3、重启dockersudo service docker restart 4、如果普通用户执行docker...
  • CentOS7 修改Jenkins以root用户运行

    千次阅读 2018-06-22 09:07:09
    修改Jenkins以root用户运行,这在正式环境中是不可取的,但在自己的测试环境中就无所谓了啦,怎么方便怎么来。 1. 修改Jenkins配置文件 1.1 修改$JENKINS_USER 打开jenkins配置文件: ➜ vim /etc/sysconfig/...
  • Docker安全策略--非root用户运行

    万次阅读 2018-09-27 15:20:48
    该学习笔记仅为有需要的学友学习使用,参考了 ... ... 再次表示感谢! 拙见: 1、docker 自身具备一定的安全测试,可以说是比较安全的,但由于docker本身共享了宿主机的资源,这会...
  • Tomcat 安全管理之禁用root用户运行

    千次阅读 2018-09-19 17:25:05
    以非root身份运行 Tomcat配置 基础操作 1、创建用户组 dev groupadd dev 2、创建用户 tomcat useradd -g dev -s /usr/sbin/nologin tomcat 3、配置tomcat cd /application/tomcat/bin/ # 解压 tar...
  • 以centOS系统为例,如采取的yum 安装jenkins ,默认安装到/var/lib 下,记录下修改Jenkins以root用户运行的方法。 修改Jenkins配置文件 # 打开配置文件 vim /etc/sysconfig/jenkins # 修改$JENKINS_USER,并...
  • vscode在linux上以root用户运行

    千次阅读 2020-08-10 14:25:08
    在linux上安装vscode后,发现普通用户可以使用,管理员用户启动不了,报错如下: ou are trying to start Visual Studio Code as a super user which isn’t recommended. If this was intended, please specify an ...
  • 关于这个以root用户运行logstash镜像,真的是搞了我不少时间,到处找资料,希望这篇记录对你们有帮助,节省下大家的时间,废话不多说,下面就是步骤: 1.首先我下载的是docker.elastic.co/logstash/logstash:...
  • 参考 ... 问题: 原因: ...不能使用root用户启动 解决: adduser elastic // 设置密码和信息 chown -R elastic:elastic <es所在文件夹> // 将es的拥有者和group改为elastic suelastic...
  • Linux下vlc以root用户运行

    千次阅读 2014-02-17 10:04:27
    1,如果是源码编译,请使用参数--enable-root 2,使用vim修改编译生成的二进制可执行程序,如vim vlc,搜索geteuid,将其替换为getppid即可
  • root用户无法运行tor解决办法

    千次阅读 2019-04-02 08:08:05
    创建一个用户运行tor 方案二 编辑“start-tor-browser”文件,找到下面语句,删除或注释掉即可运行: #if [ “`id -u`” -eq 0 ]; then # complain “The Tor Browser Bundle should not be run as root. ...
  • 我碰到了这样一个问题,在运行一个国产的java应用服务器软件启动一个java web服务器时,用su进入root用户可以正常启动服务,但是用sudo不能正常启动,将启动的脚本加到rc.local中也不能正常启动,百思不得骑姐,后来...
  • 在以nfs根文件系统启动后发现虽然默认是以root用户登陆的,但是shell默认不是以root权限运行的,表现就是在终端中的command prompt显示的是"$"而不是"#",之前遇到过几次,但是没有深入探讨原因,只是粗暴的把所有文件的...
  • 文章目录一、新建任务二、配置jenkins三、通过后台启动服务 一、新建任务 二、配置jenkins 三、通过后台启动服务 ...# grep jar :查询以jar方式运行的相关jar进程 # awk 抽取查询出的数据 # ki...
  • ubuntu 普通用户root权限运行程序

    千次阅读 2018-11-14 17:14:47
    sudo chown root app sudo chmod u+s app 为了使用qtcreator root权限调试: sudo chown root /usr/bin/gdb sudo chmod u+s /usr/bin/gdb
  • 使用root用户运行MYSQL的安全隐患

    千次阅读 2010-03-17 14:35:00
    不要作为Unix的root用户运行MySQL守护进程 。mysqld能以所有用户运行,你也能创造一个新的Unix用户mysql使一切更安全。如果你作为其他Unix用户运行mysqld, 你不必改动在user表中的root用户名 ,因为MySQL用户名和...
  • 但是应用程序必须以webmaster用户运行,否则报错 那么实现方式如下: #!/bin/sh user="webmaster" if [ `whoami` != "${user}" ]; then exec su - "${user}" -c "sh /mnt/checkP1.sh" fi echo "Agoly" id ...
  • Ubuntu中root用户登录、普通用户切换到root身份及root用户切换至普通用户多种方法详细介绍。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 734,042
精华内容 293,616
关键字:

以root用户运行