Ⅰ linux 伺服器 如何進行安全檢查
1、安全審核:強制訪問控制
2、遠程登錄:正確配置 SSH (密鑰登錄),甚至可以不版用SSH,僅採用遠控卡
3、定期權維護:安全巡查,更新補丁
伺服器安全在Linux運維中非常重要,你也可以使用一下安全軟體協助:如看門狗
更多Linux運維相關的知識,請參考linuxprobe.com
Ⅱ 配置Elasticsearch
Elasticsearch船隻具有良好的默認值,並且只需要很少的配置。可以在運行的集群上使用集群更新設置API更改大多數設置。
配置文件應該包含特定於節點的設置(例如node.name和路徑),或者節點為了能夠加入集群而需要的設置,例如 cluster.name 和 network.host 。
Elasticsearch有三個配置文件:
這些文件位於config目錄中,其默認位置取決於安裝是來自存檔分發版(tar.gz或zip)還是包分發版(Debian或RPM包)。
對於存檔發行版,config目錄位置默認為 $ES_HOME/config 。配置目錄的位置可以通過 ES_PATH_CONF 環境變數改變,如下所示:
或者,您可以通過命令行或shell配置文件導出ES_PATH_CONF環境變數。
對於包分發,配置目錄位置默認為 /etc/elasticsearch 。配置目錄的位置也可以通過 ES_PATH_CONF 環境變數更改,但是請注意,僅在shell中設置是不夠的。相反,這個變數來源於 /etc/default/elasticsearch (用於Debian包)和 /etc/sysconfig/elasticsearch (用於RPM包)。您需要相應地在其中一個文件中編輯 ES_PATH_CONF=/etc/elasticsearch 條目,以更改配置目錄的位置。
配置格式為YAML。下面是更改數據和日誌目錄路徑的示例:
設置也可以扁平化如下:
在YAML中,你可以將非標量值格式化為序列:
雖然不太常見,但你也可以將非標量值格式化為數組:
使用${…}符號將被替換為環境變數的值。例如:
環境變數的值必須是簡單字元串。使用逗號分隔的字元串來提供Elasticsearch將解析為列表的值。例如,Elasticsearch將以下字元串分割為 ${HOSTNAME} 環境變數的值列表
集群和節點設置可以根據配置方式進行分類:
您可以使用 集群更新設置API 在運行的集群上配置和更新動態設置。您還可以使用 elasticsearch.yml 在未啟動或關閉的節點上本地配置動態設置。
使用集群更新設置API進行的更新可以是持久的(跨集群重啟應用),也可以是短暫的(在集群重啟後重置)。您還可以通過使用API為臨時或持久設置賦值為空來重置它們。
如果您使用多個方法配置相同的設置,Elasticsearch將按照以下優先順序應用這些設置:
例如,您可以應用瞬變設置來覆蓋持久設置或 elasticsearch.yml 設置。然而,對 elasticsearch.yml 的更改,不會覆蓋已定義的瞬態或持久設置。
最好使用集群更新設置API設置動態的集群范圍設置,並使用 elasticsearch.yml 僅用於本地配置。使用集群更新設置API可以確保所有節點上的設置是相同的。如果您不小心在 elasticsearch.yml 中配置了不同的設置。在不同的節點上,很難注意到差異。
靜態設置只能在未啟動或關閉的節點上使用 elasticsearch.yml 進行配置。
必須在集群中的每個相關節點上設置靜態設置
Elasticsearch開始時只需要很少的配置,但是在生產環境中使用集群之前,有很多方面需要考慮:
Elasticsearch將創建索引的數據寫入索引,將數據流寫入數據目錄。Elasticsearch將自己的應用程序日誌(其中包含關於集群運行狀況和操作的信息)寫入日誌目錄
對於macOS .tar.gz、Linux .tar.gz和Windows .zip安裝,數據和日誌默認是 $ES_HOME 的子目錄。但是,在升級過程中, $ES_HOME 中的文件有被刪除的風險
In proction, we strongly recommend you set the path.data and path.logs in elasticsearch.yml to locations outside of $ES_HOME . Docker , Debian , RPM , macOS Homebrew , and Windows .msi installations write data and log to locations outside of $ES_HOME by default.
To avoid errors, only Elasticsearch should open files in the path.data directory. Exclude the path.data directory from other services that may open and lock its files, such as antivirus or backup programs.
Supported path.data and path.logs values vary by platform
只有當一個節點與集群中的所有其他節點共享 cluster.name 時,該節點才能加入集群。默認名稱是 elasticsearch ,但是您應該將其更改為描述集群用途的適當名稱。
不要在不同的環境中重用相同的集群名稱。否則,節點可能會加入錯誤的集群
Elasticsearch使用 node.name 作為Elasticsearch特定實例的人類可讀標識符。這個名稱包含在許多api的響應中。當Elasticsearch啟動時,節點名默認為機器的主機名,但是可以在 elasticsearch.yml 中顯式配置
預設情況下,Elasticsearch只綁定到 127.0.0.1 和 [::1] 等環回地址。這對於在單個伺服器上運行一個或多個節點的集群進行開發和測試已經足夠了,但是 彈性生產集群 必須包含其他伺服器上的節點。有許多 網路設置 ,但通常你只需要配置 network.host :
當你為 network.host 提供值時。Elasticsearch假定您正在從開發模式轉向生產模式,並將一些系統啟動檢查從警告升級到異常。看看 開發和生產模式 之間的區別。
在投入生產之前,配置兩個重要的發現和集群形成設置,以便集群中的節點能夠相互發現並選擇一個主節點。
Elasticsearch可以開箱即用,無需任何網路配置,它將綁定到可用的環回地址,並掃描本地埠 9300 到 9305 ,以便與運行在同一伺服器上的其他節點連接。這種行為提供了一種無需進行任何配置的自動集群體驗。
當您希望與其他主機上的節點形成集群時,使用 靜態 discovery.seed_hosts 設置. This setting provides a list of other nodes in the cluster that are master-eligible and likely to be live and contactable to seed the discovery process .
此設置接受集群中所有符合主節點的地址的YAML序列或數組。每個地址可以是一個IP地址,也可以是通過DNS解析為一個或多個IP地址的主機名。
當您第一次啟動Elasticsearch集群時, 集群引導 步驟將確定在第一次選舉中計票的符合主資格的節點集。在 開發模式 下,如果沒有配置發現設置,這個步驟將由節點自己自動執行。
因為自動引導 本身就不安全 ,,所以在生產模式下啟動新集群時,必須顯式列出符合主資格的節點,這些節點的投票應該在第一次選舉中計算。您可以使用集群設置此列表。 initial_master_nodes 設置。
在集群第一次成功形成之後,刪除每個節點配置中的 Initial_master_nodes 設置。在重新啟動集群或向現有集群添加新節點時,不要使用此設置。
通過節點的 node.name 標識初始主節點, 該節點默認為主節點的主機名。請確保 cluster.initial_master_nodes 值 與 node.name 完全匹配如果您使用完全限定的域名(FQDN),例如master-node-a.example.com作為您的節點名,那麼您必須在此列表中使用FQDN。相反,如果node.name是沒有任何尾隨限定符的裸主機名,您也必須省cluster.initial_master_nodes中的尾隨限定符如果您使用完全限定的域名(FQDN),例如 master-node-a.example.com 作為您的節點名, 那麼您必須在此列表中使用FQDN。相反,如果f node.name 是沒有任何尾隨限定符的裸主機名,您也必須省略 cluster.initial_master_nodes 中的尾隨限定符。
請參見 bootstrapping a cluster 以及 發現和集群形成設置 .
默認情況下,Elasticsearch會根據節點的 角色 和總內存自動設置JVM堆大小。對於大多數生產環境,我們建議使用默認大小。
自動堆大小需要 bundled JDK ,如果使用自定義JRE位置,則需要Java 14或更高版本的JRE。
如果需要,您可以通過手動 設置JVM堆大小 來覆蓋默認大小
默認情況下,Elasticsearch將JVM配置為將堆內存溢出異常轉儲到默認數據目錄。在RPM和Debian軟體包中,數據目錄是/var/lib/elasticsearch。在Linux、MacOS和Windows發行版上,數據目錄位於Elasticsearch安裝的根目錄下。
如果此路徑不適合接收堆轉儲,請修改 -XX:HeapDumpPath=… jvm.options
默認情況下,Elasticsearch啟用垃圾收集(GC)日誌。這些是在jvm中配置的 jvm.options 並輸出到與Elasticsearch日誌相同的默認位置。默認配置每64mb輪換一次日誌,最多可以消耗2gb的磁碟空間。
您可以使用 JEP 158: Unified JVM Logging 中描述的命令行選項重新配置JVM日誌。除非您更改了默認jvm。選項文件,Elasticsearch默認配置將應用於您自己的設置之外。要禁用默認配置,首先通過提供 -Xlog:disable 選項禁用日誌記錄,然後提供您自己的命令行選項。這將禁用所有JVM日誌記錄,因此一定要檢查可用選項並啟用所需的所有內容。
要查看原始JEP中未包含的其他選項,請參見使用 JVM統一日誌框架啟用日誌記錄 .
Change the default GC log output location to /opt/my-app/gc.log by creating $ES_HOME/config/jvm.options.d/gc.options with some sample options:
Configure an Elasticsearch Docker container to send GC debug logs to standard error ( stderr ). This lets the container orchestrator handle the output. If using the ES_JAVA_OPTS environment variable, specify:
默認情況下,Elasticsearch使用啟動腳本直接在系統臨時目錄下創建的私有臨時目錄。
在某些Linux發行版上,如果最近沒有訪問過/tmp中的文件和目錄,系統實用程序將清除它們。如果需要臨時目錄的特性長時間不使用,那麼在Elasticsearch運行時,這種行為會導致私有臨時目錄被刪除。如果隨後使用需要此目錄的特性,則刪除私有臨時目錄會導致問題。
如果您使用.deb或.rpm包安裝Elasticsearch,並在systemd下運行它,那麼Elasticsearch使用的私有臨時目錄將被排除在定期清理之外。
如果您打算在Linux或MacOS上長時間運行.tar.gz發行版,請考慮為Elasticsearch創建一個專用的臨時目錄,該目錄不在將舊文件和目錄清除的路徑下。這個目錄應該設置許可權,以便只有作為Elasticsearch運行的用戶才能訪問它。然後,在啟動Elasticsearch之前,設置$ES_TMPDIR環境變數指向這個目錄。
默認情況下,Elasticsearch將JVM配置為將致命錯誤日誌寫入默認日誌目錄。對於 RPM 和 Debian 軟體包, 這個目錄是 /var/log/elasticsearch . On Linux and MacOS and Windows 發行版, logs 目錄位於Elasticsearch安裝根目錄下。
這些日誌是JVM遇到致命錯誤(例如分段錯誤)時產生的。如果此路徑不適合接收日誌,請修改 -XX:ErrorFile=... 在 jvm.options 條目。
在災難中,快照可以防止數據永久丟失。快照生命周期管理是對集群進行定期備份的最簡單方法。有關更多信息,請參見備份集群。
在災難中, 快照 可以防止數據永久丟失. 快照生命周期管理 是對集群進行定期備份的最簡單方法. 有關更多信息, 請參見 備份集群 。
備份集群的唯一可靠和受支持的方法是使用快照。您不能通過復制Elasticsearch集群節點的數據目錄來備份該集群。不支持從文件系統級備份恢復任何數據的方法。如果試圖從這樣的備份恢復集群,可能會出現損壞、丟失文件或其他數據不一致的報告,或者看起來已經成功地悄無聲息地丟失了一些數據。
有些設置是敏感的,僅依靠文件系統許可權來保護它們的值是不夠的。對於這個用例,Elasticsearch提供了一個密鑰存儲庫和 elasticsearch -keystore 工具 來管理密鑰存儲庫中的設置。
只有重新啟動Elasticsearch後,對keystore的所有修改才會生效。
這些設置就像elasticsearch中的常規設置一樣。Yml配置文件,需要在集群中的每個節點上指定。目前,所有安全設置都是特定於節點的設置,在每個節點上必須具有相同的值。
Just like the settings values in elasticsearch.yml , 對密鑰存儲庫內容的更改不會自動應用到運行的Elasticsearch節點。重新讀取設置需要重新啟動節點。但是,某些安全設置被標記為 可重新載入 。. Such settings can be re-read and applied on a running node .
所有安全設置的值(無論是否可重新載入)必須在所有集群節點上相同。在進行所需的安全設置更改後,使用 bin/elasticsearch-keystore add 命令, call:
keystore-password : 用於加密Elasticsearch密鑰庫的密碼
此API在每個集群節點上解密並重新讀取整個密鑰存儲庫,但只應用可重新載入的安全設置。對其他設置的更改直到下次重啟才會生效。一旦調用返回,重新載入就完成了,這意味著依賴於這些設置的所有內部數據結構都已更改。所有的設置都應該從一開始就具有新值。
當更改多個可重新載入的安全設置時,在每個集群節點上修改所有安全設置,然後發出 reload_secure_settings 調用,而不是在每次修改後重新載入。
有可重新載入的安全設置: