【问题标题】:Running ElasticSearch as the root user以 root 用户身份运行 ElasticSearch
【发布时间】:2017-04-07 13:42:23
【问题描述】:

当我尝试使用 ./elasticsearch 启动 ElasticSearch 5.0 时出现以下错误:

[2016-11-23T13:44:09,507][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:116) ~[elasticsearch-5.0.1.jar:5.0.1]
    at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:103) ~[elasticsearch-5.0.1.jar:5.0.1]
    at org.elasticsearch.cli.SettingCommand.execute(SettingCommand.java:54) ~[elasticsearch-5.0.1.jar:5.0.1]
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:96) ~[elasticsearch-5.0.1.jar:5.0.1]
    at org.elasticsearch.cli.Command.main(Command.java:62) ~[elasticsearch-5.0.1.jar:5.0.1]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:80) ~[elasticsearch-5.0.1.jar:5.0.1]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:73) ~[elasticsearch-5.0.1.jar:5.0.1]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:96) ~[elasticsearch-5.0.1.jar:5.0.1]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:155) ~[elasticsearch-5.0.1.jar:5.0.1]
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:286) ~[elasticsearch-5.0.1.jar:5.0.1]
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:112) ~[elasticsearch-5.0.1.jar:5.0.1]
    ... 6 more

我切换到另一个用户并尝试sudo ./elasticsearch 并得到同样的错误。

如何以 root 用户身份启动 ElasticSearch?

【问题讨论】:

  • 第二行:java.lang.RuntimeException: can not run elasticsearch as root。稍后再发一次:Caused by: java.lang.RuntimeException: can not run elasticsearch as root.

标签: linux elasticsearch elasticsearch-plugin


【解决方案1】:

Elasticsearch 不能以 root 用户运行。 Elasticsearch 本身限制了这一点。当我们安装 elasticsearch 时,会自动创建一个名为 elasticsearch 的新用户和一个名为 elasticsearch 的组。可以使用以下命令检查条目

$ sudo less /etc/passwd | grep "elasticsearch"
$ sudo less /etc/group | grep "elasticsearch"

我们需要更改所有elasticsearch related files 的所有权。请按照以下步骤操作。

步骤:

1. 使用下面的示例 cmd 将所有 ES 相关文件的所有权从 root 更改为 elasticsearch。

$ sudo chown elasticsearch:elasticsearch -R /usr/share/elasticsearch
$ sudo chown elasticsearch:elasticsearch -R /var/log/elasticsearch
$ sudo chown elasticsearch:elasticsearch -R /var/lib/elasticsearch
$ sudo chown elasticsearch:elasticsearch -R /etc/default/elasticsearch
$ sudo chown elasticsearch:elasticsearch -R /etc/elasticsearch

2.打开/etc/default/elasticsearch文件并做以下事情

  a)JAVA_HOME=your/java/home/path
  b)add the following entries at the end
      i)   START_DAEMON=true
      ii)  ES_USER=elasticsearch
      iii) ES_GROUP=elasticsearch

3.现在开启elasticsearch服务并启动

  $ sudo systemctl enable elasticsearch
  $ sudo systemctl start elasticsearch
  $ sudo systemctl status elasticsearch

4.使用curl测试elasticsearch。假设你的主机 ip 是 192.168.5.194 并且 ES 在端口 9200 上运行

$ curl -X GET ‘192.168.5.194:9200’

完成!!

参考。 :https://stackoverflow.com/a/48390311/1445978

