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

博文目錄
1、帳號安全控制
2、基本安全措施
3、用戶切換與提權
4、開關機安全控制
5、終端及登陸控制linux

1、帳號安全控制

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

2、基本安全措施

一、系統帳號

各類非登陸用戶帳號中,還有至關一部分是不多用到的,如「games」等,這些用戶帳號能夠視爲冗餘帳號,直接刪除便可,包括一些程序帳號,若卸載程序後,帳號沒能被刪除,則須要咱們手動進行刪除。shell

對於Linux服務器中長期不用的用戶帳號,若沒法肯定是否應該刪除,能夠暫時將其鎖定。示例以下:vim

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 算法。)

二、鎖定帳戶配置文件

若是服務器中的用戶帳號已經固定,再也不進行更改,還能夠採起鎖定帳號配置文件的方法。使用chattr命令,分別結合「+i」 「-i」選項來鎖定、解鎖文件,使用lsattr命令能夠查看文件鎖定狀況。示例以下:centos

[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、宿主目錄等屬性信息。安全

三、密碼安裝控制

爲了下降密碼被第三方破解或被猜出的危險性,能夠設置密碼有效期來限制密碼最大有效天數,對於密碼已過時的用戶,登陸時則必須重置密碼,不然將拒絕登陸。bash

[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 ~]$

四、命令歷史、自動註銷

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變量設置。網絡

3、用戶切換與提權

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

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

一、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文件中,能夠根據須要進行查看。

二、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命令使用中注意事項:

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

二、若想要查看用戶本身得到哪些sudo受權,能夠執行「 sudo -l」,如果某個用戶的sudo權限列表中出現了(ALL) ALL字樣,則表示受權有誤,此時,該用戶擁有全部命令的執行權限。若visudo命令編輯的受權列表沒有錯誤的話,就須要看看是否將該用戶添加到了wheel組中,而且啓用了pam_wheel認證。

4、開關機安全控制

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

一、調整BIOS引導設置

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

二、禁止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

三、限制更改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服務器的基本系統安全?

5、終端及登陸控制

一、禁止root用戶登陸

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

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

二、禁止普通用戶登陸

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

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

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

相關文章
相關標籤/搜索