多方面保證Linux服務器的基本系統安全?

博文目錄
一、賬號安全控制
二、基本安全措施
三、用戶切換與提權
四、開關機安全控制
五、終端及登錄控制

一、賬號安全控制

用戶賬號是計算機使用者的身份憑證或標識,每個要訪問系統資源的人,必須憑藉其用戶賬號才能進入計算機。在Linux操作系統中提供了多種機制來確保用戶賬號的正當、安全使用。

二、基本安全措施

1、系統賬號

各種非登錄用戶賬號中,還有相當一部分是很少用到的,如“games”等,這些用戶賬號可以視爲冗餘賬號,直接刪除即可,包括一些程序賬號,若卸載程序後,賬號沒能被刪除,則需要我們手動進行刪除。

對於Linux服務器中長期不用的用戶賬號,若無法確定是否應該刪除,可以暫時將其鎖定。示例如下:

1)usermod命令鎖定賬戶:

[root@centos01 ~]# usermod -L zhangsan   <!--鎖定賬戶-->
[root@centos01 ~]# passwd -S zhangsan   <!--查看賬戶狀態-->
zhangsan LK 2019-11-22 0 99999 7 -1 (密碼已被鎖定。)
[root@centos01 ~]# usermod -U zhangsan   <!--解鎖zhangsan賬戶-->
[root@centos01 ~]# passwd -S zhangsan     <!--查看賬戶狀態-->
zhangsan PS 2019-11-22 0 99999 7 -1 (密碼已設置,使用 SHA512 算法。)

2)passwd命令鎖定賬戶:

[root@centos01 ~]# passwd -l zhangsan<!--鎖定zhangsan賬戶-->
鎖定用戶 zhangsan 的密碼 。
passwd: 操作成功
[root@centos01 ~]# passwd -S zhangsan   <!--查看賬戶狀態-->
zhangsan LK 2019-11-22 0 99999 7 -1 (密碼已被鎖定。)
[root@centos01 ~]# usermod -U zhangsan <!--解鎖zhangsan賬戶-->
[root@centos01 ~]# passwd -S zhangsan    <!--查看賬戶狀態-->
zhangsan PS 2019-11-22 0 99999 7 -1 (密碼已設置,使用 SHA512 算法。)

2、鎖定賬戶配置文件

如果服務器中的用戶賬號已經固定,不再進行更改,還可以採取鎖定賬號配置文件的方法。使用chattr命令,分別結合“+i” “-i”選項來鎖定、解鎖文件,使用lsattr命令可以查看文件鎖定情況。示例如下:

[root@centos01 ~]# chattr +i /etc/passwd /etc/shadow <!--禁用賬戶密碼配置文件-->
[root@centos01 ~]# lsattr /etc/passwd /etc/shadow  <!--查看鎖定的賬戶密碼配置文件-->
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@centos01 ~]# chattr -i /etc/passwd /etc/shadow <!--解鎖賬戶密碼配置文件-->
[root@centos01 ~]# lsattr /etc/passwd /etc/shadow<!--查看鎖定的賬戶密碼配置文件-->
---------------- /etc/passwd
---------------- /etc/shadow

在賬號文件被鎖定的情況下,其內容將不允許變更,因此無法添加、刪除賬號,也不能更改用戶的密碼、登錄Shell、宿主目錄等屬性信息。

3、密碼安裝控制

爲了降低密碼被第三方破解或被猜出的危險性,可以設置密碼有效期來限制密碼最大有效天數,對於密碼已過期的用戶,登錄時則必須重置密碼,否則將拒絕登錄。

[root@centos01 ~]# vim /etc/login.defs  <!--適用於新建的用戶-->
 ........................   <!--此處省略部分-->
PASS_MAX_DAYS   10    <!--將該配置項默認的值“99999”改爲所期望的值,如10天。-->
[root@centos01 ~]# chage -d 5 zhangsan  <!--設置密碼過期時間爲5天-->
[root@centos01 ~]# cat /etc/shadow <!--查看密碼過期時間是否設置成功-->
zhangsan:$6$cigVri.K$wME7C78i0uvZpCSBzpYdoKcuxX.QkiLw7/3bsEZz5/IZWm9jZtT6ExSzmiwa0eFqjGQuuSza8CX7TeITQQNYJ/:5:0:99999:7:::
[root@centos01 ~]# chage -d 0 zhangsan   <!--設置zhangsan用戶下次登錄修改密碼-->
<!--重新登錄設置新密碼-->
更改用戶 zhangsan 的密碼 。
爲 zhangsan 更改 STRESS 密碼。
(當前)UNIX 密碼:   <!--輸入當前密碼-->
新的 密碼:<!--設置新密碼(切記不能和此前的密碼相似)-->
重新輸入新的 密碼:      <!--確定新密碼-->
passwd:所有的身份驗證令牌已經成功更新。
[zhangsan@centos01 ~]$

4、命令歷史、自動註銷

Shell環境的命令歷史機制爲用戶提供了極大的便利,但另一方面也給用戶帶來了潛在的風險。只要獲得用戶的命令歷史文件,該用戶的命令操作過程將會一覽無餘,如果曾經在命令行輸入明文的密碼,則無意之中服務器的安全壁壘又多了一個缺口。歷史命令的記錄條數由變量HISTSIZE控制,默認爲1000條。通過修改/etc/profile文件中的HISTSIZE變量值,可以影響系統中的所有用戶。示例如下:

[root@centos01 ~]# export HISTSIZE=5  <!--設置記錄5條歷史命令-->
[root@centos01 ~]# history   <!--驗證是否生效-->
    6  chage -d 0 zhangsan
    7  export HISTSIZE=10
    8  history 
    9  export HISTSIZE=5
   10  history
[root@centos01 ~]# vim .bash_logout   <!--設置重啓或者註銷清空歷史命令-->
# ~/.bash_logout
history -c
clear
[root@centos01 ~]# export TMOUT=500  <!--終端500秒無人操作自動註銷-->

需要注意的是,當正在執行程序代碼編譯、修改系統配置等時間較長的操作時,應避免設置TMOUT變量。必要時可以執行“unset TMOUT”命令取消TMOUT變量設置。

三、用戶切換與提權

Linux系統爲我們提供了su、sudo兩種命令。

  • su命令:主要用來切換用戶;
  • sudo命令:用來提升執行權限;

1、su命令——切換用戶

su命令可以使用的選項如下:

  • -:單純使用-,如“su -”代表使用login-shell的變量文件讀取方式來登錄系統;若沒有指定用戶名,則代表切換爲root的身份。

  • -l:與“-”類似,但後面需要加想要切換的使用者賬號,也是login-shell的方式。

  • -m:表示使用目前的環境設置,而不讀取新使用者的環境變量的配置文件。

  • -c:僅進行一次指令,所以-c後面需要加上指令,命令格式爲:su - -c "head -n 3 /etc/shadow",雙引號內的就是要執行的命令。

使用su命令,可以切換爲指定的另一個用戶,從而具有該用戶的所有權限。當然,切換時需要對目標用戶的密碼進行驗證(從root用戶切換爲其他用戶時除外)。
默認情況下,任何用戶都允許使用su命令,從而有機會反覆嘗試其他用戶(如root)的登錄密碼,這樣帶來了安全風險。爲了加強su命令的使用控制,可以藉助於pam_wheel認證模塊,只允許極個別用戶使用su命令進行切換。實現過程如下:將授權使用su命令的用戶添加到wheel組,修改/etc/pam.d/su認證配置以啓用pam_wheel認證。啓用pam_wheel認證以後,未加入到wheel組內的其他用戶將無法使用su命令,嘗試進行切換時將提示“拒絕權限”,從而將切換用戶的權限控制在最小範圍內。

示例如下:

[zhangsan@centos01 ~]$ su       <!--普通用戶切換到管理員-->
密碼:
[root@centos01 zhangsan]# cd
[root@centos01 ~]#
[zhangsan@centos01 ~]$ su --login<!--普通用戶切換到root用戶-->
密碼:
上一次登錄:六 11月 23 07:53:15 CST 2019pts/2 上
[root@centos01 ~]#
[root@centos01 ~]# su zhangsan   <!--管理員切換到普通用戶-->
[zhangsan@centos01 root]$ cd
[zhangsan@centos01 ~]$
[root@centos01 ~]# gpasswd -a zhangsan wheel   <!--將zhangsan用戶加入到wheel組-->
正在將用戶“zhangsan”加入到“wheel”組中
[root@centos01 ~]# grep wheel /etc/group    <!--驗證是否加入到wheel組-->
wheel:x:10:test,radmin,zhangsan
[root@centos01 ~]# vim /etc/pam.d/su    <!--配置su的pam驗證-->
#%PAM-1.0
auth            sufficient      pam_rootok.so
auth            required        pam_wheel.so use_uidi
[lisi@centos01 ~]#$su -root        <!--嘗試切換爲root-->
密碼:
su:拒絕權限                 <!--切換失敗,仍爲原用戶-->

使用su命令切換用戶的操作將會記錄到安全日誌/var/log/secure文件中,可以根據需要進行查看。

2、sudo命令——提升執行權限

通過su命令可以非常方便地切換爲另一個用戶,但前提條件是必須知道目標用戶的登錄密碼。若要從普通用戶切換爲root用戶,必須知道root用戶的密碼。對於生產環境中的Linux服務器,每多一個人知道特權密碼,其安全風險也就增加一分。

sudo命令的控制只需在/etc/sudoers配置文件中添加授權即可,文件的默認權限爲440,需要使用專門的visudo工具進行編輯。雖然也可以用vim進行編輯,但保存時必須執行“:wq!”命令來強制操作,否則系統將提示爲只讀文件而拒絕保持。

配置文件/etc/sudoers中,授權記錄的基本配置格式如下所示:

user MACHINE=COMMANDS

授權配置主要包括用戶、主機、命令三個部分,即授權哪些人在哪些主機上執行哪些命令,各部分的具體含義如下:

  • 用戶(user):直接授權指定的用戶名,或採用“%組名”的形式(授權一個組的所有用戶)。
  • 主機(MACHINE):使用此配置文件的主機名稱。此部分主要是方便在多個主機間共有同一份sudoers文件,一般設爲localhost或者時間的主機名即可。
  • 命令(COMMANDS):允許授權的用戶通過sudo方式執行的特權命令,需填寫命令程序的完整路徑,多個命令之間以逗號“,”進行分隔。

典型的sudo配置記錄中,每行對應一個用戶或組的sudo授權配置。若要授權用戶zhangsan能夠執行ifconfig命令來修改IP地址,而wheel組的用戶無需驗證密碼即可執行任何命令。示例如下:

[root@centos01 ~]# vim /etc/sudoers  
root    ALL=(ALL)       ALL
zhangsan localhost=/sbin/ifconfig <!--針對用戶zhangsan設置命令的使用權限-->
%wheel  ALL=NOPASSWD:ALL<!--針對組wheel設置命令的使用權限-->
:wq!
[zhangsan@centos01 ~]$ sudo ifconfig ens32 192.168.100.20 255.255.255.0   <!--zhangsan賬戶修改IP地址-->
[sudo] zhangsan 的密碼:

當使用相同授權的用戶較多,或者授權的命令較多時,可以採用集中定義的別名。用戶、主機、命令部分都可以定義爲別名(必須爲大寫),分別通過關鍵字User_Alias、Host_Alias、Cmnd_Alias來進行設置。示例如下:

[root@centos01 ~]# vim /etc/sudoers  
.........................    <!--此處爲省略部分-->
User_Alias      OPERATORS=lisi,wangwu,zhaoliu    <!--定義用戶名列表-->
Host_Alias      MAILSVRS=smtp,pop            <!--定義主機列表-->
Cmnd_Alias      PKGTOOLS=/bin/rpm,/usr/bin/yum   <!--定義命令列表-->
OPERATORS       MAILSVRS=PKGTOOLS    <!--使定義的列表關聯起來-->

sudo配置記錄的命令部分可以使用通配符 “ * ” 、取反符號“ !”,當需要授權某個目錄下的所有命令或取消其中個別命令時特別有用。。例如:授權用戶zhangsan可以執行/sbin/目錄下除了ifconfig、route以外的其他命令,並且啓用日誌記錄:

[root@centos01 ~]# vim /etc/sudoers  
 .........................
zhangsan        localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route <!--通配符及取反符的應用-->
Defaults logfile = "/var/log/sudo"    <!--啓用日誌記錄-->

sudo命令使用中注意事項:

1、第一次通過sudo命令執行命令時,必須以用戶自己的密碼進行驗證,此後再次執行sudo命令,只要與前一次sudo操作的間隔時間不超過5分鐘,則不需重複驗證。

2、若想要查看用戶自己獲得哪些sudo授權,可以執行“ sudo -l”,若是某個用戶的sudo權限列表中出現了(ALL) ALL字樣,則表示授權有誤,此時,該用戶擁有所有命令的執行權限。若visudo命令編輯的授權列表沒有錯誤的話,就需要看看是否將該用戶添加到了wheel組中,並且啓用了pam_wheel認證。

四、開關機安全控制

通常大部分服務器是通過遠程登錄的方式來進行管理的,而本地引導和終端登錄過程往往容易被忽視,從而留下安全隱患。特別是當服務器所在的機房環境缺乏嚴格、安全的管控制度時,如何防止其他用戶的非授權介入就成爲必須重視的問題。

