14個Linux系統(tǒng)安全小妙招,總有一招用的上!
對于互聯(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)中使用率高達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)進行云計算、大數(shù)據(jù)平臺的構(gòu)建)服務(wù)器等之上。
大多數(shù)使用者都會認為Linux默認是安全的,有時候這種說法也的確是一個存在爭議的話題。Linux默認確實有內(nèi)置的安全模型。你需要打開它并且對其進行定制,這樣才能得到更安全的系統(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è)的維護。其次就是關(guān)閉從CD/DVD等這些方面的軟啟動方式。同時也可以設(shè)置BIOS密碼,并且要有限制訪問的策略與各類流程管控。
還可以禁用USB設(shè)備來達到安全的目的:
- 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ù)器來說,一般都是采用遠程登錄(SSH)連接的方式去進行登錄操作。因此:
- 第一步:就是除了非必要情況,杜絕使用root用戶登錄,可以使用sudo來進行提權(quán)操作,然后利用系統(tǒng)命令將/etc/sudoers文件鎖定(除root用戶之外的用戶無權(quán)限修改)。
- 第二步:建議修改SSH配置文件,比如默認端口號22,禁止root密碼登錄(有些自有機房的還可以直接禁用root用戶通過SSH協(xié)議登錄)等。
- [root@rs-server ~]# vim /etc/ssh/sshd_config
- #Port 22
- 可修改成其它端口號,民工哥常用IP+22混合使用
- #PermitRootLogin yes
- 將yes改成No
- #PermitEmptyPasswords no
- 打開注釋即可
- #AllowUsers username
- 指定特定的用戶通過SSH協(xié)議進行遠程連接
5. 用戶管理
Linux是一個可多用戶并行操作的系統(tǒng),所以,系統(tǒng)也對用戶進行了劃分:超級用戶與普通用戶。兩者權(quán)限不同,因此,能干的事也有所不同,所以,對于用戶的管理也是非常重要的一步。
設(shè)置用戶密碼:
這個可以通過系統(tǒng)命令passwd來進行設(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 進行刪除。
鎖定用戶其實就是修改用戶的屬性:
- [root@rs-server ~]# usermod -L mingongge
我們打開終端嘗試登錄看看:
這時發(fā)現(xiàn)已經(jīng)無法正常登錄連接了,表明剛剛的配置是正確的。等到下次需要登錄時,可以使用下面的命令進行解鎖:
- [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命令列出來的軟件,在對其進行刪除、卸載時,一定要使用下面的命令進行:
- 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)中有很多的用戶,去收集每一個用戶的行為和和他們的進程消耗的信息非常重要??梢噪S后和一些性能優(yōu)化和安全問題處理時進行用戶分析。但是如果監(jiān)視和搜集用戶行為信息呢 ?有兩個很有用的工具‘psacct‘ 和 ‘acct‘可以用來監(jiān)視系統(tǒng)中用戶的行為和進程。
- [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 #按進程顯示執(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進行域名解析
- 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è)來說,流程、管理制度始終是先行于所有的處理方法之前的。人才是世界上最不可控的因素!!