内核能力简介
内核能力(kernel capabilities)是一种 Linux 内核的安全机制,用于细分进程的权限。它允许系统管理员精确控制进程对系统资源的访问权限,而无需将进程提升为完全的超级用户权限。
传统的 Unix 权限模型使用了用户和组的概念,以及基于文件的权限控制。然而,内核能力引入了一种更细粒度的权限管理机制。内核能力授权进程执行特定的特权操作,而不需要完全的超级用户权限。
内核能力可以用于限制对以下方面的访问:
系统
资源:
- 内核能力可以限制进程对系统资源(如网络、文件系统、设备等)的访问。不同的能力可以控制不同类型的资源访问,使管理员能够仅授予进程所需的最低权限。
特权
操作:
- 一些特权操作(如加载内核模块、修改网络配置、更改系统时间等)通常需要超级用户权限。但使用内核能力,可以将这些特权操作分配给具有相应能力的进程,而无需完全的超级用户权限。
一些常见的内核能力包括:
CAP_CHOWN
:更改文件所有者的能力。CAP_DAC_OVERRIDE
:忽略文件权限检查的能力。CAP_NET_ADMIN
:进行网络配置和管理的能力。CAP_SYS_ADMIN
:执行系统管理任务的能力。CAP_SYS_RAWIO
:直接访问硬件设备的能力。CAP_SYS_PTRACE
:对其他进程进行调试和跟踪的能力。
查看pid的内核能力
# 查看pid的内核能力
getpcaps <进程ID>
为容器设置内核能力
参考: https://www.yafa.moe/post/cka-docker-basic/
容器权限设定
# 在运行BusyBox容器时设置内核能力的选项
## --cap-add NET_ADMIN:添加 NET_ADMIN 内核能力
## --cap-drop CHOWN:禁用 CHOWN 内核能力
kernel capabilities --cap-add NET_ADMIN --cap-drop CHOWN busybox