如何在 Linux 机器上以 root 用户身份运行 Elasticsearch 2.1.1

Posted

技术标签:

【中文标题】如何在 Linux 机器上以 root 用户身份运行 Elasticsearch 2.1.1【英文标题】:How to run Elasticsearch 2.1.1 as root user in Linux machine 【发布时间】:2016-04-27 12:34:53 【问题描述】:

我正在尝试在我的 Linux 机器上运行 Elasticsearch 2.1.1,我是它的 root 用户。

当我尝试执行 Elasticsearch 时,出现以下错误:

Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root.
        at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:93)
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:144)
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:285)
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)
Refer to the log for complete error details.

我参考了互联网上的一些建议,他们提到以不同的用户身份运行它。我的方案是仅以 root 用户身份运行。如何在不以不同用户身份运行的情况下克服此问题。

【问题讨论】:

我不相信有办法绕过它,出于安全原因,您必须以其他用户身份运行它。 以 root 身份运行网络服务器是极其危险的。这决不能发生。特别是这个答案钉它:askubuntu.com/a/16201/35185请参考这个线程:askubuntu.com/questions/16178/why-is-it-bad-to-login-as-root 【参考方案1】:

基于以下code-snippet 看起来您应该能够通过启用属性来实现这一点 es.insecure.allow.root

例子:

bin/elasticsearch -Des.insecure.allow.root=true

【讨论】:

非常感谢。你的建议成功了,但现在我面临不同的错误。我在下面粘贴错误,Exception in thread "main" java.lang.IllegalStateException: Failed to obtain node lock, is the following location writable?: [/anvs/indexstore/mysample] Likely root cause: java.io.IOException: No locks available at sun.nio.ch.FileDispatcherImpl.lock0(Native Method) at sun.nio.ch.FileDispatcherImpl.lock(FileDispatcherImpl.java:90) at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1082) 你检查文件夹/anvs/indexstore/mysample的权限了吗? 当前答案在最新的 elasticsearch 中不再有效。 @rjurney。是的,上述选项在 5.X 及更高版本中不起作用。有什么办法可以克服吗? 嗨,你找到 ES5 的答案了吗?【参考方案2】:

    打开脚本文件:

    vi bin/elasticsearch

    为允许根添加属性:

    ES_JAVA_OPTS="-Des.insecure.allow.root=true"

    保存并关闭。 您现在可以从 root 启动。

祝你好运。

【讨论】:

它适用于 2.4.1。 elasticsearch 目录的所有者是'elasticsearch'【参考方案3】:

你也可以创建别名

别名 elasticsearch='elasticsearch -Des.insecure.allow.root=true'

bashrc 文件中添加以上行,之后 elasticsearch 命令将起作用。

【讨论】:

@BoPennings 是的,它在 5.X 版本中已被弃用。您必须在您的框中创建一个非 root 用户,并且您必须将 elasticsearch 用户名和组更改为新创建的非 root 用户然后你必须开始这个过程。【参考方案4】:

您应该更改 elasticsearch-X.X.X 的所有者和组并以该用户身份运行。它适用于 elasticsearch-5.3.0

【讨论】:

【参考方案5】:

有两种解决方法可以解决此问题:

解决方案 1: 下载 zip 文件 n 解压缩,然后按照以下命令开始

bin/elasticsearch -Des.insecure.allow.root=true -d

解决方案 2:

vi bin/elasticsearch

添加属性以允许root运行两个实例:

ES_JAVA_OPTS="-Des.insecure.allow.root=true"

保存并关闭。 您现在可以从 root 开始。

【讨论】:

【参考方案6】:

我们需要在 Linux 服务器中创建一个新用户说 user = es 并授予sudo chown -R es elasticsearch-6.1.0/ 然后你可以切换'es'用户帐户并运行./elasticsearch-6.1.0/bin/elasticsearch

【讨论】:

elastic.co 不支持以 root 身份运行 elasticsearch

以上是关于如何在 Linux 机器上以 root 用户身份运行 Elasticsearch 2.1.1的主要内容,如果未能解决你的问题,请参考以下文章

如何在官方 docker php 映像上以非 root 用户身份运行 composer

linux_添加一个普通用户

如何在 Heroku 上以 root 身份运行?

Sudo漏洞允许非特权Linux和macOS用户以root身份运行命令

升级sudo的版本

Golang如何让子进程以另一个用户身份运行