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。

相关推荐
汉拓3D数字化1 小时前
SolidWorks PDM服务器配置怎么选?冷备份vs热备份vs分布式
运维·服务器·科技·自动化·系统·软件
Gl�ria1 小时前
Linux 查看日志常用命令
java·linux·servlet
handler011 小时前
【Linux】动态库、静态库使用与原理
linux·运维·服务器·c++·c·动态库·静态库
MSTcheng.1 小时前
【Linux学习】Linux学习第四弹——Linux基本指令3
linux·windows·学习·操作系统·指令
我不是程序员三三1 小时前
怎么监控电脑?企业办公终端监控建设实战与合规要点
服务器·数据库·电脑
筝筝ba2 小时前
OpenBMC 自动化测试中的多进程陷阱:从 Execute Process 返回异常到 output.xml 损坏问题分析
xml·linux·运维·服务器·网络
饕餮争锋2 小时前
PATH路径列表介绍
java·linux·服务器
V158897262012 小时前
从滴滴模式看机器人租赁:撮合型租赁平台开发源码的调度系统设计思路
linux·前端·机器人
伯恩bourne2 小时前
Qdrant 快速入门 :数据模型介绍
服务器·数据库·人工智能