未經許可安裝和解除安裝 Java
客戶提供了一個 Windows Server 2012R2 實例用作我們的伺服器。今天早上(7 月 25 日)我重新連接到盒子以更改我的密碼,並立即提示 Java 安裝成功並解除安裝舊版本的 Java。
這是令人震驚的,因為我們的伺服器應用程序是基於 Java 的,並且目前執行在舊版本的 Java 上(這對我們的目的來說很好),如果您刪除它正在使用的版本,解除安裝舊版本的 Java 可能會導致我們的伺服器應用程序失敗!
當然,我拒絕刪除舊版本的 Java,但我和我的同事對我什至被提示感到不安。如果其他人在不知道我們的 Java 依賴關係的情況下登錄,他們可能會刪除舊版本。
我檢查了我的 Java 更新設置,發現它被設置為檢查,但在下載之前會提示。(因為我什至禁用了檢查。)
我們進一步調查並在事件查看器中發現,在 7 月 20 日中午左右,盒子上安裝了新版本的 Java(8 更新 101),顯然我已經完成了(或者使用我的使用者 ID 完成了)。但是,我們知道我沒有這樣做,因為那天我在黃石國家公園度假,沒有網路!我的使用者 ID 是具有管理員權限的 AD 帳戶,但名為“smmccants”並且沒有共享密碼。我確實在伺服器上執行了一個會話(我通常斷開連接而不是註銷)。
今天早上(2016 年 7 月 25 日上午 10:00 之前)重新連接並與 Java 對話框互動時,我無法在事件查看器中找到任何有趣的東西。
我們想了解發生了什麼,並在未來防止它發生。關於這如何自動發生以及我們應該在哪裡尋找線索的任何想法?
以下是我在 EventViewer 中找到的日誌。
2016 年 7 月 20 日上午 11:59:44 來自事件查看器(來源:MsiInstaller):
開始 Windows 安裝程序事務:C:\Users\smmccants\AppData\LocalLow\Oracle\Java\jre1.8.0_101\jre1.8.0_101full.msi 客戶端程序 ID:87064
來自 MsiInstaller 於 2016 年 7 月 20 日上午 12:00:29:
產品:Java 8 Update 101 – 安裝成功完成
Windows Installer 安裝的產品。產品名稱:Java 8 Update 101。產品版本:8.0.1010.13。產品語言:1033 製造商:甲骨文公司。安裝成功或錯誤狀態:0。
結束 Windows 安裝程序事務:C:\Users\smmccants\AppData\LocalLow\Oracle\Java\jre1.8.0_101\jre1.8.0_101full.msi。客戶端程序 ID:87064
開始 Windows Installer 事務:{4A03706f-666A-4037-7777-5F2748764D10}。客戶端程序 ID:87064
然後從 RestartManager (不管是什麼……):
開始會話 0 - 2016-07-20T17:00:29.904899600Z
最後,我們得到一個新的時間戳 7/20/16 12:00:39 和 MsiInstaller 報告:
產品:Java Auto Updater – 刪除成功完成。
誰下令刪除,他們是如何通過我的使用者帳戶進行刪除的?可能是 Java 8 Update 101 安裝過程的一部分。
Windows Installer 刪除了該產品。產品名稱:Java 自動更新程序。產品版本:2.8.77.3 產品語言:1033 製造商:Oracle Corporation。刪除成功或錯誤狀態:0。
結束 Windows 安裝程序事務:{4A03706f-666A-4037-7777-5F2748764D10}。客戶端程序 ID:87064
開始 Windows 安裝程序事務:C:\Users\smmccants\AppData\LocalLow\Oracle\Java\jre1.8.0_101\au.msi。客戶端程序 ID:87064
現在中午 12:00:40
產品:Java Auto Updater – 安裝成功完成。
Windows Installer 安裝了產品。產品名稱:Java 自動更新程序。產品版本 2.8.101.13。產品語言:1033。製造商:甲骨文公司。安裝成功或錯誤狀態:0。
結束 Windows 安裝程序事務:C:\Users\smccants\AppData\LocalLow\Oracle\Java\jre1.8.0_101\au.msi。客戶端程序 ID:87064。
開始 Windows 安裝程序事務:{26A24AE4-039D-4Ca4-87B4-2F83218077F0}。客戶端程序 ID:87064
現在我們倒退一秒到下午 12:00:39 來獲取來自 RestartManager 的一條消息:
結束會話 0 開始於 2016-07-20T17:00:29.904899600Z
現在在下午 12:00:40 重新啟動管理器:
開始會話 0 - 2016-07-20T17:00:40.326806900Z
結束會話 0 開始於 2016-07-20T17:00:29.904899600Z
現在我們在下午 12:01:07 看到真正可怕的 MsiInstaller 消息:
產品:Java 8 Update 77 – 刪除成功完成。
Windows Installer 刪除了該產品。產品名稱:Java 8 Update 77。產品版本:8.0.770.3。產品語言:1033。製造商:甲骨文公司。刪除成功或錯誤狀態:0。
下一條消息記錄在 SYSTEM 使用者下,而不是我。
結束 Windows 安裝程序事務:{26A24AE4-039D-4Ca4-87B4-2F83218077F0}。客戶端程序 ID:87064
這就是我發現的全部。
我們還沒有看到問題再次發生。我們做了兩件事來幫助緩解這種行為:
- 將 Java AutoUpdate 設置為從不檢查更新。
- 編寫了我們的服務啟動程式碼,以便更智能地了解在哪裡可以找到 Java。我們可以硬編碼一個 Java 版本的路徑,但如果它不存在,它將查詢系統資料庫以查找安裝的另一個版本。這樣,刪除舊版本不應該破壞我們的伺服器。