簡體   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