以root用户身份运行ElasticSearch

44

当我尝试使用./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: 无法以root身份运行elasticsearch。稍后再次出现:Caused by: java.lang.RuntimeException: 无法以root身份运行elasticsearch - Gavin
12个回答

30

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

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

我们需要更改所有与elasticsearch相关的文件的所有权。请按照下面提到的步骤进行操作。

步骤:

1.使用以下示例命令将所有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://dev59.com/d6jja4cB1Zd3GeqP-Wlr#48390311


只需要第一步就足够了。我按照这个链接的步骤进行操作:https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-ubuntu-22-04,然后按照答案中第一步所提到的权限更改进行了操作。 - hafiz031
第二步 - 对于像CentOS、Rocky这样的RPM系统,默认路径是"/etc/sysconfig/elasticsearc"。 - yehonatan yehezkel

11

此问题的根本原因是: ElasticSearch不允许以root身份运行。 这个问题可能存在另一种情况,即“仅为root用户设置了Java路径,而不是所有其他用户”。 解决方案:

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

步骤2:检查当前用户[而不仅仅是root]的classpath中是否设置了Java。 如果命令:$java -version或echo $JAVA_HOME 返回空结果,则意味着我们应该为当前用户设置Java类路径[系统环境变量],然后执行步骤3。否则启动elasticsearch服务。

步骤3:编辑/etc/profile并添加两行,根据您的系统目录设置 export JAVA_HOME="Java dir location"

export PATH=$JAVA_HOME/bin:$PATH 运行 $source source /etc/profile

完成后运行elasticSearch服务。它对我完美地起作用了。


5

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

方法1:下载zip文件并解压缩,然后按照以下命令启动

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

Method2:

vi bin/elasticsearch

添加允许root用户属性:
ES_JAVA_OPTS="-Des.insecure.allow.root=true"

保存并关闭。 你现在可以使用root账户开始操作。


为了让方法1对我起作用,我必须在设置更改之前添加一个-E标志。 bin/eleasticsearch -E -Des.insecure.allow.root=true -d - BrettJ
5
这个解决方法不再可行了。看起来他们彻底移除了这个选项。对于 ES 7.X,它肯定不起作用。可能对一些早期版本也是如此。 - VAD

4

我也遇到了同样的问题,需要与另一个用户连接。但首先,我必须授予他执行bin/elasticsearch的权限。


3
考虑将此作为评论发布,或扩展以包含更多详细信息。 - Bond - Java Bond

3
有点晚了,但仍然相关。 当我按照这个链接操作时,遇到了同样的问题。最后的办法是更改解压缩文件夹的所有权。 只需使用sudo chown <nonrootuser> <unzipped-es-folder> -R即可解决。 P.S 我在Ubuntu 17.04 LTS上进行操作。

3

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

它通常位于 /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实例,这解决了我的问题。 - Allen

1

常见错误是从根目录运行bin/elasticsearch。


1
同意。ElasticSearch不应该以root身份运行的原因是有道理的。请参考此文档https://www.elastic.co/blog/bootstrap_checks_annoying_instead_of_devastating。他们这样做是为了防止在生产环境中出现支持问题。一些人认为他们正在运行docker环境,因此应该以其他方式处理。请参考https://discuss.elastic.co/t/why-is-it-elasticsearch-is-not-allowed-to-run-as-root/60413。底线是要小心并了解自己在做什么。 - g5thomas

1

为什么要以root用户身份运行所有内容?使用普通用户代替root用户。

切换到普通用户并运行它。 如果您没有其他用户,请参考Linuxize文档创建一个用户。

如果您不能以普通用户身份运行它,则检查文件的权限,使用 chmod 777<elastic_search_folder>将完全访问权限授予用户。

有关更多详细信息,请参阅chmod wiki文档

如果您想使用root用户,则从elastic search文件夹执行以下命令。

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


重新运行Elasticsearch。它应该绝对可行。

0

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接