【讨论】:

    【解决方案2】:

    此问题的根本原因是: ElasticSearch 不允许从 root 所有者运行。 此问题还有另一种可能性“仅为 root 用户设置 Java 路径,而不为所有其他用户设置”。 此问题的解决方案:

    第一步: 通过命令将elasticSearch目录的所有权从root更改为其他用户。 $sudo chown -R current_User:Group_Name elasticsearch-5.5.0

    Setp 2:检查当前用户的类路径中的 Java 集[不仅适用于 root]。如果命令:$java -version 或 echo $JAVA_HOME 命令给出空结果。这意味着我们应该在类路径 [system env varible] 中为当前用户设置 Java,然后按照步骤 3 进行操作。 否则启动 elasticsearch 服务。

    第 3 步:编辑 /etc/profile 并根据您的系统目录添加两行 export JAVA_HOME="Java 目录位置"

    导出 PATH=$JAVA_HOME/bin:$PATH 跑步 $source source /etc/profile

    在此之后运行 elasticSearch 服务。它非常适合我。

    【讨论】:

      【解决方案3】:

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

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

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

      方法二:

      vi bin/elasticsearch
      

      为允许根添加属性:

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

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

      【讨论】:

      • 为了让方法 1 对我有用,我必须在设置更改之前添加一个 -E 标志。 bin/eleasticsearch -E -Des.insecure.allow.root=true -d
      • 此解决方法不再有效。似乎他们只是完全删除了这个选项。它绝对不适用于 ES 7.X。也许对于一些早期版本也是如此。
      【解决方案4】:

      我遇到了同样的问题,我不得不与另一个用户联系。但首先,我必须授予他执行 bin/elasticsearch 的权限。

      【讨论】:

      • 考虑将其发布为评论,或扩展以包含更多详细信息。
      【解决方案5】:

      回复有点晚,但现在仍然相关。 当我关注this 时,我遇到了同样的问题,最后的手段是更改解压缩文件夹的所有权。

      刚刚sudo chown <nonrootuser> <unzipped-es-folder> -R 成功了。

      PS 我是在 Ubuntu 17.04 LTS 上做的。

      【讨论】:

        【解决方案6】:

        从根文件夹运行 bin/elasticsearch 是一个常见错误。

        【讨论】:

        • 同意。 ElasticSearch 不应该以 root 身份运行是有原因的。请参阅此文档elastic.co/blog/…。他们这样做是为了防止生产环境中的支持问题。有人认为它们是在 docker 环境中运行的,应该以其他方式处理。请参阅此discuss.elastic.co/t/… 底线。小心并了解您在做什么。
        【解决方案7】:

        如果您尝试使用systemd 或作为服务 运行,请确保您的.service 文件以用户和组elasticsearch 的身份运行。您可以在服务字段下指定您的用户和组。

        通常位于/etc/systemd/system/elasticsearch.service:

        [Service]
        Type=simple
        ExecStart=/usr/share/elasticsearch/bin/elasticsearch
        Restart=on-failure
        RestartSec=10
        KillMode=process
        User=elasticsearch
        Group=elasticsearch
        

        【讨论】:

        • 就像一个魅力,我在一个盒子上设置了第二个 ES 实例,这解决了我的问题。
        【解决方案8】:

        -Ees.insecure.allow.root 方法对我不起作用,因为我使用的是 7.9.0 版。

        我懒得去chown方法,@Devasish提到的。

        相反,尝试了一个有点冗长的:

        为 elastic-search 创建一个非 root 用户:

        ubuntu ~ # adduser elasticuser
        

        必须使用adduser 命令,而不是用户添加。 adduser 将自动创建主目录。

        将elastic-search文件夹从root的主目录复制到elasticuser的主目录:

        ubuntu ~ # cp -R ./elasticsearch-7.9.0 /home/elasticuser/elasticsearch-7.9.0
        

        切换到非root用户:

        ubuntu ~ # su - elasticuser
        

        现在,从非 root 用户运行 elastic-search:

        elasticuser@ubuntu ~ $ ./elasticsearch-7.9.0/bin/elasticsearch
        

        【讨论】:

          【解决方案9】:

          为什么要以 root 用户身份运行所有内容。使用普通用户而不是 root 用户。

          切换到普通用户并运行它。如果您没有任何其他用户,请参阅 Linuxize document 创建用户。

          如果您无法以普通用户身份运行它,请检查文件的权限,使用 chmod 777 授予用户对文件或文件夹的完全访问权限。

          详情请咨询chmod wiki document

          如果您想使用 root 用户,请从弹性搜索文件夹中执行以下命令。

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

          重新运行弹性搜索。它肯定可以工作。

          【讨论】:

            【解决方案10】:

            这在 ES2 之前被问过 (How to run Elasticsearch 2.1.1 as root user in Linux machine)

            相同的解决方案可能适用于 5。

            如前所述,您可能不应该这样..

            【讨论】:

              【解决方案11】:

              在不授予sudo 权限的情况下创建单独的用户。 例如:adduser elasticsearch 然后将该文件夹的所有权授予该用户 例如:chown -R elasticsearch:elasticsearch elasticsearch-folder 然后切换到该用户 例如:su elasticsearch 现在尝试运行服务 例如:./elasticsearch-xxx/bin/elasticsearch

              【讨论】:

                【解决方案12】:

                在 centos 8 上,

                adduser elasticuser
                chown -R elasticuser:elasticsearch /usr/share/elasticsearch/
                chown -R elasticuser:elasticsearch /etc/sysconfig/elasticsearch
                chown -R elasticuser:elasticsearch /etc/elasticsearch
                chown -R elasticuser:elasticsearch /var/log/elasticsearch/
                chown -R elasticuser:elasticsearch /var/lib/elasticsearch
                

                运行弹性搜索:

                su elasticuser
                /usr/share/elasticsearch/bin/elasticsearch
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-07-08
                  • 2018-07-02
                  • 2017-06-22
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-04-27
                  相关资源
                  最近更新 更多