[英]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.