以root用户身份运行弹性搜索

时间:2016-11-23 13:50:59

标签: linux elasticsearch elasticsearch-plugin

当我尝试使用命令./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用户身份开始弹性搜索?

12 个答案:

答案 0 :(得分:7)

此问题的根本原因是: 不允许ElasticSearch从root用户运行。 这个问题还有另一种可能性"仅为root用户设置Java路径,而不是为所有其他用户设置#34;。 解决这个问题:

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

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

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

export PATH = $ JAVA_HOME / bin:$ PATH 跑 $ source source / etc / profile

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

答案 1 :(得分:6)

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 :(得分:2)

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

答案 3 :(得分:2)

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

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

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

<强>方法2:

vi bin/elasticsearch

为允许root添加属性:

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

-Ees.insecure.allow.root方法不适用于我,就像我在7.9.0版本中一样。

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

相反,尝试了一些冗长的操作:

为弹性搜索创建非root用户:

ubuntu ~ # adduser elasticuser

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

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

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

切换到非root用户:

ubuntu ~ # su - elasticuser

现在,从非root用户运行弹性搜索:

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

答案 6 :(得分:1)

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

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

如果您不能以普通用户身份运行它,请检查文件的权限,使用 chmod 777 为文件或文件夹提供对该用户的完全访问权限。

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

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

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

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

答案 7 :(得分:0)

之前曾询问ES2(How to run Elasticsearch 2.1.1 as root user in Linux machine

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

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

稍晚的答复,但现在仍然有用。 当我遵循this时,我遇到了同样的问题,最后的办法是更改已解压缩的文件夹的所有权。

sudo chown <nonrootuser> <unzipped-es-folder> -R确实做到了。

P.S我是在Ubuntu 17.04 LTS上完成的。

答案 10 :(得分:0)

如果您尝试使用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

答案 11 :(得分:0)

在 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
相关问题