Linux服務(wù)器安全初始化Shell腳本
51CTO編輯注:下面的這段Linux系統(tǒng)安全Shell腳本用于Linux系統(tǒng)的安全初始化腳本,可以在服務(wù)器系統(tǒng)安裝完畢之后立即執(zhí)行以快速建立起服務(wù)器的安全防護(hù)。最初的腳本由曉輝撰寫(xiě),在數(shù)次修改之后已經(jīng)大量應(yīng)用在某大型媒體網(wǎng)站體系中。該腳本由撫琴煮酒推薦至51CTO系統(tǒng)頻道,通過(guò)和原作者交流之后在原有的腳本上又做了些小改動(dòng),修改了一些bug,已經(jīng)在CentOS 5.5 x86_64下通過(guò),目前在一些沒(méi)有硬件防火墻的服務(wù)器上使用。
使用方法:將其復(fù)制,保存為一個(gè)shell文件,比如security.sh。將其上傳到linux服務(wù)器上,執(zhí)行sh security.sh,就可以使用該腳本了。建議大家在系統(tǒng)初始化后立即執(zhí)行,然后創(chuàng)建了用戶(hù)帳號(hào)和密碼后就不要再改動(dòng)了,以免影響重要文件的初始md5值。
腳本內(nèi)容(源腳本來(lái)自曉輝的博客。以下內(nèi)容為了方便閱讀,對(duì)注釋進(jìn)行了翻譯):
#!/bin/sh # desc: setup linux system security # author:coralzd # powered by www.freebsdsystem.org # version 0.1.2 written by 2011.05.03 #設(shè)置賬號(hào) passwd -l xfs passwd -l news passwd -l nscd passwd -l dbus passwd -l vcsa passwd -l games passwd -l nobody passwd -l avahi passwd -l haldaemon passwd -l gopher passwd -l ftp passwd -l mailnull passwd -l pcap passwd -l mail passwd -l shutdown passwd -l halt passwd -l uucp passwd -l operator passwd -l sync passwd -l adm passwd -l lp # 用chattr給用戶(hù)路徑更改屬性。chattr命令用法參考文末說(shuō)明[1] chattr +i /etc/passwd chattr +i /etc/shadow chattr +i /etc/group chattr +i /etc/gshadow # 設(shè)置密碼連續(xù)輸錯(cuò)3次后鎖定5分鐘 sed -i 's#auth required pam_env.so#auth required pam_env.so\nauth required pam_tally.so onerr=fail deny=3 unlock_time=300\nauth required /lib/security/$ISA/pam_tally.so onerr=fail deny=3 unlock_time=300#' /etc/pam.d/system-auth # 5分鐘后自動(dòng)登出,原因參考文末說(shuō)明[2] echo "TMOUT=300" >>/etc/profile # 歷史命令記錄數(shù)設(shè)定為10條 sed -i "s/HISTSIZE=1000/HISTSIZE=10/" /etc/profile # 讓以上針對(duì) /etc/profile 的改動(dòng)立即生效 source /etc/profile # 在 /etc/sysctl.conf 中啟用 syncookie echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf sysctl -p # exec sysctl.conf enable # 優(yōu)化 sshd_config sed -i "s/#MaxAuthTries 6/MaxAuthTries 6/" /etc/ssh/sshd_config sed -i "s/#UseDNS yes/UseDNS no/" /etc/ssh/sshd_config # 限制重要命令的權(quán)限 chmod 700 /bin/ping chmod 700 /usr/bin/finger chmod 700 /usr/bin/who chmod 700 /usr/bin/w chmod 700 /usr/bin/locate chmod 700 /usr/bin/whereis chmod 700 /sbin/ifconfig chmod 700 /usr/bin/pico chmod 700 /bin/vi chmod 700 /usr/bin/which chmod 700 /usr/bin/gcc chmod 700 /usr/bin/make chmod 700 /bin/rpm # 歷史安全 chattr +a /root/.bash_history chattr +i /root/.bash_history # 給重要命令寫(xiě) md5 cat > list << "EOF" && /bin/ping /usr/bin/finger /usr/bin/who /usr/bin/w /usr/bin/locate /usr/bin/whereis /sbin/ifconfig /bin/vi /usr/bin/vim /usr/bin/which /usr/bin/gcc /usr/bin/make /bin/rpm EOF for i in `cat list` do if [ ! -x $i ];then echo "$i not found,no md5sum!" else md5sum $i >> /var/log/`hostname`.log fi done rm -f list
知識(shí)點(diǎn)[1]:有關(guān)chattr命令
chattr命令可以修改文件屬性,達(dá)到保護(hù)文件和目錄的作用。相比改變文件讀寫(xiě)、執(zhí)行權(quán)限的chmod命令,chattr命令可以控制更底層的文件屬性。該命令十分強(qiáng)大,其中一些功能是由Linux內(nèi)核版本來(lái)支持的,如果Linux內(nèi)核版本低于2.2,那么許多功能不能實(shí)現(xiàn)。同樣-D檢查壓縮文件中的錯(cuò)誤的功能,需要2.5.19以上內(nèi)核才能支持。另外,通過(guò)chattr命令修改屬性能夠提高系統(tǒng)的安全性,但是它并不適合所有的目錄。chattr命令不能保護(hù)/、/dev、/tmp、/var目錄。
此類(lèi)屬性的查看可以通過(guò)lsattr命令完成。
chattr命令的用法:chattr [ -RV ] [ -v version ] [ mode ] files...
最關(guān)鍵的是在[mode]部分,,即文件屬性部分。[mode]部分是由+-=和[ASacDdIijsTtu]這些字符組合的。
+ :在原有參數(shù)設(shè)定基礎(chǔ)上,追加參數(shù)。
- :在原有參數(shù)設(shè)定基礎(chǔ)上,移除參數(shù)。
= :更新為指定參數(shù)設(shè)定。
A:文件或目錄的 atime (access time)不可被修改(modified), 可以有效預(yù)防例如手提電腦磁盤(pán)I/O錯(cuò)誤的發(fā)生。
S:硬盤(pán)I/O同步選項(xiàng),功能類(lèi)似sync。
a:即append,設(shè)定該參數(shù)后,只能向文件中添加數(shù)據(jù),而不能刪除,多用于服務(wù)器日志文 件安全,只有root才能設(shè)定這個(gè)屬性。
c:即compresse,設(shè)定文件是否經(jīng)壓縮后再存儲(chǔ)。讀取時(shí)需要經(jīng)過(guò)自動(dòng)解壓操作。
d:即no dump,設(shè)定文件不能成為dump程序的備份目標(biāo)。
i:設(shè)定文件不能被刪除、改名、設(shè)定鏈接關(guān)系,同時(shí)不能寫(xiě)入或新增內(nèi)容。i參數(shù)對(duì)于文件 系統(tǒng)的安全設(shè)置有很大幫助。
j:即journal,設(shè)定此參數(shù)使得當(dāng)通過(guò)mount參數(shù):data=ordered 或者 data=writeback 掛 載的文件系統(tǒng),文件在寫(xiě)入時(shí)會(huì)先被記錄(在journal中)。如果filesystem被設(shè)定參數(shù)為 data=journal,則該參數(shù)自動(dòng)失效。
s:保密性地刪除文件或目錄,即硬盤(pán)空間被全部收回。
u:與s相反,當(dāng)設(shè)定為u時(shí),數(shù)據(jù)內(nèi)容其實(shí)還存在磁盤(pán)中,可以用于undeletion.
各參數(shù)選項(xiàng)中常用到的是a和i。a選項(xiàng)強(qiáng)制只可添加不可刪除,多用于日志系統(tǒng)的安全設(shè)定。而i是更為嚴(yán)格的安全設(shè)定,只有superuser (root) 或具有CAP_LINUX_IMMUTABLE處理能力(標(biāo)識(shí))的進(jìn)程能夠施加該選項(xiàng)。
應(yīng)用實(shí)例:
1、用chattr命令防止系統(tǒng)中某個(gè)關(guān)鍵文件被修改
# chattr +i /etc/fstab
然后試一下rm mv rename等命令操作于該文件,都是得到Operation not permitted 的結(jié)果
2、讓某個(gè)文件只能往里面追加內(nèi)容,不能刪除,一些日志文件適用于這種操作
# chattr +a /data1/user_act.log
知識(shí)點(diǎn)[2]:為何要設(shè)置5分鐘后自動(dòng)登出
由于客戶(hù)的維護(hù)人員常常登陸上去后通過(guò)直接關(guān)閉TERM端口非法退出telnet,造成系統(tǒng)的pts進(jìn)程越來(lái)越多,一個(gè)月下來(lái)竟然近百,當(dāng)進(jìn)程過(guò)多的時(shí)候系統(tǒng)就會(huì)產(chǎn)生報(bào)警。規(guī)范操作應(yīng)該是用exit或者ctrl+D,但是其他人并不這樣操作,所以我們定義了echo "TMOUT=300" >>/etc/profile這一項(xiàng)內(nèi)容,是讓服務(wù)器自動(dòng)剔除300秒沒(méi)有任何動(dòng)作的客戶(hù)端。當(dāng)然了這一項(xiàng)大家可以根據(jù)實(shí)際需求而決定是否添加;
腳本如果有任何bug或問(wèn)題,可在51CTO上聯(lián)系撫琴煮酒,或在http://www.freebsdsystem.org/上聯(lián)系曉輝。
參考文檔:http://blog.csdn.net/phphot/article/details/4089791
【編輯推薦】





















