Linux
默認(rèn)情況下是安全的,并同意進(jìn)行一些擴(kuò)展(這是有爭(zhēng)議的話題)。但是,默認(rèn)情況下,Linux 具有內(nèi)置的安全模型。需要根據(jù)你的需要對(duì)其進(jìn)行調(diào)整和自定義,這可能有助于構(gòu)建更安全的系統(tǒng)。Linux 更難管理,但提供了更多的靈活性和配置選項(xiàng)。
1. 物理系統(tǒng)安全
配置 BIOS
禁用從啟動(dòng) CD/DVD
, External Devices
, Floppy Drive
在 BIOS
. 接下來,啟用BIOS
密碼和保護(hù) GRUB
使用密碼來限制對(duì)系統(tǒng)的物理訪問。
2. 磁盤分區(qū)
如果發(fā)生任何事故,擁有不同的分區(qū)以獲得更高的數(shù)據(jù)安全性很重要。通過創(chuàng)建不同的分區(qū),可以對(duì)數(shù)據(jù)進(jìn)行分離和分組。當(dāng)發(fā)生意外事故時(shí),只會(huì)損壞該分區(qū)的數(shù)據(jù),而其他分區(qū)的數(shù)據(jù)則保存下來。確保你必須有以下單獨(dú)的分區(qū),并確保第三方應(yīng)用程序應(yīng)安裝在單獨(dú)的文件系統(tǒng)下/opt
.
/
/boot
/usr
/var
/home
/tmp
/opt
3. 禁止不必要開機(jī)啟動(dòng)的服務(wù)
從服務(wù)器中查找并刪除或禁用不需要的服務(wù),以最大限度地減少漏洞。使用 chkconfig
命令來找出正在運(yùn)行的服務(wù) runlevel 3
.
# /sbin/chkconfig --list |grep '3:on'
一旦發(fā)現(xiàn)任何不需要的服務(wù)正在運(yùn)行,請(qǐng)使用以下命令禁用它們。
# chkconfig serviceName off
使用 RPM
包管理器,例如yum
或者 apt-get
工具列出系統(tǒng)上所有已安裝的軟件包并使用以下命令刪除它們。
# yum -y remove package-name
# sudo apt-get remove package-name
4.檢查監(jiān)聽網(wǎng)絡(luò)端口
netstat
網(wǎng)絡(luò)命令可以查看所有打開的端口和相關(guān)程序。使用 chkconfig
命令禁用系統(tǒng)中所有不需要的網(wǎng)絡(luò)服務(wù)。
# netstat -tulpn
5. 使用安全(SSH)
Telnet
和 rlogin
協(xié)議使用純文本,而不是加密格式,這是安全漏洞。SSH
是一種在與服務(wù)器通信時(shí)使用加密技術(shù)的安全協(xié)議。切勿直接以身份登錄 root
除非必要。用 ”sudo
”來執(zhí)行命令。sudo 在/etc/sudoers
文件也可以用visudo
應(yīng)用程序打開 VI
編輯。建議更改默認(rèn)值 SSH 22
端口號(hào)與其他一些更高級(jí)別的端口號(hào)。打開主SSH
配置文件,并做一些如下參數(shù)來限制用戶訪問。
# vi /etc/ssh/sshd_config
禁用 root 登錄
PermitRootLogin no
只允許特定用戶
AllowUsers username
使用 SSH 協(xié)議 2 版本
Protocol 2
6. 保持系統(tǒng)更新
當(dāng)系統(tǒng)可用時(shí),始終使用最新版本的補(bǔ)丁、安全修復(fù)和內(nèi)核更新系統(tǒng)。
# yum updates
# yum check-update
7. 鎖定 Cronjobs
Cron
有它自己的內(nèi)置功能,它允許指定誰可以和誰不想運(yùn)行作業(yè)。這是通過使用名為的文件來控制的/etc/cron.allow
和 /etc/cron.deny
. 要使用 cron 鎖定用戶,只需在cron.deny
并允許用戶運(yùn)行 cron add in cron.allow
文件。如果你想禁止所有用戶使用 cron,請(qǐng)?zhí)砑?ALL
行到 cron.deny
文件。
# echo ALL >>/etc/cron.deny
8. 禁用U盤檢測(cè)
很多時(shí)候我們想限制用戶使用 USB
避免系統(tǒng)數(shù)據(jù)遭竊取。創(chuàng)建一個(gè)文件/etc/modprobe.d/no-usb
并添加以下行將不會(huì)檢測(cè)到 USB
貯存。
install usb-storage /bin/true
9. 開啟SELinux
Security-Enhanced Linux
(SELinux
) 是內(nèi)核提供的強(qiáng)制訪問控制安全機(jī)制。禁用SELinux
意味著從系統(tǒng)中刪除安全機(jī)制。在刪除之前請(qǐng)三思,如果你的系統(tǒng)連接到互聯(lián)網(wǎng)并被公眾訪問,那么請(qǐng)多考慮一下。SELinux
提供了三種基本的操作模式,它們是。
Enforcing
:這是啟用和強(qiáng)制執(zhí)行的默認(rèn)模式 SELinux
機(jī)器上的安全策略。Permissive
: 在這種模式下, SELinux
不會(huì)在系統(tǒng)上強(qiáng)制執(zhí)行安全策略,只會(huì)警告和記錄操作。此模式在故障排除方面非常有用SELinux
相關(guān)問題。Disabled
:SELinux
已關(guān)閉。
你可以查看當(dāng)前狀態(tài) SELinux
使用 ' 從命令行模式system-config-selinux
, getenforce
或者 sestatus
命令。
# sestatus
如果已禁用,請(qǐng)啟用 SELinux
使用以下命令。
# setenforce enforcing
它也可以從 /etc/selinux/config
文件,你可以在其中啟用或禁用它。
10. 刪除 KDE/GNOME 桌面
沒有必要跑 X Window
臺(tái)式機(jī)之類的 KDE
或者 GNOME
在你的專用LAMP服務(wù)器上。你可以刪除或禁用它們以提高服務(wù)器的安全性和性能。禁用簡(jiǎn)單打開文件/etc/inittab
并將運(yùn)行級(jí)別設(shè)置為 3
. 如果你希望將其從系統(tǒng)中完全刪除,請(qǐng)使用以下命令。
# yum groupremove 'X Window System'
11. 關(guān)閉 IPv6
如果你不使用 IPv6
協(xié)議,那么你應(yīng)該禁用它,因?yàn)榇蠖鄶?shù)應(yīng)用程序或策略不需要 IPv6
協(xié)議,目前在服務(wù)器上不需要它。轉(zhuǎn)到網(wǎng)絡(luò)配置文件并添加以下行以禁用它。
# vi /etc/sysconfig/network
NETWORKING_IPV6=no
IPV6INIT=no
12. 限制用戶使用舊密碼
如果你想禁止用戶使用相同的舊密碼,這將非常有用。舊密碼文件位于/etc/security/opasswd
. 這可以通過使用來實(shí)現(xiàn)PAM
模塊。打開 /etc/pam.d/system-auth
文件在 RHEL / CentOS / Fedora
.
# vi /etc/pam.d/system-auth
打開 '/etc/pam.d/common-password
文件
# vi /etc/pam.d/common-password
將以下行添加到auth
部分。
auth sufficient pam_unix.so likeauth nullok
將以下行添加到password
部分禁止用戶重復(fù)使用最后一個(gè) 5
他或她的密碼。
password sufficient pam_unix.so nullok use_authtok md5 shadow remember=5
只有最后 5
服務(wù)器記住密碼。如果你嘗試使用最后一個(gè)5
舊密碼,你會(huì)收到類似的錯(cuò)誤。
Password has been already used. Choose another.
13. 如何查看用戶密碼是否過期
在 Linux 中,用戶的密碼存儲(chǔ)在 /etc/shadow
加密格式的文件。要檢查用戶的密碼過期,你需要使用 chage
命令。它顯示密碼到期詳細(xì)信息以及最后一次密碼更改日期。系統(tǒng)使用這些詳細(xì)信息來決定用戶何時(shí)必須更改他/她的密碼。查看任何現(xiàn)有用戶的老化信息,例如 expiry date
和 time
,使用以下命令。
#chage -l username
要更改任何用戶的密碼時(shí)效,請(qǐng)使用以下命令。
#chage -M 60 username
#chage -M 60 -m 7 -W 7 userName
參數(shù)
14.手動(dòng)鎖定和解鎖帳戶
鎖定和解鎖功能非常有用,你可以將其鎖定一周或一個(gè)月,而不是從系統(tǒng)中刪除帳戶。要鎖定特定用戶,你可以使用以下命令。
# passwd -l accountName
Note
: 鎖定的用戶仍然可用 root
僅限用戶。鎖定是通過用 (!
) 。如果有人嘗試使用此帳戶訪問系統(tǒng),他將收到類似于以下內(nèi)容的錯(cuò)誤。
# su - accountName
This account is currently not available.
要解鎖或啟用對(duì)鎖定帳戶的訪問,請(qǐng)使用命令 as。這將刪除 (!
) 帶有加密密碼的字符串。
# passwd -u accountName
15. 使用更強(qiáng)的密碼
許多用戶使用軟密碼或弱密碼,他們的密碼可能會(huì)被黑客入侵 dictionary based
或蠻力攻擊。這 pam_cracklib
模塊在 PAM
(Pluggable Authentication Modules
) 模塊堆棧,這將強(qiáng)制用戶設(shè)置強(qiáng)密碼。使用編輯器打開以下文件。> 另請(qǐng)閱讀:
# vi /etc/pam.d/system-auth
并使用信用參數(shù)添加行作為 (lcredit
, ucredit
, dcredi
t 和/或 ocredit
分別為小寫、大寫、數(shù)字等)
/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1
16.啟用Iptables(防火墻)
強(qiáng)烈建議啟用 Linux firewall
以保護(hù)你的服務(wù)器未經(jīng)授權(quán)的訪問。應(yīng)用規(guī)則iptables
過濾器 incoming
, outgoing
和 forwarding
數(shù)據(jù)包。我們可以指定源地址和目的地址來允許和拒絕特定的udp/tcp
端口號(hào)。
17.在Inittab中禁用Ctrl+Alt+Delete
在大多數(shù) Linux 發(fā)行版中,按 CTRL-ALT-DELETE’
將使你的系統(tǒng)重新啟動(dòng)過程。因此,如果有人錯(cuò)誤地這樣做,至少在生產(chǎn)服務(wù)器上啟用此選項(xiàng)并不是一個(gè)好主意。> 這在 ' 中定義/etc/inittab
文件,如果你仔細(xì)查看該文件,你將看到類似于下面的一行。默認(rèn)情況下,該行沒有被注釋掉。我們必須將其注釋掉。這個(gè)特定的按鍵序列信號(hào)將關(guān)閉系統(tǒng)。
# Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
18. 檢查帳戶是否有空密碼
任何具有空密碼的帳戶都意味著它可以對(duì)網(wǎng)絡(luò)上的任何人進(jìn)行未經(jīng)授權(quán)的訪問,這是 Linux 服務(wù)器內(nèi)安全的一部分。因此,你必須確保所有帳戶都具有強(qiáng)密碼,并且沒有人具有任何授權(quán)訪問權(quán)限??彰艽a帳戶存在安全風(fēng)險(xiǎn),很容易被黑客入侵。要檢查是否有任何密碼為空的帳戶,請(qǐng)使用以下命令。
# cat /etc/shadow | awk -F: '($2==''){print $1}'
19. 登錄前顯示 SSH Banner
在 SSH 身份驗(yàn)證之前,最好有一個(gè)帶有一些安全警告的合法橫幅或安全橫幅。要設(shè)置此類橫幅,請(qǐng)閱讀以下文章。
20. 監(jiān)控用戶活動(dòng)
如果你要與大量用戶打交道,那么收集他們使用的每個(gè)用戶活動(dòng)和進(jìn)程的信息并在以后或在任何類型的性能、安全問題的情況下對(duì)其進(jìn)行分析很重要。但是我們?nèi)绾伪O(jiān)控和收集用戶活動(dòng)信息。有兩個(gè)有用的工具叫做psacct
和 acct
用于監(jiān)視系統(tǒng)上的用戶活動(dòng)和進(jìn)程。這些工具在系統(tǒng)后臺(tái)運(yùn)行,并持續(xù)跟蹤系統(tǒng)上的每個(gè)用戶活動(dòng)和服務(wù)消耗的資源,例如Apache
, MySQL
, SSH
, FTP
等
21. 定期查看日志
將日志移動(dòng)到專用日志服務(wù)器中,這樣可以防止入侵者輕松修改本地日志。以下是常見的 Linux 默認(rèn)日志文件名稱及其用法:
/var/log/message
– 整個(gè)系統(tǒng)日志或當(dāng)前活動(dòng)日志可用的地方。/var/log/auth.log
– 身份驗(yàn)證日志。/var/log/kern.log
– 內(nèi)核日志。/var/log/cron.log
– Crond 日志(cron 作業(yè))。/var/log/maillog
– 郵件服務(wù)器日志。/var/log/boot.log
– 系統(tǒng)啟動(dòng)日志。/var/log/mysqld.log
– MySQL 數(shù)據(jù)庫(kù)服務(wù)器日志文件。/var/log/secure
– 身份驗(yàn)證日志。/var/log/utmp
或者 /var/log/wtmp
: 登錄記錄文件。/var/log/yum.lo
g:Yum 日志文件。
22.重要文件備份
在生產(chǎn)系統(tǒng)中,有必要對(duì)重要文件進(jìn)行備份并將它們保存在安全庫(kù)、遠(yuǎn)程站點(diǎn)或異地災(zāi)難恢復(fù)中。
23. 網(wǎng)卡綁定
有兩種模式 NIC
mode=1
– Active and Backup
NIC Bonding幫助我們避免單點(diǎn)故障。在網(wǎng)卡綁定中,我們將兩個(gè)或多個(gè)網(wǎng)絡(luò)以太網(wǎng)卡綁定在一起,形成一個(gè)虛擬的接口,在這個(gè)虛擬接口中,我們可以分配IP地址與其他服務(wù)器進(jìn)行通信。我們的網(wǎng)絡(luò)將可用的情況下,一個(gè)網(wǎng)卡是down或不可用的任何原因。
24. 保持 /boot 為只讀
Linux內(nèi)核及其相關(guān)文件在 /boot
目錄默認(rèn)為 read-write
. 將其更改為read-only
降低未經(jīng)授權(quán)修改關(guān)鍵引導(dǎo)文件的風(fēng)險(xiǎn)。為此,打開/etc/fstab
“ 文件。
# vi /etc/fstab
在底部添加以下行,保存并關(guān)閉它。
LABEL=/boot /boot ext2 defaults,ro 1 2
請(qǐng)注意,如果你以后需要升級(jí)內(nèi)核,則需要將更改重置為讀寫。
25. 忽略 ICMP 或廣播請(qǐng)求
在/etc/sysctl.conf
要忽略的文件 ping
或者 broadcast
要求。
Ignore ICMP request:
net.ipv4.icmp_echo_ignore_all = 1
Ignore Broadcast request:
net.ipv4.icmp_echo_ignore_broadcasts = 1
通過運(yùn)行以下命令加載新設(shè)置或更改
#sysctl -p