1. 概述
目前爆出了openssl漏洞,會洩露隱私訊息,涉及的機器較多,環境迥異,導致修復方案都有所不同。不少伺服器使用的nginx,是靜態編譯opensssl,直接將openssl編譯到nginx裡面去了,這就意味著,單純升級openssl是沒有任何效果,nginx不會載入外部的openssl動態連結函式庫的,必須將nginx重新編譯才可以根治。
2. 辨識nginx是否是靜態編譯的
以下三種方法都可以確認nginx是否靜態編譯openssl。
2.1 查看nginx編譯參數
輸入下列指令,檢視nginx的編譯參數:
# ./sbin/nginx -v
如果編譯參數含有--with-openssl =...,則表示nginx是靜態編譯openssl,如下所示:
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的依賴函式庫
為進一步確認,可以檢視程序的依賴函式庫,輸入以下指令:
# ldd `which nginx` | grep ssl
顯示
libssl.so.10 => /usr/lib/libssl.so.10 (0xb76c6000)
注意:如果輸出中不包含libssl.so的檔案(),就說明是靜態編譯的openssl的
再輸入指令以決定openssl以確定函式庫所屬的openssl版本,但不會太詳細,例如本來應該是1.0.1e.5.7,但卻只輸出1.0.1e:
# strings /usr/lib/libssl.so.10 | grep "^openssl " openssl 1.0.1e-fips 11 feb 2013
2.3 查看nginx開啟的檔案
也可以透過檢視nginx開啟的檔案來檢視是否靜態編譯,輸入以下指令:
# ps aux | grep nginx # lsof -p 111111<这里换成nginx的进程pid> | grep ssl
如果沒有開啟openssl的函式庫檔案,就說明是靜態編譯openssl的,如下圖所:
#3. 重新編譯nginx
在網路公司裡,很少有統一的nginx版本,都是各部門根據自己的業務需求選擇相應的插件,然後自己編譯的,所以在編譯的時候一定要注意插件這塊,不要忘記編譯某些插件,盡量保持nginx特性不變。
以上是針對OpenSSL安全漏洞怎麼調整Nginx伺服器的詳細內容。更多資訊請關注PHP中文網其他相關文章!