tomcat中exec引起的權限問題

tomcat中exec引起的權限問題


一、場景描述

在之前的工作中與某第三方集成(接入他們的某個功能),需要獲取服務器Mac地址鑑權;在開發過程中一點問題沒有(開發環境是windows),測試環境也測試通過(測試環境是linux,但tomcat用的root啓動),但部署到準生產環境後(準生產環境使用的是普通用戶啓動tomcat),簽章的過程中拋出Exception,提示未授權,並且獲取到的Mac爲空。

出現這個情況後,懷疑可能是部署應用的user可能沒有獲取Mac地址的權限,當即使用XShell連接到準生產服務器用啓動應用的user執行ifconfig -a(通過反編譯看到他們獲取Mac地址的代碼是使用的這個命令)看能否獲取到Mac地址,不出意料的是完全具有權限,可以獲取到Mac地址。當即與第三方對接人員聯繫,他們回覆說可能是沒有權限,當他們知道user具有ifconfig -a的權限時,給出答覆說他們那邊看看怎麼回事(結果是他們那邊試了沒有問題,叫我們用root啓動試試。。。。。。。。。);後來用root啓動後,果然一點問題沒有,但生產環境我們不允許使用root啓動tomcat應用。。。。。。。

後來使用tomcat的遠程調試功能進行調試(catalina.sh jpda start),發現完全麼有一點問題,Mac能夠正常獲取,能夠正常鑑權,功能使用正常;但是通過startup.sh啓動tomcat做測試時,仍舊拋出Exception,提示未授權,Mac地址爲空。

經過分析,使用catalina.sh啓動tomcat,一點問題麼有;只要一使用startup.sh啓動,必然出現鑑權失敗(獲取不到Mac地址)。通過查看startup.sh和catalina.sh腳本內容後發現,startup.sh內部其實也是調用的catalina.sh,只是比手動調用多了一些參數配置和一個exec,把exec去掉後,Mac地址獲取成功,鑑權通過。

EXECUTABLE=catalina.sh

# Check that target executable exists
if $os400; then
  # -x will Only work on the os400 if the files are: 
  # 1. owned by the user
  # 2. owned by the PRIMARY group of the user
  # this will not work if the user belongs in secondary groups
  eval
else
  if [ ! -x "$PRGDIR"/"$EXECUTABLE" ]; then
    echo "Cannot find $PRGDIR/$EXECUTABLE"
    echo "This file is needed to run this program"
    exit 1
  fi
fi 

exec "$PRGDIR"/"$EXECUTABLE" start "$@"

雖然不知道具體什麼原因導致的,但既然是exec引起的,而又不能使用root啓動tomcat,所以最後只得先將startup.sh中的exec去掉以應對上線需求。


二、exec命令介紹

http://man.linuxde.net/exec上看到關於exec的介紹,

exec命令用於調用並執行指令的命令。exec命令通常用在shell腳本程序中,可以調用其他的命令。如果在當前終端中使用命令,則當指定的命令執行完畢後會立即退出終端。


三、一些猜測

因此猜想exec啓動的tomcat中執行ifconfig -a是不是會開啓一個“臨時終端”,執行完畢後立即退出這個“臨時終端”,所以程序獲取不到命令輸出的結果?

但是爲什麼root啓動的tomcat就可以獲取到呢?


發佈了26 篇原創文章 · 獲贊 15 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章