linux Capability中的CAP_NET_BIND_SERVICE

目录

  • [一. Capability简介](#一. Capability简介)
    • [1.1 为什么需要 capability](#1.1 为什么需要 capability)
    • [1.2 capability 的基本概念](#1.2 capability 的基本概念)
    • [1.3 capability 的存储位置](#1.3 capability 的存储位置)
  • [二. 实际应用场景](#二. 实际应用场景)
    • [2.1 让普通用户程序绑定低端口](#2.1 让普通用户程序绑定低端口)
    • [2.2 在caddy中的应用](#2.2 在caddy中的应用)

一. Capability简介

Linux 的 capability(能力)机制是一种比传统 UID/GID 更细粒度的权限控制方式。

1.1 为什么需要 capability

传统 Unix/Linux 权限模型下,进程只有两种状态:

  • 普通进程:权限受限于其 UID
  • 特权进程(root,UID=0):拥有所有权限

这种全有或全无的模式带来安全隐患:

  • 一个只需要绑定 80 端口的程序必须拥有 root 权限
  • 一旦该程序被攻破,攻击者就获得完整系统控制权

1.2 capability 的基本概念

Capability 将 root 的特权拆分成多个独立的、可单独授予或撤销的权限单元。例如:

  • CAP_NET_BIND_SERVICE:允许绑定 1024 以下的端口
  • CAP_NET_RAW:允许使用原始套接字
  • CAP_SYS_ADMIN:系统管理操作
  • CAP_KILL:允许向任意进程发送信号

1.3 capability 的存储位置

  • 每个进程有三组 capability 集合:
bash 复制代码
+------------------+
|  Effective (E)   |  进程当前实际拥有的权限
+------------------+
|  Permitted (P)   |  进程可以获得的权限上限
+------------------+
|  Inheritable (I) |  可以被继承的权限
+------------------+
  • 对于可执行文件,还有一个:
bash 复制代码
+------------------+
|  File caps       |  文件本身携带的 capability
+------------------+

二. 实际应用场景

2.1 让普通用户程序绑定低端口

🔷Linux默认规定root之外的用户不能直接绑定1024以下的端口

  • 需要使用root的传统方式
bash 复制代码
sudo python3 -m http.server 80
  • 使用 capability 方式
bash 复制代码
# 给 python3 这个可执行文件赋予绑定低端口的权限
sudo setcap cap_net_bind_service=+ep /usr/bin/python3
# 然后普通用户也可以绑定80端口了
python3 -m http.server 80

2.2 在caddy中的应用

  • caddy启动时默认需要绑定443端口,如果启动caddy的用户不是root用户的话,则会绑定443端口失败
  • 此时给/usr/bin/caddy添加绑定低端口的权限就可以了
bash 复制代码
[ec2-user@ip-172-31-25-58 ~]$ sudo setcap cap_net_bind_service=+ep /usr/bin/caddy
[ec2-user@ip-172-31-25-58 ~]$ 
[ec2-user@ip-172-31-25-58 ~]$ getcap /usr/bin/caddy
/usr/bin/caddy cap_net_bind_service=ep
[ec2-user@ip-172-31-25-58 ~]$

✅当然,实际在应用的时候,更好的做法是把绑定低端口的权限写到.service中,也就是说:

不是给 /usr/bin/caddy 这个文件权限,而是 systemd 在启动 Caddy 这个进程时给它 capability。

相关推荐
YOLO数据集集合4 分钟前
风机叶片表面损伤检测数据集 | 风机叶片 表面损伤 污渍检测 无人机巡检 风电运维9119期
运维·人工智能·计算机视觉·目标跟踪·无人机·智慧城市·电力巡检
j7~18 分钟前
【Linux网络编程】四十七.《Linux IO 模型详解:阻塞 IO、非阻塞 IO 与 IO 多路转接(select)》
linux·运维·网络·select·非阻塞io·阻塞io·i/o多路连接
分布式存储与RustFS40 分钟前
用RustFS给Harbor当S3存储后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
GeW1 小时前
智能工厂背后:Linux在跑,数据库在扛,高端制造在加速
linux
泡海椒1 小时前
趋势分析报表:jquick-pdf折线图PDF生成实战
java·大数据·运维·服务器·前端·pdf
qq_394562001 小时前
【在Linux上升级nginx】
linux·服务器·nginx
丸子君君1 小时前
【以麒麟服务器时间为准,定时请求时间同步】
运维·服务器·单片机
海盗12341 小时前
AI 新闻日报 2026-09-28:正确性审查自动化、7×24 个人智能体、具身部署态
运维·人工智能·机器人·自动化·人工智能aigc
元岳数字人小元2 小时前
数字人源码系统:模块化开发赋能智能场景灵活迭代升级
运维·人工智能·开源·人机交互·交互
Tairitsu_H2 小时前
[Linux系统] 基础IO核心 | 系统接口 | 文件描述符 | 重定向
linux·服务器·文件操作