如何以非root用户身份运行Kafka?

问题描述:

根据其docs,Apache Kafka默认登录到/tmp/kafka-logs如何以非root用户身份运行Kafka?

由于/tmp在Linux中属于root,所以对我而言,这意味着您必须运行Kafka作为root才能正确登录到该位置。但是出于安全性考虑,我不希望它以root身份运行,所以我试图弄清楚我的选择是什么。我相信有以下之间进行选择:在-Dkafka.logs.dir命令行开关

  1. 用于指定一个不同的位置(即不属于root)的日志被写入;或
  2. 提前修改系统(也就是在启动Kafka之前),以便/tmp/kafka-logs与将启动Kafka的用户拥有相同的用户(或者,一般来说,确保Kafka用户拥有正确的权限r/w/x到该目录);或

有人可以澄清(或纠正)我对Linux权限和流程的承诺是否正确,并且这些是我唯一的两种选择?当然,如果还有其他选项可以让我以非根的方式运行Kafka,请加入!

+1

在我遇到过的每个Linux和UNIX上,'/ tmp /'是'rwxrwxrwx'。 – slim

+1

“/ tmp在Linux中属于root”,这可能是真的,但所有权不是最终所有在FS权限中,检查/ tmp的模式为@slim建议 – rmlan

+0

谢谢@rmlan(+1) - 请在他的回答下面,关于Mac和Linux之间的区别,请参阅我的** slim **问题。我对你有同样的问题! – smeeb

$ ls -ld /tmp 
drwxrwxrwt 16 root root 32768 Sep 28 16:39 /tmp 

第一rwx意味着/tmp可读,可写和可执行由其所有者(根),该第二rwx意味着它可读,可写和可执行由其组(根),和第三rwx意味着它的可读性,可写性和可执行性都由大家。 (对于“可执行”目录意味着它可以导航到)。

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

然而,写日志/tmp是不是在长期可持续发展的战略。如果这是个人系统,任何事情都会发生,但在生产系统上,您不希望/tmp拥有保留的存储空间或维护注意力,即像/var/log这样的目录。通过它的名字,你可以猜测/tmp中的文件被认为是公平的游戏,如果空间开始用完。

你链接的页面是非常明确的 - 虽然有违约,他们的期望是,作为最低限度要提供含有broker.idlogs.dirzookeeper.connect属性文件。

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

+0

谢谢@slim(+1) - 虽然我将在Linuc盒子上运行Kafka,但我的开发机器是Mac。在我的Mac上:'ls -ld/tmp'产生:'lrwxr-xr-x @ 1 root wheel 11 Mar 12 2016/tmp - > private/tmp'。 **您能否确认这只是Linux和Mac之间的差异?**再次感谢! – smeeb

+1

请注意/ tmp旁边的箭头。这表明/ tmp实际上是另一个目录(在这种情况下为/ private/tmp)的符号链接。在大多数情况下(如果不是全部),符号链接的权限与目标(/ private/tmp)的权限无关。我敢打赌,如果你做了'ls -ld/private/tmp',你会看到苗条所指的权限。 – rmlan