[英]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’
完成!!
此问题的根本原因是:不允许从 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
重新运行弹性搜索。 它应该肯定有效。
创建一个单独的用户而不授予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.