重新編譯Nginx指導手冊【修復靜態編譯Openssl的Nginx漏洞 】(轉)
阿新 • • 發佈:2017-05-10
snippets asset 替換 業務需求 tps eight nbsp 出了 sof 1. 概述
當前爆出了Openssl漏洞,會泄露隱私信息,涉及的機器較多,環境迥異,導致修復方案都有所不同。不少服務器使用的Nginx,是靜態編譯opensssl,直接將openssl編譯到nginx裏面去了,這就意味著,單純升級openssl是沒有任何效果,Nginx不會加載外部的openssl動態鏈接庫的,必須將nginx重新編譯才可以根治。
# ./sbin/nginx -V
如果編譯參數中含有--with-openssl=...,則表明Nginx是靜態編譯Openssl,如下所示:
[plain] view plain copy print?
如果依賴庫不含有Openssl,則表明是靜態編譯的Openssl的。
[plain] view plain copy
print?
如果沒有打開Openssl的庫文件,就說明是靜態編譯Openssl的,如下圖所示:
在互聯網公司裏,很少有統一的Nginx版本,都是各部門根據自己的業務需求選擇相應的插件,然後自己編譯的,所以在編譯的時候一定要註意插件這塊,不要忘記編譯某些插件,盡量保持Nginx特性不變,下面的方法可以給大家參考一下,但是一定要經過測試才可以上線啊。
[plain] view plain copy print?
[plain] view plain copy print?
當前爆出了Openssl漏洞,會泄露隱私信息,涉及的機器較多,環境迥異,導致修復方案都有所不同。不少服務器使用的Nginx,是靜態編譯opensssl,直接將openssl編譯到nginx裏面去了,這就意味著,單純升級openssl是沒有任何效果,Nginx不會加載外部的openssl動態鏈接庫的,必須將nginx重新編譯才可以根治。
2. 識別Nginx是否是靜態編譯的
以下三種方法都可以確認Nginx是否靜態編譯Openssl。2.1 查看Nginx編譯參數
輸入以下指令,查看Nginx的編譯參數:# ./sbin/nginx -V
[plain] view plain copy print?
- nginx version: nginx/1.4.1
- built by gcc 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC)
- TLS SNI support enabled
- configure arguments: --prefix=/opt/app/nginx --with-http_ssl_module --with-openssl=/opt/app/openssl-1.0.1e --add-module=/opt/app/ngx_cache_purge-2.1
2.2 查看Nginx的依賴庫
為進一步確認,可以查看一下程序的依賴庫,輸入以下指令: [plain] view plain copy print?- # ldd ./sbin/nginx
如果依賴庫不含有Openssl,則表明是靜態編譯的Openssl的。
2.3 查看Nginx打開的文件
也可以通過查看Nginx打開的文件來查看是否靜態編譯,輸入以下指令:[plain] view plain copy
- # ps aux | grep nginx
- # lsof -p 111111<這裏換成Nginx的進程PID> | grep ssl
如果沒有打開Openssl的庫文件,就說明是靜態編譯Openssl的,如下圖所示:
3. 重新編譯Nginx
在互聯網公司裏,很少有統一的Nginx版本,都是各部門根據自己的業務需求選擇相應的插件,然後自己編譯的,所以在編譯的時候一定要註意插件這塊,不要忘記編譯某些插件,盡量保持Nginx特性不變,下面的方法可以給大家參考一下,但是一定要經過測試才可以上線啊。
3.1 下載Nginx
去官網下載Nginx,至於版本的話,我是推薦用最新的穩定版本1.4.7,但是各部門可以根據自己的實際情況來選擇,不一定要用最新穩定版本。 [plain] view plain copy print?- Nginx的下載地址: http://nginx.org/en/download.html
3.2 下載相關Nginx的第三方插件
輸入以下命令,查看Nginx編譯了哪些插件模塊: [plain] view plain copy print?- # ./sbin/nginx -V
[plain] view plain copy print?
- nginx version: nginx/1.4.1
- built by gcc 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC)
- TLS SNI support enabled
- configure arguments: --prefix=/opt/app/nginx --with-http_ssl_module --with-openssl=/opt/app/openssl-1.0.1e --add-module=/opt/app/ngx_cache_purge-2.1
- Nginx 第三方插件下載網址: http://wiki.nginx.org/3rdPartyModules
3.3 自定義插件
如果是咱公司自己開發的Nginx插件,請務必找到相應的同事,確認是否兼容當前的Nginx版本。此外,非官網提供的第三方插件也需要經過測試,是否能夠兼容當前Nginx版本。3.4 編譯參數
在2小節中,將編譯參數記錄下來,比如上面的--prefix=/opt/app/nginx --with-http_ssl_module ... 等等,記錄下來,編譯的時候盡量保持一致,這樣才能盡可能保持Nginx的特性不變。3.5 下載Openssl的源碼
從Openssl的官網下載最新的源碼,建議使用最新的額1.0.1g版本,下載頁面:[plain] view plain copy print?
- 下載頁面:http://www.openssl.org/source/
- 下載地址: http://www.openssl.org/source/openssl-1.0.1g.tar.gz
3.6 編譯安裝
在編譯安裝之前,請將原來的./sbin/Nginx 備份一下,以防萬一。所有源碼準備完之後,就開始編譯安裝: [plain] view plain copy print?- #./configure <編譯參數> <第三方插件>
- # make & make install
轉自:http://blog.csdn.net/hujkay/article/details/23476557
重新編譯Nginx指導手冊【修復靜態編譯Openssl的Nginx漏洞 】(轉)