安全掃描要求屏蔽ssh版本信息,也就是說在你ssh -V的時候,不能夠顯示ssh的版本信息,我之後在網上查找了一些資料,都說需要使用tar包安裝ssh,並在解壓之後修改sshd.c文件,將version部分進行修
改,我這個項目中有700多臺設備,所以需要使用rpm包,之後通過腳本來進行升級ssh的操作。
那如何將tar包變成rpm包呢,使用rpmbuild工具是可以將tar包編譯成rpm包的,但我沒這麼做,我從rhn上下載了ssh的src.rpm包,我覺得這個更可靠,畢竟是redhat發佈的,並且這個ssh包的版本也符合安
全整改的要求。
我之後下載了openssh-5.3p1-114.el6_7.src.rpm,之後步驟如下:
step1:rpm -ivh 安裝src.rpm
rpm -ivh openssh-5.3p1-114.el6_7.src.rpm
step2:安裝rpmbuild的環境
yum install compat-gcc* gcc* rpm-build rpm-devel rpm-libs 其他包忘了,可以在網上找相應的文章
step3:第一步之後會在/root下生成一個rpmbuild目錄,自動創建幾個目錄,你也不用手動創建其他的目錄,因爲你在編譯的過程中rpmbuild會自動創建齊全如下6個目錄:
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
BUILD和BUILDROOT是編譯過程中需要的目錄,其中BUILDROOT是中間過程目錄
RPMS是編譯完成後生成的rpm包的存放地址
SOURCES是編譯過程在自動解壓後,存放解壓文件的目錄
SPECS目錄很重要,是你製作或修改spec文件的存放目錄
SRPMS是存放.src.rpm文件的目錄
關於這些目錄和rpmbuild的工作原理,這裏就不詳細說了,具體可以參考網上其他文章
step4:修改spec文件===這步是重點,本文會詳細描述。在修改過程中遇到了幾個問題,一併記錄如下。
############################################
【spec中各主要部分說明如下】
%pre和%setup和%patch -bp 解壓tar包,並應用補丁
%setup通常是從/usr/src/asianux/SOURCES裏的包解壓到/usr/src/asianux/BUILD/%{name}-%{version}中。
%build -bc build。等於tar包的make===在/usr/src/asianux/BUILD/%{name}-%{version}目錄中進行make的工作
%configure 執行源代碼的configure配置在/usr/src/asianux/BUILD/%{name}-%{version}目錄中進行
%instal -bi make install===在/usr/src/asianux/BUILD/%{name}-%{version}目錄中進行make install的操作
-bb 是構建一個binary包;===執行了所有過程
-ba 是構建一個binary包和一個source包===執行了所有過程
%files 定義那些文件或目錄會放入rpm中
%defattr (-,root,root) 指定包裝文件的屬性,分別是(mode,owner,group),-表示默認值,對文本文件是0644,可執行文件是0755
bp=tar+copy
bc=configure+make
bi=make install
%file是將所有的文件、包都做成rpm形式
bb=bp+bc+bi
ba=bp+bc+bi+bb
############################################
我最初的設想是這樣的:
先執行-bp,將源碼解壓到BUILD目錄
之後修改sshd.c
之後修改spec文件,註釋掉%pre、%setup、%patch部分
之後執行-bb,因爲-bb包括了-bp/-bc/-bi等步驟,所以之前註釋掉%pre,%setup,%patch部分後就會使用修改後的sshd.c文件來執行%build步驟、%configure步驟和%instal、%file步驟了
後來發現rpmbuild -bb或-ba都不行,因爲bb=bp+bc+bi,ba更狠,還加上了bb,這個過程會將你之前解壓出來的修改後的sshd.c給覆蓋掉======【這也是這篇文章要解決的核心問題】
後來我又想,有沒有什麼參數,可以跳過-bb和-ba過程中的bp、bc步驟呢,也就是這樣:
首先我用-bp解壓,並將解壓後的各種文件拷貝到相關目錄(自動的進行),例如spec文件拷貝到SPEC目錄,其他文件拷貝到BUILD目錄或者SOURCE===執行rpm -ivh ssh.src.rpm即可
之後修改sshd.c文件
之後修改iaspec文件
之後用某個特殊的參數執行rpmbuild -bb或-ba,讓-bb或-ba跳過解壓和configure、make步驟,後來發現,根本不好使。
是有2個參數,--nobuild和--short-circuit,命令如下:rpmbuild -bb spec --nobuild;或者rpmbuild --short-circuit -bi spec,但結果不行
之後我又查看了一下rpmbuild文檔,上邊說rpmbuild的過程支持使用腳本,這是個大好消息!!!這樣就可以在spec文件中調用腳本了,問題解決了。如下:
########################
%prep段
這個段是預處理段,通常用來執行一些解開源程序包的命令,爲下一步的編譯安裝作準備。%prep和下面的%build,%install段一樣,除了可以執行RPM所定義的宏命令(以%開頭)以外,還可以執行SHELL命令
,命令可以有很多行,如我們常寫的tar解包命令。
########################
我在%configure 行的前邊添加了如下兩行:
sed -i s#'snprintf(buf, sizeof buf, "SSH-%d.%d-%.100s%s", major, minor,'#'snprintf(buf, sizeof buf, "goodbye");'#g sshd.c
sed -i '/(options.show_patchlevel == 1) ? SSH_VENDOR_PATCHLEVEL : SSH_VERSION, newline);/ d' sshd.c
之後會執行step5
step5:rpmbuild -ba openssh.spec
step6:之後到RPMS目錄,就可以yum localinstall openssh-5.3p1-114.el6.x86_64.rpm
注意:會編譯出很多包,如下,可以都一起安裝,也可以只安裝ssh
[root@scd1 x86_64]# ls
openssh-5.3p1-114.el6.x86_64.rpm openssh-ldap-5.3p1-114.el6.x86_64.rpm
openssh-askpass-5.3p1-114.el6.x86_64.rpm openssh-server-5.3p1-114.el6.x86_64.rpm
openssh-clients-5.3p1-114.el6.x86_64.rpm pam_ssh_agent_auth-0.9.3-114.el6.x86_64.rpm
openssh-debuginfo-5.3p1-114.el6.x86_64.rpm
安裝更新完畢,我又在另一個節點上"ssh -V 更新ssh的節點ip" 試了一下,發現還是有版本信息,可見,網上的這種方法不行,不能屏蔽ssh版本信息,但確實解決了rpmbuild過程修改軟件內容這一問題。