如何在Linux内核级别限制特权用户访问?

我在学习Linux内核编程的时候发现了这个答案,我的问题对于Linux内核的安全特性更具体。 我想知道如何限制特权用户或进程对其他进程和文件的访问权限,而不是完全访问root。

直到现在我发现:

  • 自由访问控制(DAC)的用户 ,在用户,组和其他组的读,写和执行方面有所区别
  • 用户root用于更高特权的任务
  • setuidsetgid来扩展用户的DAC并设置调用进程的组/用户ID,例如用户使用root权限运行ping来打开Linux套接字
  • 细粒度权限的function,例如删除ping suid位并设置cap_net_raw
  • 控制组( Cgroups )限制对资源(例如cpu,networking,io设备)的访问
  • 命名空间可以在IPC,networking,文件系统,pid上分离进程的视图
  • 安全计算( Seccomp )来限制系统调用
  • Linux安全模块( LSM )增加额外的安全function,如强制访问控制,如SELinux与types强制

列表是否完整? 在写这个问题的时候,我发现fanotify监视文件系统事件,比如反病毒扫描。 可能有更多的安全function可用。

是否还有更多的Linux安全function可以从文件或进程的内部或外部以可编程方式使用以限制特权访问? 也许有一个完整的列表。

传统的unix方法限制一个进程需要更多的权限,但是包含它的过程不能使用超过它所需要的是“chroot”它。

chroot改变了进程的明显根源。 如果正确的话,它只能访问新创建的chroot环境(又名chroot jail)中的那些资源,例如它只能访问这些文件,而且只能访问那些设备等等。

创建一个愿意这样做的过程是相对容易的,并不罕见。

要创建一个现有的软件(如网络服务器,邮件服务器)感觉在家里,仍然正常工作的环境是需要经验的东西。 最主要的是找到所需的最小资源(共享库,配置文件,设备,依赖服务(如syslog)等)。

您可以添加EFS,AppArmor,Yama auditctl,ausearch,aureport类似于fanotify的工具:Snort,ClamAV,OpenSSL,AIDE,nmap,GnuPG