繁体   English   中英

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

[英]Run elastic search as root user

当我尝试使用命令./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 不能以 root 用户运行。 Elasticsearch 本身对此进行了限制。 当我们安装 elasticsearch 时,会自动创建一个名为 elasticsearch 的新用户和名为 elasticsearch 的组。 可以使用以下命令检查条目

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

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

步骤:

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

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

步骤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 dir location"

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

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

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

方法一:下载 zip 文件 n 解压后按以下命令启动

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

方法二:

vi bin/elasticsearch

添加允许 root 的属性:

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

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

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

回复有点晚,但现在仍然相关。 我在遵循此操作时遇到了同样的问题,最后的方法是更改​​解压缩的文件夹的所有权。

只是sudo chown <nonrootuser> <unzipped-es-folder> -R做到了这一点。

PS 我是在 Ubuntu 17.04 LTS 上做的。

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

如果您尝试使用systemd或作为服务运行,请确保您的.service文件以用户和组.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

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

而且我懒得去使用@Devasish提到的chown方法。

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

为elastic-search创建一个非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 用户运行 elastic-search:

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

为什么要以 root 用户身份运行一切。 使用普通用户而不是 root 用户。

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

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

请参阅chmod wiki 文档以获取更多详细信息。

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

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

重新运行弹性搜索。 它应该肯定有效。

这是 ES2 之前问过的( 如何在 Linux 机器中以 root 用户身份运行 Elasticsearch 2.1.1

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

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

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

在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM