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