為 bash 失敗套用補丁

為 bash 失敗套用補丁

我的生產環境中的 bash shell 容易受到「bashbug」漏洞的影響。https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack/

安裝的版本是

`$ bash --version
 GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)`

我無法使用YUM安裝最新的軟體包,因為我們的伺服器沒有連接到互聯網,所以我嘗試bash使用原始程式碼安裝。我bash 4.3從原始程式碼下載並安裝了它。

為此,我bash從以下網站下載了最新的補丁。

http://ftp.gnu.org/gnu/bash/bash-4.3-patches/

我正在bash43-030 從上面的連結應用補丁。

http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-030

我面臨的問題是應用補丁失敗並出現以下錯誤

[bash-4.3]$ patch -p0 < bash-patch patching file builtins/evalstring.c Hunk #1 FAILED at 309. Hunk #2 FAILED at 379. 2 out of 2 hunks FAILED -- saving rejects to file builtins/evalstring.c.rej patching file parse.y Hunk #1 succeeded at 2574 (offset 35 lines). Hunk #2 FAILED at 4038. 1 out of 2 hunks FAILED -- saving rejects to file parse.y.rej patching file shell.h Hunk #1 succeeded at 181 with fuzz 2. patching file y.tab.c Hunk #1 FAILED at 169. Hunk #2 FAILED at 498. Hunk #3 FAILED at 2099. Hunk #4 FAILED at 2113. ... ... Hunk #98 FAILED at 6350. 97 out of 98 hunks FAILED -- saving rejects to file y.tab.c.rej patching file patchlevel.h Hunk #1 FAILED at 26. 1 out of 1 hunk FAILED -- saving rejects to file patchlevel.h.rej

請建議如何解決該問題。可能是應用補丁的方法是錯誤的。

答案1

Bash 補丁是累計,4.3 的原始碼實際上是 4.3.0,補丁是單獨的,所有補丁都應該按順序應用,每個補丁都會提升一個補丁等級。官方網站很少提供完整的源代碼版本,最後一個版本是 3.2.48。

您所觀察到的是,所需的補丁(“-030”後綴表示 .30 補丁等級)需要較早的補丁。 (這總是會被 bash 補丁偵測到,因為每個補丁的patchlevel.h任何遺漏都會導致補丁錯誤)。您可以在這裡找到我從原始程式碼建置的說明:https://unix.stackexchange.com/a/157714/31352

從原始碼建置很簡單,但不能輕易進行。一旦你修補了 bash,你就只能依靠自己來獲得供應商支持,並且可能會使進一步的管理任務(例如修補和升級)變得複雜。

你可能過得更好下載 Red Hat RPM,將其傳輸到伺服器(或者如果您確實想從原始程式碼建置它,則改為 SRPM)。 bash 具有最小的依賴性(特別是 termcap),假設它們都沒有被修改,您應該只需要一個套件。

無論如何,您可能應該堅持使用 bash-4.1,有許多更改可能會影響腳本,請參閱COMPAT有關詳細信息,請參閱來源發行版中的文件。從 2.05b 到 4.3 的所有發布版本都有針對「shellshock」(CVE-2014-6271) 和相關問題的修補程式。

相關內容