關於CentOS上以低權限用戶自啓動Tomcat,Redis這類應用服務器的坑

工作太忙了,許久沒有上來寫個文,今天給大家寫一下關於CentOS上以低權限用戶自啓動Tomcat,Redis這類應用服務器的坑。

最近接手了一個NLP分佈式平臺架構,實施過程中運維工程師給我埋了一個致命的BUG,Redis服務由於使用了Root用戶運行,且,雲主機的虛擬外網IP與內網IP之間互相映射,加至沒有注意到IPTABLE的設定,致使雖然Redis是隻監聽了內網IP,但,其實情況是,外網掃描端口時,仍然能順利通過“未授權”方式或暴力破解方式,擊倒Redis天生的軟肋(弱爆的密碼策略),最終,達到“提權”的目的。

今天不對***方式展開,感興趣的朋友自行網上科普。我們言歸正傳,關於使用低權限用戶啓動相關應用服務器(Nginx,Mysql,Tomcat,Redis...)的做法,在網上良多,大多是Ctrl+C & Ctrl+V,對細節的說明一筆帶過,雖然沒什麼大不了,但,卻難倒了這位小工程師!!!

例子中的操作系統爲:CentOS 7
如:
adduser tomcat
su - tomcat -p -c '/user/local/tomcat/bin/startup.sh';

su - tomcat /user/local/tomcat/bin/startup.sh

絕大多數的 度娘 搜索出來的都是這一流。

可我們並不能adduser tomcat之後就不管了,一般都會想到禁用tomcat的登陸能力,於是乎就到/etc/passwd中給 tomcat 加上 /sbin/nologin。

好吧!再次執行上述的腳本的時候,就會莫名其妙地報錯了....

原因:

問題不是什麼新鮮事,包括一些老派的運維專家估計都遇過這個坑!su - 用戶名 這就相當轉登到 另一個用戶賬號,可你前面已經修改了/sbin/nologin,禁止了以該身份執行登入操作,當然會提示你該用戶未啓用或被禁用,不報這個錯纔怪!(除非是操作系統有BUG)。

解決:
那麼我們是不是非要將 /sbin/nologin修改回來(/bin/bash),No! 細仔地閱讀一下su 參數說明 你會發現當中有一個可選參數 -s ,這個不起眼的參數就是解決問題的關鍵所在。
我們可以通過

su - tomcat -s /bin/sh -c '/usr/local/tomcat/bin/startup.sh'

> 這樣來被現 變更用戶並指定執行系統中的sh,開闢一個通道,結合-c指定通道接下來的要執行的命令爲 startup.sh,相當於在執行 nologin之前完成一次sh、startup.sh,然後自動退回到Root用戶下。
最後,ps aux|grep tomcat(服務名稱) 列出該服務的進程,啓動用戶順利變更爲tomcat(用戶名)了。

好吧!問題至此已經解說完畢,其它情況基本類同。
注意:
別忘記了給於tomcat這個用戶對startup.sh的執行權限,否則,會因權限不足而No permission 的錯誤。

晚安!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章