服务或者组件去root权限最小化方案分析

很多进程或服务为了系统安全,需要去root运行,说白了就是使用非root用户运行。这样的好处是一旦进程或者服务中有漏洞被入侵了,不会影响到整个系统的安全。

进程或者服务去root的大致流程如下:

  1. 在服务脚本中配置服务启动用户(非root用户),这个用户可以在该组件的rpm包安装的时候创建,并分配一定的权限,通常我们在spec文件中进行操作即可。
  2. 服务去了root权限之后,会失去很多root特权,导致服务中需要用到某些权限时会因为权限不足而无法访问,从而运行出错。
  3. 这时候可以通过几种方式为服务或者组件进行相应权利的给与。

    1).在服务脚本中配置capabilities,该机制是linux系统提供的权限提升机制,将系统中的所有权限按类别分为多类(我的系统上总共38个权限),我们用到什么权限,就要在服务中给与什么权限。当前系统支持哪些权限,可以使用man capabilities进行查看(先安装man-pages),每种权限均给出了详细解释。

    2).sudo 提权,使用sudo提权的方式需要把当前的用户加入到/etc/sudoers中,并可以在sudoers中指定当前用户可以免密使用哪些命令,但是这样会比较危险,比较好的方法是指定当前用户可以去调用某个脚本,该脚本中可以通过传入的参数,执行对应的命令完成我们需要的操作,为了安全起见,要对所有参数进行白名单校验,只有我们需要的参数才能真正去执行,否则要报权限不足。

一般通过以上几点,基本就可以完成服务或者组件的去root运行的要求,无论是libvirt,qemu这些系统组件还是用户态运行的nginx,ovs等组件都可以达到去root运行的目的。

针对capabilities的方式,要集中审视加入的权限,不要添加用不到的权限,从而控制到最小权限。这样就能保证即使是当前服务被攻击后,也会因为权限最小化,无法通过该服务攻击整个系统的目的,从而尽可能保证系统安全。

如果有什么疑惑欢迎,联系作者提供有偿咨询。

本文遵从CC3.0协议转载请注明:转自凌风技术站

本文标题:服务或者组件去root权限最小化方案分析

本文链接地址:https://www.iaccepted.net/net/227.html

相关文章