Logstash報(bào)錯(cuò):An unexpected error occurred! {:error=>#<RuntimeError: Logstash cannot be run as superuser.>
問題現(xiàn)象
以root用戶執(zhí)行命令 ./logstash -e '' 報(bào)錯(cuò)

原因分析
收到這個(gè)錯(cuò)誤,根本原因是您使用了 sudo 命令或者直接以 root 用戶身份執(zhí)行了 Logstash 測試命令。
例如,您可能執(zhí)行了類似以下的命令:
sudo bin/logstash -e 'input { stdin { } } output { stdout {} }' # 或者 sudo bin/logstash -t -f your_config.conf
解決方案
解決方案很簡單:創(chuàng)建一個(gè)專用的普通用戶來運(yùn)行 Logstash。
請按照以下步驟操作:
-
創(chuàng)建一個(gè)新的系統(tǒng)用戶(例如
logstash)
如果還沒有專門用戶,請創(chuàng)建一個(gè)。通常使用--no-create-home和--shell /bin/false選項(xiàng)來限制這個(gè)用戶的權(quán)限,增強(qiáng)安全性。sudo useradd --system --no-create-home --shell /bin/false logstash
-
更改 Logstash 目錄及其文件的所有權(quán)
將 Logstash 的安裝目錄(以及其需要讀寫的數(shù)據(jù)、日志目錄)的所有權(quán)賦予新創(chuàng)建的用戶。# 假設(shè)你的 Logstash 安裝在 /usr/share/logstash sudo chown -R logstash:logstash /usr/share/logstash sudo chown -R logstash:logstash /var/lib/logstash # 數(shù)據(jù)目錄,如果存在 sudo chown -R logstash:logstash /var/log/logstash # 日志目錄,如果存在
注意:根據(jù)你的實(shí)際安裝路徑和配置進(jìn)行調(diào)整。如果你使用 tar.gz 包安裝,路徑可能在你解壓的目錄下。
-
以普通用戶身份運(yùn)行測試命令
現(xiàn)在,切換到logstash用戶或者使用sudo -u來執(zhí)行命令。# 方式一:切換到 logstash 用戶再執(zhí)行sudo -u logstash bash cd /usr/share/logstash bin/logstash -e 'input { stdin { } } output { stdout {} }'
# 方式二:直接使用 sudo -u 執(zhí)行單條命令(更推薦)sudo -u logstash /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'
# 測試配置文件語法sudo -u logstash /usr/share/logstash/bin/logstash -t -f /path/to/your_config.conf -
(對于生產(chǎn)環(huán)境)配置 Systemd 服務(wù)文件
如果你是通過官方包(如 RPM 或 DEB)安裝的,通常已經(jīng)自帶了一個(gè) systemd 服務(wù)文件(/etc/systemd/system/logstash.service),并且默認(rèn)就是以logstash用戶運(yùn)行的。你只需要確保服務(wù)文件中的用戶設(shè)置正確,然后使用 systemctl 來管理即可。# 啟動(dòng) Logstash 服務(wù) sudo systemctl start logstash # 設(shè)置開機(jī)自啟 sudo systemctl enable logstash # 查看狀態(tài) sudo systemctl status logstash
補(bǔ)充說明:為什么在測試時(shí)也會(huì)遇到?
即使你只是簡單地測試 stdin/stdout,Logstash 的啟動(dòng)過程也會(huì)檢查執(zhí)行它的用戶身份。這個(gè)安全檢查發(fā)生在任何實(shí)際處理邏輯之前,所以即使是最簡單的測試,只要是以 root 運(yùn)行,就一定會(huì)被阻止。
總結(jié)
根本原因:使用了 sudo 或 root 用戶直接運(yùn)行 logstash 命令。
解決方案:
-
為 Logstash 創(chuàng)建一個(gè)專用的非 root 用戶(如
logstash)。 -
將相關(guān)文件和目錄的所有權(quán)賦予該用戶。
-
始終使用這個(gè)專用用戶來啟動(dòng)、測試和運(yùn)行 Logstash。
這樣做不僅解決了眼前的錯(cuò)誤,也遵循了服務(wù)器安全運(yùn)維的最佳實(shí)踐。
本文來自博客園,作者:業(yè)余磚家,轉(zhuǎn)載請注明原文鏈接:http://www.rzrgm.cn/yeyuzhuanjia/p/19048791

浙公網(wǎng)安備 33010602011771號