對于互聯(lián)網(wǎng)IT從業(yè)人員來說,越來越多的工作會逐漸轉(zhuǎn)移到Linux系統(tǒng)之上,這一點,無論是開發(fā)、運維、測試都應(yīng)該是深有體會。曾有技術(shù)調(diào)查網(wǎng)站W(wǎng)3Techs于2018年11月就發(fā)布一個調(diào)查報告,報告顯示Linux在網(wǎng)站服務(wù)器的系統(tǒng)中使用率高達(dá)37.2%,這一數(shù)據(jù)也表明,Linux系統(tǒng)被廣泛應(yīng)用。其實,除了在網(wǎng)站服務(wù)器中的應(yīng)用,Linux系統(tǒng)還被用于DNS域名解析服務(wù)器、電子郵件服務(wù)器、一些開源軟件的應(yīng)用(大數(shù)據(jù)應(yīng)用:據(jù)Linux基金會的研究,86%的企業(yè)已經(jīng)使用Linux操作系統(tǒng)進(jìn)行云計算、大數(shù)據(jù)平臺的構(gòu)建)服務(wù)器等之上。

大多數(shù)使用者都會認(rèn)為Linux默認(rèn)是安全的,有時候這種說法也的確是一個存在爭議的話題。Linux默認(rèn)確實有內(nèi)置的安全模型。你需要打開它并且對其進(jìn)行定制,這樣才能得到更安全的系統(tǒng)。Linux更難管理,不過相應(yīng)也更靈活,有更多的配置選項。
對于系統(tǒng)管理員,讓產(chǎn)品的系統(tǒng)更安全,免于駭客和黑客的攻擊,一直是一項挑戰(zhàn)。而且,近些年來對于Linux遭遇攻擊的案例很多,所以,如何構(gòu)建一個安全、強大且牢固的Linux系統(tǒng)一直是一個可探索性的話題。今天,我將從系統(tǒng)的各個層面,給大家分享一下我在日常工作中是如何構(gòu)建、或者加固Linux系統(tǒng)安全的。
1. 物理安全
這應(yīng)該說是對于服務(wù)器安全保障的第一步。
硬件服務(wù)器,首先得專業(yè)的人來做專業(yè)的維護(hù)。其次就是關(guān)閉從CD/DVD等這些方面的軟啟動方式。同時也可以設(shè)置BIOS密碼,并且要有限制訪問的策略與各類流程管控。
還可以禁用USB設(shè)備來達(dá)到安全的目的:
vim /etc/modprobe.d/stopusb
install usb-storage /bin/true
或者使用下面的命令將USB的驅(qū)動程序刪除
[root@rs-server ~]# mv /lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/usb/storage/usb-storage.ko.xz
2. 保證系統(tǒng)最新
這個就是說要保證系統(tǒng)無其它漏洞存在,比如:已經(jīng)有的漏洞要及時的修復(fù)。保證系統(tǒng)包含了最新版本的補丁、安全修復(fù)和可用內(nèi)核。
yum updates
yum check-update
3. 最小化處理原則
無論是安裝系統(tǒng),還是常用的軟件,都必須遵守這個原則:最小化安裝,同時也是減少漏洞存在的可能性。
對于系統(tǒng)一些不必要的服務(wù)、端口,建議關(guān)閉。
[root@rs-server ~]# chkconfig --list |grep "3:on"
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
然后使用下面的命令關(guān)閉:
chkconfig service-name off
4. 登錄與連接
對于Linux服務(wù)器來說,一般都是采用遠(yuǎn)程登錄(SSH)連接的方式去進(jìn)行登錄操作。因此:
[root@rs-server ~]# vim /etc/ssh/sshd_config
#Port 22
可修改成其它端口號,民工哥常用IP+22混合使用
#PermitRootLogin yes
將yes改成No
#PermitEmptyPasswords no
打開注釋即可
#AllowUsers username
指定特定的用戶通過SSH協(xié)議進(jìn)行遠(yuǎn)程連接
5. 用戶管理
Linux是一個可多用戶并行操作的系統(tǒng),所以,系統(tǒng)也對用戶進(jìn)行了劃分:超級用戶與普通用戶。兩者權(quán)限不同,因此,能干的事也有所不同,所以,對于用戶的管理也是非常重要的一步。
設(shè)置用戶密碼:
這個可以通過系統(tǒng)命令passwd來進(jìn)行設(shè)置,一般建議使用強度比較復(fù)雜的密碼,且各個系統(tǒng)中相同的用戶使用不同的密碼(日常可以使用管理器來管理)。
[root@rs-server ~]# passwd mingongge
Changing password for user mingongge.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
臨時用戶管理:
對于這種需要的臨時用戶管理,一般是使用過后可以刪除,也可以在一段時間后將其鎖定不讓其再登錄,在下次需要登錄時再次開啟權(quán)限。
刪除用戶很簡單,可以使用系統(tǒng)命令userdel -r username 進(jìn)行刪除。
鎖定用戶其實就是修改用戶的屬性:
[root@rs-server ~]# usermod -L mingongge
我們打開終端嘗試登錄看看:

