Linux是一套免費使用和自由傳播的類Unix操作系統,作為一個開放源代碼的操作系統,Linux服務器以其安全、高效和穩定的顯著優勢而得以廣泛應用,但如果不做好權限的合理分配,Linux系統的安全性還是會得不到更好的保障,下面我們將主要使用RHEL7系統,分別從賬戶安全、登錄控制,SeLinux配置等,優化Linux系統的安全性。
早在1985年,美國國防部就已經提出了可信計算機系統評測標準TCSEC,TCSEC將系統分成ABCD四類7個安全級別。D級是安全級別最低的級別,C類為自主保護級別;B類為強制保護級別;A類為驗證保護類。
- D級,最低安全性
- C1級,主存取控制
- C2級,較完善的自主存取控制(DAC)、審計
- B1級,強制存取控制(MAC)
- B2級,良好的結構化設計、形式化安全模型
- B3級,全面的訪問控制、可信恢復
- A1級,形式化認證
當前主流的操作系統安全性遠遠不夠,如Windows NT都只能達到C2級,安全性均有待提高,不過經過安全加固后的Linux系統可達到B1的安全級別。
控制系統賬戶: 系統賬戶默認存放在cat /etc/passwd
中,你可以手動查詢用戶信息,我們直接除了Root賬戶需要登錄以外,其他的賬戶全部設置為禁止登錄。
使用 passwd -l 用戶名
鎖定用戶登錄,如下我們寫BASH
腳本批量的完成這個過程。
#!/bin/bash
for temp in `cut -d ":" -f 1 /etc/passwd | grep -v "root"`
do
passwd -l $temp
done
修改口令生存期: 口令生存期,即用戶密碼的過期時間,默認在cat /etc/login.defs | grep "PASS"
中存儲著,我們需要把這個時間改小,如下配置即可。
[root@localhost ~]# vim /etc/login.defs
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 90 # 新建用戶密碼最長使用天數
PASS_MIN_DAYS 0 # 新建用戶密碼最短使用天數
PASS_MIN_LEN 7 # 新建用戶密碼到期提示天數
PASS_WARN_AGE 10 # 最小密碼長度
設置口令復雜度: 設置新建用戶時輸入的口令復雜程度,該配置默認在cat /etc/pam.d/system-auth
文件中存放。
[root@localhost ~]# vim /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
password required pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=10
在上方文件中添加如下一行配置,其含義是至少包含一個數字、一個小寫字母、一個大寫字母、一個特殊字符、且密碼長度>=10
限制登錄超時: 限制用戶登陸成功后的等待時間,當用戶終端無操作時則默認斷開連接。
[root@localhost ~]# vim /etc/profile
TMOUT=300
export TMOUT
限制TTY嘗試次數: 該配置可以有效的防止,爆破登錄情況的發生,其配置文件在cat /etc/pam.d/login
中添加如下配置,這個方法只是限制用戶從TTY終端登錄,而沒有限制遠程登錄。
[root@localhost ~]# vim /etc/pam.d/login
#%PAM-1.0
auth required pam_tally2.so deny=3 lock_time=300 even_deny_root root_unlock_time=10
[root@localhost ~]# pam_tally2 --user lyshark 查詢遠程登錄次數
修改SSH遠程端口: 修改SSH登錄端口,這里可以修改為65534等高位端口,因為Nmap掃描器默認也就探測0-1024端口,這樣能夠有效的規避掃描。
[root@localhost ~]# vim /etc/ssh/sshd_config
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 65534 # 登錄端口改為65534
MaxAuthTries=3 # 密碼最大嘗試次數3
[root@localhost ~]# systemctl restart sshd
[C:\Users]$ ssh root@192.168.1.30 6553
禁止Root用戶登錄: 首先創建一個普通用戶 lyshark ,然后配置好Sudo授權,需要時使用Sudo授權執行命令,禁止Root用戶登錄主機。
# --------------------------------------------------------------------------------------------
# 創建普通用戶 lyshark
[root@localhost ~]# useradd lyshark
[root@localhost ~]# passwd lyshark
# --------------------------------------------------------------------------------------------
# 給普通用戶添加Sudo授權
[root@localhost ~]# vim /etc/sudoers
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
lyshark ALL=(ALL) ALL
# --------------------------------------------------------------------------------------------
# 修改ROOT用戶禁止登錄系統
[root@localhost ~]# vim /etc/ssh/sshd_config
PermitRootLogin no
[root@localhost ~]# systemctl restart sshd
除此之外,你可以通過指定那些被允許用來使用SSH的用戶名,從而使得SSH服務更為安全。
[root@localhost ~]# vim /etc/ssh/sshd_config
AllowUsers lyshark admin # 指定允許登錄的用戶
AllowGroup lyshark admin # 指定允許登錄的用戶組
登錄警告提示: 通過修改 /etc/motd
和/etc/issue.net
來實現彈出警告提示框,當用戶遠程登陸以后就會提示以下的兩行文字。
[root@localhost ~]# vim /etc/motd
[root@localhost ~]# vim /etc/issue.net
-----------------------------------------------------------------------------------------------
Warning! If unauthorized, illegal login system, please exit immediately!!
Your system fingerprint has been recorded!!
-----------------------------------------------------------------------------------------------
限制Umask值: umask 值用于設置文件的默認屬性,系統默認的Umask 值是0022,也就是U權限不動,G權限減去2,O權限減2,這里為了防止上傳一句話木馬,我們將系統的Umask值改為0777
,也就是說,當用戶新建任何文件的時候,其都不會具有(讀寫執行)權限,就算上傳成功也不具有任何權限。
[root@localhost ~]# echo "umask 0777" >> /etc/bashrc
[root@localhost ~]# touch test1
[root@localhost ~]# mkdir test2
[root@localhost ~]#
[root@localhost ~]# ls -lh
total 0
----------. 1 root root 0 Aug 25 05:46 test1
d---------. 2 root root 6 Aug 25 05:46 test2
鎖定系統文件: 鎖定文件是Linux系統中最為強大的安全特性,任何用戶(即使是root),都無法對不可修改文件進行寫入、刪除、等操作,我們將一些二進制文件設置為只讀模式,能夠更好的防止系統被非法篡改或注入惡意代碼,一般情況下/sbin 和/usr/lib兩個目錄內容能被設置為不可改變。
[root@localhost sbin]# chattr +i /sbin/
[root@localhost sbin]# chattr +i /usr/sbin/
[root@localhost sbin]# chattr +i /bin/
[root@localhost sbin]# chattr +i /sbin/
[root@localhost sbin]# chattr +i /usr/lib
[root@localhost sbin]# chattr +i /usr/lib64
[root@localhost sbin]# chattr +i /usr/libexec
限制GCC編譯器: 如果系統已經被黑客入侵,那么黑客的下一個目標應該是編譯一些POC文件,用來提權,從而在幾秒鐘之內就成為了root用戶,那么我們需要對系統中的編譯器進行一定的限制。
首先,你需要檢查單數據包以確定其包含有哪些二進制文件。然后將這些文件全部設置為000無權限。
[root@localhost ~]# rpm -q --filesbypkg gcc | grep "bin"
[root@localhost ~]# chmod 000 /usr/bin/c89
[root@localhost ~]# chmod 000 /usr/bin/c99
[root@localhost ~]# chmod 000 /usr/bin/cc
[root@localhost ~]# chmod 000 /usr/bin/gcc
[root@localhost ~]# chmod 000 /usr/bin/gcc-*
[root@localhost ~]# chmod 000 /usr/bin/gcc-*
然后,單獨創建一個可以訪問二進制文件的編譯器的組,賦予他這個組相應的權限。
[root@localhost ~]# groupadd compilerGroup
[root@localhost ~]# chown root:compilerGroup /usr/bin/gcc
[root@localhost ~]# chmod 0750 /usr/bin/gcc
至此,任何試圖使用gcc的用戶將會看到權限被拒絕的信息。
[lyshark@localhost ~]$ gcc -c test.c
-bash: /usr/bin/gcc: Permission denied
限制日志文件: 接著我們需要對日志文件,進行一定的限制,因為一般情況如果系統被入侵了,日志文件將對我們取證有所幫助,而一旦被入侵以后,黑客首先會想辦法清除這些痕跡,所以我們需要設置日志文件只能增加不能刪除屬性,防止其將日志刪除掉。
[root@localhost ~]# cd /var/log/
[root@localhost log]# chattr +a dmesg cron lastlog messages secure wtmp
[root@localhost log]# lsattr secure
-----a---------- secure
[root@localhost log]# rm -fr secure
rm: cannot remove ‘secure’: Operation not permitted
最小化防火墻規則: 配置防火墻,拒絕所有端口,只放行SSH,HTTP這兩個必要的端口。
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -p INPUT DROP
[root@localhost ~]# iptables -I INPUT -p tcp --dport 6553 -j ACCEPT
[root@localhost ~]# iptables -I OUTPUT -p tcp --dport 6553 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --doprt 80 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 443 -j ACCEPT
[root@localhost ~]# iptables-save
開啟SELinux: 由于系統管理員都會關閉,所以這里要手動開啟。
[root@localhost ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
[root@localhost ~]# setenforce 1
開啟SeLinux后,會發現sshd服務無法正常啟動了,這是因為SELinux策略生效了,下面我們需要修改配置。
SELinux放行SSH端口: 通過 Semanage 管理工具放行6553這個端口。
[root@localhost ~]# yum install -y policycoreutils-python-2.5-29.el7.x86_64
[root@localhost ~]# semanage port -l | grep ssh
ssh_port_t tcp 22
[root@localhost ~]# semanage port -a -t ssh_port_t -p tcp 6553
[root@localhost ~]# semanage port -l | grep ssh
ssh_port_t tcp 6553, 22
設置Web目錄權限: 通過 semanage 命令設置,web目錄權限。
[root@localhost html]# semanage fcontext -a -t httpd_sys_content_t /var/www/html/index.html
[root@localhost html]# ls -Z
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
鏈接:https://www.cnblogs.com/LyShark/p/11407373.html
(版權歸原作者所有,侵刪)
文末福利
掃描二維碼回復666添加好友
備注:【運維初中高】100%可以獲得資料哦
本文鏈接:http://www.thecarconnectin.com/46330.html
網友評論comments