【问题标题】:How to run Kafka as non-root user?如何以非 root 用户身份运行 Kafka?
【发布时间】:2017-02-06 17:13:34
【问题描述】:

根据其docs,Apache Kafka 默认登录到/tmp/kafka-logs

由于/tmp 在Linux 中归root 所有,因此对我来说,这意味着您必须以root 的身份运行Kafka 才能正确登录到该位置。但是出于安全目的,我不希望它以 root 身份运行,所以我试图弄清楚我的选择是什么。我相信我必须在以下选项中做出选择:

  1. 使用-Dkafka.logs.dir 命令行开关为要写入的日志指定不同的位置(不属于root 用户);或
  2. 提前(即在启动 Kafka 之前)修改系统,以便 /tmp/kafka-logs 与将要启动 Kafka 的用户拥有相同的用户(或者,通常,确保 Kafka 用户拥有r/w/x 对该目录的正确权限);或

有人可以澄清(或更正)我对 Linux 权限和进程的理解是正确的,并且这是我仅有的两个选择吗?当然,如果有任何其他选项可以让我以非 root 身份运行 Kafka,请加入!

【问题讨论】:

  • /tmp/ 在我遇到的所有 Linux 和 UNIX 上都是 rwxrwxrwx
  • "/tmp 在 Linux 中由 root 拥有",这可能是真的,但所有权并不是 FS 权限的最终目的,请按照@slim 的建议检查 /tmp 的模式
  • 感谢@rmlan (+1) - 请在他的回答下方查看我对 slim 的问题,关于 Mac 和 Linux 之间的差异。我有同样的问题要问你!

标签: java linux apache-kafka sudo


【解决方案1】:
$ ls -ld /tmp
drwxrwxrwt 16 root root 32768 Sep 28 16:39 /tmp

第一个rwx表示/tmp对其所有者(root)可读、可写和可执行,第二个rwx表示它对其组(root)可读、可写和可执行,第三个@ 987654325@ 表示每个人都可以读取、写入和执行。 (对于目录“可执行”意味着它可以被导航到)。

因此您的非特权用户可以将日志文件写入/tmp。如果其他用户已经创建了自己的/tmp/kafka-logs,则可能会出现问题。

但是,从长远来看,将日志写入 /tmp 并不是一种可持续的策略。如果这是个人系统,一切正常,但在生产系统上,您不会期望/tmp 拥有像/var/log 这样的目录所具有的保留存储空间或维护注意事项。通过它的名字,你可以猜到/tmp 中的文件在空间开始用完时被认为是公平的删除游戏。

您链接的页面非常清晰 - 尽管有默认设置,但他们希望您至少提供一个包含 broker.idlogs.dirzookeeper.connect 的属性文件。

因此,配置您喜欢的任何日志目录,可由您的首选用户写入。

【讨论】:

  • 感谢@slim (+1) - 虽然我将在 Linuc 机器上运行 Kafka,但我的开发机器是 Mac。在我的 Mac 上:ls -ld /tmp 产生:lrwxr-xr-x@ 1 root wheel 11 Mar 12 2016 /tmp -> private/tmp您能否确认这只是 Linux 和 Mac 之间的差异?再次感谢!
  • 注意 /tmp 旁边的箭头。这表明 /tmp 实际上是指向另一个目录(在本例中为 /private/tmp)的符号链接。在大多数情况下(如果不是全部),符号链接的权限与目标 (/private/tmp) 的权限无关。我敢打赌,如果您执行ls -ld /private/tmp,您将看到 slim 所指的权限。
猜你喜欢
  • 2013-07-02
  • 2017-07-08
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
相关资源
最近更新 更多