1、調整BIOS引導設置

1)將第一優先引導設備(First Boot Device)設爲當前系統所在磁盤。
2)禁止從其他設備(如光盤、U盤、網絡等)引導系統,對應的項爲“Disabled”。
3)將BIOS的安全級別改爲“setup”,並設置好管理密碼,以防止未授權的修改。

2、禁止ctrl+alt+del快捷鍵重啓

[root@centos01 ~]# systemctl mask ctrl-alt-del.target<!--設置禁用ctrl+alt+del鍵-->
[root@centos01 ~]# systemctl daemon-reload<!--重新加載服務-->

若要重新開啓ctrl-alt-del快捷鍵功能,示例如下:

[root@centos01 ~]# systemctl unmask ctrl-alt-del.target 
Removed symlink /etc/systemd/system/ctrl-alt-del.target.
[root@centos01 ~]# systemctl daemon-reload 

3、限制更改GRUB引導參數

當Linux系統在啓動時,到了下面這個界面,按“e”就可以進入GRUB引導菜單,並且通過修改配置後,無須任何密碼就可以進入系統環境中,這個漏洞顯然對服務器是一個極大的漏洞,那麼可以執行以下操作,爲grub菜單設置一個密碼,只有提供正確的密碼才被允許修改引導參數:

[root@centos01 ~]# grub2-mkpasswd-pbkdf2   <!--設置生成grub引導菜單密碼-->
輸入口令:
Reenter password: 
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.7CC8455D40E48C538EFD1A8541FD31AA47AE61F4F39BD9F6E54994208810EA376BFBB96C3DDC0890B9F5109F83D2C7DEDBEACFD82C50790663396800FB3A3D3B.ECEF6AB02079526822C2722ADC8E4427783F30C0CDA26BC930FA067F10C5D9A583DA5861D4546F2976FCEB037A3F3BEB0164C8748F1D40791656389DC72EC31B
[root@centos01 ~]# cp /etc/grub.d/00_header  <!--備份引導菜單--> /etc/grub.d/00_header.bak
[root@centos01 ~]# cp /boot/grub2/grub.cfg<!--備份引導菜單--> /boot/grub2/grub.cfg.bak
[root@centos01 ~]# vim /etc/grub.d/00_header   <!--修改grub引導菜單加載密碼(末行)-->
cat <<EOF
set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.7CC8455D40E48C538EFD1A8541FD31AA47AE61F4F39BD9F6E54994208810EA376BFBB96C3DDC0890B9F5109F83D2C7DEDBEACFD82C50790663396800FB3A3D3B.ECEF6AB02079526822C2722ADC8E4427783F30C0CDA26BC930FA067F10C5D9A583DA5861D4546F2976FCEB037A3F3BEB0164C8748F1D40791656389DC72EC31B
EOF
[root@centos01 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg 
                           <!--生成grub引導菜單-->
Generating grub configuration file ...
/etc/grub.d/00_header.bak: line 360: warning: here-document at line 359 delimited by end-of-file (wanted `EOF')
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-2b580d1a2e8348b8aa9f78be11137b41
Found initrd image: /boot/initramfs-0-rescue-2b580d1a2e8348b8aa9f78be11137b41.img
done

現在重啓服務器,進入grub菜單時,按E鍵將無法修改引導參數,若要修改,還需輸入正確的grub用戶名及密碼:
多方面保證Linux服務器的基本系統安全?

五、終端及登錄控制

1、禁止root用戶登錄

在Linux系統中,login程序會讀取/etc/securetty文件,以決定允許root用戶從哪些終端(安全終端)登錄系統。若要禁止root用戶從指定的終端登錄,只需從該文件中刪除或者註釋掉對應的行即可。例如,若要禁止root用戶從tty5、tty6登錄,可以修改/etc/securetty文件,將tty5、tty6行註釋掉:

[root@centos01 ~]# vim /etc/securetty  
.........................  <!--此處省略部分內容-->
#tty5
#tty6

2、禁止普通用戶登錄

當服務器正在進行備份或調試等維護工作時,可能不希望再有新用戶登錄系統的話,這時候,可以建立/etc/nologin文件即可,login程序會檢查/etc/nologin文件是否存在,如果存在,則拒絕普通用戶登錄系統(root用戶不受限制)。這個方法只建議在服務器維護期間臨時使用,當手動刪除/etc/nologin文件或者重新啓動主機後,即可恢復正常,如下:

[root@centos01 ~]# touch /etc/nologin

—————— 本文至此結束,感謝閱讀 ——————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章