17.10. MAC portacl 模块
上一页 | 第 17 章 强制访问控制 | 下一页

## 17.10. MAC portacl 模块

模块名： `mac_portacl.ko`

对应的内核配置： `MAC_PORTACL`

引导选项： `mac_portacl_load="YES"`

mac_portacl(4) 模块可以用来通过一系列 `sysctl` 变量来限制绑定本地的 TCP 和 UDP 端口。 本质上 mac_portacl(4) 使得 非-`root` 用户能够绑定到它所指定的特权端口， 也就是那些编号小于 1024 的端口。

在加载之后， 这个模块将在所有的 socket 上启用 MAC 策略。 可以调整下列一些配置：

- `security.mac.portacl.enabled` 将完全 启用/禁用 策略。

- `security.mac.portacl.port_high` 将设置为 mac_portacl(4) 所保护的最高端口号。

- `security.mac.portacl.suser_exempt` 如果设置为非零值， 表示将 `root` 用户排除在策略之外。

- `security.mac.portacl.rules` 将指定实际的 mac_portacl 策略； 请参见下文。

实际的 `mac_portacl` 策略， 是在 `security.mac.portacl.rules` sysctl 所指定的一个下列形式的字符串： `rule[,rule,...]` 其中可以给出任意多个规则。 每一个规则的形式都是： `idtype:id:protocol:port`。 这里的 `idtype` 参数可以是 `uid` 或 `gid`， 分别表示将 `id` 参数解释为用户 id 或组 id。 `protocol` 参数可以用来确定希望应用到 TCP 或 UDP 协议上， 方法是把这一参数设置为 `tcp` 或 `udp`。 最后的 `port` 参数则给出了所指定的用户或组能够绑定的端口号。

### 注意:

由于规则集会直接由内核加以解释， 因此只能以数字形式表示用户 ID、 组 ID， 以及端口等参数。 换言之， 您不能使用用户、 组， 或端口服务的名字来指定它们。

默认情况下， 在 类-UNIX® 系统中， 编号小于 1024 的端口只能为特权进程使用或绑定， 也就是那些以 `root` 身份运行的进程。 为了让 mac_portacl(4) 能够允许非特权进程绑定低于 1024 的端口， 就必须首先禁用标准的 UNIX® 限制。 这可以通过把 sysctl(8) 变量 `net.inet.ip.portrange.reservedlow` 和 `net.inet.ip.portrange.reservedhigh` 设置为 0 来实现。

请参见下面的例子， 或 mac_portacl(4) 联机手册中的说明， 以了解进一步的信息。

### 17.10.1. 例子

下面的例子更好地展示了前面讨论的内容：

`#` `sysctl security.mac.portacl.port_high=1023` `#` `sysctl net.inet.ip.portrange.reservedlow=0 net.inet.ip.portrange.reservedhigh=0`

首先我们需要设置使 mac_portacl(4) 管理标准的特权端口， 并禁用普通的 UNIX® 绑定限制。

`#` `sysctl security.mac.portacl.suser_exempt=1`

您的 `root` 用户不应因此策略而失去特权，　因此请把 `security.mac.portacl.suser_exempt` 设置为一个非零的值。 现在您已经成功地配置了mac_portacl(4) 模块， 并使其默认与 类-UNIX® 系统一样运行了。

`#` `sysctl security.mac.portacl.rules=uid:80:tcp:80`

允许 UID 为 80 的用户 (正常情况下， 应该是 `www` 用户) 绑定到 80 端口。 这样 `www` 用户就能够运行 web 服务器， 而不需要使用 `root` 权限了。

`#` `sysctl security.mac.portacl.rules=uid:1001:tcp:110,uid:1001:tcp:995`

允许 UID 为 1001 的用户绑定 TCP 端口 110 (“pop3”) 和 995 (“pop3s”)。 这样用户就能够启动接受来发到 110 和 995 的连接请求的服务了。

上一页 | 上一级 | 下一页
17.9. MAC ifoff 模块 | 起始页 | 17.11. MAC partition (分区) 模块

本文档和其它文档可从这里下载： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.