温馨提示×

linux kafka权限怎么设

小樊
40
2026-09-05 09:54:05
栏目: 智能运维

在 Linux 上部署 Kafka 时,“权限”通常包含 三个层面,很多人会混淆:

  1. Linux 系统层权限(文件、目录、用户)
  2. Kafka ACL 权限(哪个用户能访问哪个 Topic)
  3. Kafka 安全认证(SASL / SSL)

下面按最常见场景给你一个清晰说明。


一、Linux 系统层权限(最基础)

1. 建议使用独立用户运行 Kafka

不要用 root 跑 Kafka。

useradd -m kafka
passwd kafka

2. 目录权限

假设 Kafka 安装在 /opt/kafka,数据在 /data/kafka

chown -R kafka:kafka /opt/kafka
chown -R kafka:kafka /data/kafka
chmod 750 /data/kafka

3. 用 kafka 用户启动

su - kafka
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties

✅ 这一步解决的是:“谁能启动 Kafka、谁能读写数据文件”


二、Kafka ACL 权限(核心)

只有开启了 SASL / SSL 后,ACL 才有意义。

1. 开启 ACL(server.properties)

authorizer.class.name=kafka.security.authorizer.AclAuthorizer
super.users=User:admin

2. 创建用户(SASL/PLAIN 示例)

# server.properties
listeners=SASL_PLAINTEXT://:9092
security.interceptor.classes=org.apache.kafka.common.security.audit.AuditInterceptor
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN

JAAS 文件示例:

KafkaServer {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="admin"
  password="admin123"
  user_admin="admin123"
  user_reader="reader123"
  user_writer="writer123";
};

3. 常用 ACL 命令

给 writer 写 Topic

kafka-acls.sh --bootstrap-server localhost:9092 \
  --add --allow-principal User:writer \
  --operation Write --topic test-topic

给 reader 读 Topic

kafka-acls.sh --bootstrap-server localhost:9092 \
  --add --allow-principal User:reader \
  --operation Read --topic test-topic \
  --group group1

查看 ACL

kafka-acls.sh --bootstrap-server localhost:9092 --list

三、常见权限场景配置

场景 1:只允许特定用户访问 Topic

  • 开启 ACL
  • 不给匿名访问
  • 精确授权 Read / Write

场景 2:内部服务之间通信

  • broker 之间用 super.users
  • 客户端用最小权限用户

场景 3:公网 Kafka

✅ 必须:

  • SASL + SSL
  • ACL
  • 防火墙限制 9092/9093

四、常见问题

Q1:不设置 ACL 能跑吗?

能,但任何人都能读写所有 Topic(危险)

Q2:root 跑 Kafka 行不行?

不推荐,安全风险大

Q3:ACL 不生效?

检查:

  • 是否开启 AclAuthorizer
  • 是否用了 SASL
  • principal 名称是否一致

五、最小权限建议(最佳实践)

  • Kafka 用独立用户
  • 数据目录 750
  • 客户端只给 Read / Write
  • admin 只用于管理
  • 生产环境必须 SASL + ACL

如果你愿意,可以告诉我:

  • Kafka 版本
  • 是否公网
  • 是否需要 SASL / SSL
  • 使用场景(日志 / 业务 / 流计算)

我可以直接给你一份 可用配置文件 + ACL 脚本

0