以 root 用户身份运行 ElasticSearch
Posted
技术标签:
【中文标题】以 root 用户身份运行 ElasticSearch【英文标题】:Running ElasticSearch as the root user 【发布时间】: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
.
【参考方案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://***.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
【讨论】:
以上是关于以 root 用户身份运行 ElasticSearch的主要内容,如果未能解决你的问题,请参考以下文章