這時發(fā)現(xiàn)已經(jīng)無法正常登錄連接了,表明剛剛的配置是正確的。等到下次需要登錄時,可以使用下面的命令進(jìn)行解鎖:
[root@rs-server ~]# usermod -U mingongge
#-L lock
#-U unlock
6. 文件管理
這里的文件管理指的是存儲用戶信息的重要文件:/etc/passwd、/etc/shadow這兩個文件。
[root@rs-server ~]# stat /etc/passwd
File: ‘/etc/passwd’
Size: 945 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 17135889 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-08-06 01:14:37.439994172 +0800
Modify: 2019-08-06 01:14:37.440994172 +0800
Change: 2019-08-06 01:14:37.442994172 +0800
Birth: -
[root@rs-server ~]# stat /etc/shadow
File: ‘/etc/shadow’
Size: 741 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 17135890 Links: 1
Access: (0000/----------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-08-06 01:14:37.445994172 +0800
Modify: 2019-08-06 01:14:37.445994172 +0800
Change: 2019-08-06 01:14:37.447994172 +0800
Birth: -
一般從上面的一些文件屬性上可以看出是不是這些文件遭遇篡改了,所以,一般情況建議將此兩個文件鎖定除了root用戶之外的用戶無權(quán)限修改與訪問。
7. 啟用防火墻
利用系統(tǒng)的防火墻來過濾出入站的流量,這是一個很好的預(yù)防攻擊的策略,而且系統(tǒng)防火墻的規(guī)則可以逐條設(shè)置,非常強大,強裂建議開啟。
8. 軟件包的管理
對于系統(tǒng)安裝的軟件,我們使用RPM包管理器來管理,對于使用yum或者apt-get命令列出來的軟件,在對其進(jìn)行刪除、卸載時,一定要使用下面的命令進(jìn)行:
yum -y remove software-package-name
sudo apt-get remove software-package-name
9. 禁用Crtl+Alt+Del 重啟
多數(shù)服務(wù)器在按下Crtl+Alt+Del組合鍵后,都會使用服務(wù)器重啟,這個對于線上服務(wù)器來說是絕對不友好的一個安全因素,必須禁止,否則一個誤操作就造成很大的影響。
#CentOS6 禁用Ctrl+Alt+Del重啟功能
#方法一:
vi /etc/init/control-alt-delete.conf
#start on control-alt-delete #注釋此行
#方法二:
mv /etc/init/control-alt-delete.conf /etc/init/control-alt-delete.conf.bak
#注:兩種方法都無需重啟系統(tǒng)即可生效
對于CentOS7 來說,方法有所不同:
[root@rs-server ~]# cat /etc/inittab
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
這個文件里已經(jīng)說明了相關(guān)的介紹。

經(jīng)過測試,如果將上面文件中的配置注釋掉之后,reboot命令會不生效了:
[root@rs-server ~]# ll /usr/lib/systemd/system/ctrl-alt-del.target
lrwxrwxrwx. 1 root root 13 Mar 14 17:27 /usr/lib/systemd/system/ctrl-alt-del.target -> reboot.target
這個ctrl-alt-del.target這是reboot.target的軟鏈接。所以,最終正確的方法是:移動掉這個文件到其它目錄,然后重載配置文件使用其它生效,如果再需要這個功能就只需要重新添加這個軟件鏈接即可。
10. 監(jiān)控用戶行為
如果你的系統(tǒng)中有很多的用戶,去收集每一個用戶的行為和和他們的進(jìn)程消耗的信息非常重要?梢噪S后和一些性能優(yōu)化和安全問題處理時進(jìn)行用戶分析。但是如果監(jiān)視和搜集用戶行為信息呢 ?有兩個很有用的工具‘psacct‘ 和 ‘a(chǎn)cct‘可以用來監(jiān)視系統(tǒng)中用戶的行為和進(jìn)程。
[root@rs-server ~]# yum install psacct -y
使用方法如下:
ac 統(tǒng)計用戶連接時間
ac #顯示所有用戶連接總時間
ac -p #顯示每個用戶連接時間
ac -d #顯示每天所有用戶連接總時間
ac silence #顯示指定用戶連接時間
ac -d silence #顯示指定用戶每天連接時間
sa 輸出用戶活動信息
sa #顯示所有用戶執(zhí)行命令情況
sa -u #按用戶顯示執(zhí)行命令情況
sa -m #按進(jìn)程顯示執(zhí)行命令情況
sa -p #按使用率顯示執(zhí)行命令情況
lastcomm 輸出最近執(zhí)行命令信息
lastcomm #顯示所有執(zhí)行命令
lastcomm silence #顯示指定用戶執(zhí)行命令
lastcomm ls #顯示指定命令執(zhí)行情況
其他
last #查看最近用戶登錄成功列表
last -x #顯示系統(tǒng)關(guān)機、重新開啟等信息
last -a #將IP顯示在最后一列
last -d #對IP進(jìn)行域名解析
last -R #不顯示IP列
last -n 3 #顯示最近3條
lastb #查看最近用戶登錄失敗的列表
具體的使用例子:
[root@rs-server ~]# ac -p
root 71.88
total 71.88
[root@rs-server ~]# sa -u
root 0.00 cpu 1043k mem 0 io accton
root 0.00 cpu 3842k mem 0 io systemd-tty-ask
root 0.03 cpu 72576k mem 0 io pkttyagent
root 0.00 cpu 32112k mem 0 io systemctl
root 0.00 cpu 2674k mem 0 io systemd-cgroups
root 0.07 cpu 37760k mem 0 io ps
root 0.00 cpu 28160k mem 0 io grep
root 0.00 cpu 1080k mem 0 io ac
root 0.14 cpu 0k mem 0 io kworker/u256:0 *
root 0.10 cpu 0k mem 0 io kworker/0:0 *
root 0.02 cpu 0k mem 0 io kworker/0:2 *
[root@rs-server ~]# lastcomm sa
sa root pts/0 0.00 secs Tue Aug 6 02:15
[root@rs-server ~]# last -x
root pts/0 192.168.1.14 Tue Aug 6 00:48 still logged in
root tty1 Tue Aug 6 00:48 still logged in
[root@rs-server ~]# lastb
mingongg ssh:notty 192.168.1.14 Tue Aug 6 01:11 - 01:11 (00:00)
mingongg ssh:notty 192.168.1.14 Tue Aug 6 01:11 - 01:11 (00:00)
btmp begins Tue Aug 6 01:11:27 2019
11. 定期檢查日志
將系統(tǒng)及其重要的日志保存在本服務(wù)器之外的專業(yè)日志服務(wù)器上,從而避免黑客通過分析日志來入侵系統(tǒng)及應(yīng)用,以下是常見的日志文件:

12. 數(shù)據(jù)備份
這個不用說都知道是非常重要的,尤其是重要的生產(chǎn)數(shù)據(jù),必須本地、異地、不同介質(zhì)備份及保存,同時還需要定期檢查數(shù)據(jù)的完整性、可用性。
13. 安全工具
對于系統(tǒng)來說,常用的安全掃描工具是必備的,比如:掃描開放端口nmap。對于系統(tǒng)中的WEB應(yīng)用等來說,可以使用一些開源的工具:IBM AppScan、SQL Map等,同樣這類的商用產(chǎn)品也很多,這里就不做介紹了(又不給我廣告費)。
對于文件有文件加密工具,對于系統(tǒng)還有一些入侵檢測、漏洞掃描工具,無論是開源還是商業(yè),都是可以根據(jù)實際需求與企業(yè)成本來決定使用哪一款工具。
14. 管理方法
對于安全管理來說,好的流程與管理制度同樣也是必須的,否則,上述13點基本的作用為0,有方法,沒有制度去讓方法落地執(zhí)行!!
所以,無論對于小企業(yè)、大企業(yè)來說,流程、管理制度始終是先行于所有的處理方法之前的。人才是世界上最不可控的因素!!
來源:民工哥技術(shù)之路