linux capability机制并非削弱root账号本身权限,而是避免以root身份运行程序,转而通过setcap为二进制文件授予最小必要能力(如cap_net_bind_service),使普通用户可绑定低端口;结合systemd capabilityboundingset显式放行/排除能力、user namespace实现逻辑受限root、sudo命令白名单替代交互式root登录,贯彻最小权限原则。

Linux 的 Capability 机制不是用来“剥离 root 账号本身权限”的,而是让原本必须用 root 才能做的事,改由普通用户或服务进程以最小必要能力完成。root 账号(UID 0)在内核层面始终拥有全部 capability,真正要做的,是避免以 root 身份运行程序,转而用 capability 精准授权具体操作。
用 setcap 给二进制文件授予特定能力
这是最常用、最直接的方式:把某项特权“钉”在可执行文件上,运行时自动获得对应能力,无需 root 身份。
- 例如 Web 服务需绑定 80 端口:sudo setcap cap_net_bind_service=+ep /usr/local/bin/myapp,之后普通用户就能运行它并监听低端口
- 诊断工具需发原始包:sudo setcap cap_net_raw=+ep /usr/bin/myping,不再依赖 SUID ping
- 用 getcap /path/to/binary 查看是否设置成功;用 capsh --print 在运行中检查当前进程实际持有的能力
在 systemd 服务中显式约束能力边界
即使服务以 root 启动,也能通过 unit 文件强制丢弃不需要的能力,只保留刚够用的几个。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 在 [Service] 段添加:CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_MODULE CAP_SYS_PTRACE(波浪号表示“排除”)
- 再用 CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_SYSLOG 显式放行必需能力,其余自动清零
- 搭配 NoNewPrivileges=true 阻止 execve 后提权,RestrictSUIDSGID=true 禁止创建危险文件
配合 user namespace 实现逻辑上的“受限 root”
在容器或沙箱场景中,进程 UID 是 0,但只是命名空间内的映射结果,对宿主机无真实权限。
- 用 unshare --user --pid --net --fork /bin/bash 启动新命名空间,内部看到的 root 不等于宿主机 root
- 写入 uid_map 将容器内 UID 0 映射到宿主机高 UID(如 100000),彻底隔离身份
- 此时即使进程有 CAP_SYS_ADMIN,也只能在自己的 mount/net 命名空间里挂载或配网络,无法影响全局
禁用交互式 root 登录,用 sudo 白名单替代
从源头杜绝直接使用 root,把提权行为变成可审计、可限制的命令级授权。
- 锁定 root 账号:sudo passwd -l root
- 在 /etc/sudoers.d/admin 中写明:%admin ALL=(root) NOPASSWD: /bin/systemctl restart nginx, /usr/bin/journalctl -u docker
- 不开放 shell,只允许可信命令;配合 requiretty 和日志审计,确保每次提权都留痕










