保證Linux系統安全的必要措施

做爲一種開放源代碼的操做系統,Linux服務器以其安全、高效和穩定的顯著優點而得以普遍的應用。隨着而來的就是——Linux系統的安全問題linux

本篇博客主要圍繞Linux系統的安全問題:
1、帳號安全控制;
2、系統引導和登陸控制;
3、弱口令檢測、端口掃描。git

1、帳號安全控制

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

1.基本(必要)的安全措施

(1)系統帳號的清理

在Linux系統中,除了用戶手動建立的各類帳號以外,還包括隨系統或程序安裝過程而產生的其餘大量的系統帳號。除了超級用戶root以外,其餘大量帳號只是用來維護系統運行服務進程,通常狀況是毫不容許登陸系統的,所以也被稱爲非登陸用戶帳號shell

常見的非登陸用戶帳號的登陸shell一般是/sbin/nologin,表示禁止終端登陸,應確保不被認爲改動,好比:vim

[root@localhost ~]# grep "/sbin/nologin" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
                 ………………                     //省略部份內容

各類非登陸用戶帳號中,還有至關一部分是不多用到的,好比games。這些用戶帳號被稱爲冗餘帳號(建議刪除)。除此以外,還有一些隨應用程序安裝的用戶帳號,若卸載應用程序後未能自動刪除,則需管理員手動將其刪除。安全

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

[root@localhost ~]# usermod -L q1                                  //鎖定帳號
[root@localhost ~]# passwd -S q1                                   //查看帳號狀態
q1 LK 2019-08-27 0 99999 7 -1 (密碼已被鎖定。)
[root@localhost ~]# usermod -U q1                                 //解鎖帳號
[root@localhost ~]# passwd -S q1
q1 PS 2019-08-27 0 99999 7 -1 (密碼已設置,使用 SHA512 算法。)

若是服務器中的用戶帳號已經固定,再也不進行修改,還能夠採起鎖定帳號配置文件的方法,進一步保障帳號的安全性。好比:服務器

[root@localhost ~]# chattr +i /etc/passwd /etc/shadow                      //鎖定文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow                          //查看爲鎖定的狀態
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow                     //解鎖文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow                         //查看爲解鎖的狀態
---------------- /etc/passwd
---------------- /etc/shadow

在帳號文件被鎖定的狀況下,其內容將不容許被修改。所以也就沒法添加、刪除帳號,也不能更改用戶的密碼、登陸shell、宿主目錄等屬性信息。網絡

[root@localhost ~]# chattr +i /etc/passwd /etc/shadow
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost ~]# useradd a1
useradd:沒法打開 /etc/passwd

(2)密碼安全控制

在不安全的網絡環境中,爲了下降密碼被猜出或被非法操做破解的風險,用戶應養成按期修改密碼的習慣,避免長期使用同一個密碼。管理員能夠在服務器端限制用戶密碼的最大有效天數,對於密碼已過時的用戶,登陸時被要求從新設置密碼,不然將拒絕登陸。ide

如下操做能夠將密碼的有效期設爲30天:

[root@localhost ~]# vim /etc/login.defs            //適用於修改完文件新建的用戶
                    ………………                               //省略部份內容
PASS_MAX_DAYS   30                                   //默認存在,修改便可
[root@localhost ~]# chage -M 30 q1                //適用於已經存在的q1用戶

在某些特殊狀況下,如要求批量建立用戶初次登陸時必須自設密碼。好比:

[root@localhost ~]# chage -d 0 q1                    //新建的用戶、已存在的用戶都適用
Localhost login:q1
password:
You are required to change your password immediately (root enforced)
WARNING: Your password has expired.
You must change your password now and login again!
更改用戶 q1 的密碼 。
爲 q1 更改 STRESS 密碼。
(當前)UNIX 密碼:

(3)命令歷史、自動註銷

Shell環境的命令歷史機制爲用戶提供了極大的便利,但另外一方面也給用戶帶來了潛在的風險,只要得到用戶的命令歷史文件,該用戶的命令操做過程將會一覽無遺,若是曾經在命令行輸入了明文的密碼,則會給服務器帶來巨大的風險。

Bash終端環境中,歷史命令的記錄條目是由變量HISTSIZE控制,默認是1000條,經過修改其配置文件,能夠影響系統中的全部用戶。好比:

[root@localhost ~]# vim /etc/profile                //適用於新登陸的用戶
                     …………                                   //省略部份內容,添加如下內容
HISTSIZE=200
[root@localhost ~]# export HISTSIZE=200  
//適用於當前用戶,export的做用:將一個變量設置爲全局變量

除此以外,還能夠修改用戶宿主目錄中的~/.bash_logout文件,添加狀況歷史命令的操做語句:

[root@localhost ~]# vim ~/.bash_logout                  //打開配置文件,添加如下內容
history -c                                                                  //清空歷史命令
clear                                                                        //清屏

這樣,當用戶退出已登陸Bash環境後,所記錄的歷史命令將自動清空。

Bash終端環境中,還能夠設置一個閒置超時時間,當超過指定的時間見沒有任何輸入時自動註銷終端,這樣能夠有效避免當管理員不在時其餘人員對服務器的誤操做風險,閒置超時由變量TMOUT來控制,默認單位爲秒(s)。

[root@localhost ~]# vim /etc/profile                //適用於新登陸的用戶
                     …………                                   //省略部份內容,添加如下內容
export TMOUT=600
[root@localhost ~]# export TMOUT=600      //適用於當前用戶

注意:當正在執行程序代碼編譯時,修改系統配置等耗時較長的操做時,應避免設置TMOUT變量。必要時可使用「unset TMOUT」命令取消TMOUT變量設置。

2.用戶切換與提權

大多數Linux服務器並不建議用戶直接以root用戶進行登陸,一方面能夠大大減小因誤操做而致使的破壞;另外一方面也下降了特權密碼在不安全的網絡中被泄露的風險。針對這些緣由,須要爲普通用戶提供一種身份或權限提高機制,以便在必要的時候執行管理任務。

Linux系統爲咱們提供了su、sudo兩種命令,其中su命令主要用來切換用戶,而sudo命令用來提高執行權限。

(1)su命令——切換用戶

使用su命令,能夠切換爲指定的另外一個用戶,從而具備該用戶的全部權限。固然,切換時須要對目標用戶的密碼進行驗證(從root用戶切換爲其餘用戶時除外)。例如:

[root@localhost ~]# su - xiaoli
[xiaoli@localhost ~]$ su - root
密碼:                                                          //輸入用戶root密碼
[root@localhost ~]#                                     //驗證成後得到root權限

上述命令中,選項「-」等同於「--login」或「-l」,表示切換用戶後進入目標用戶的登陸shell環境,若不添加「-」選項,則表示僅切換身份,不切換用戶環境。對於切換爲root用戶的狀況時,「root」能夠省略。

默認狀況下,任何用戶都容許使用su命令。從而有機會反覆嘗試其餘用戶(如root)的登陸密碼。這樣帶來了很大的安全風險,爲了增強su命令的使用控制,能夠藉助於pam_wheel認證模塊,只容許極個別用戶可使用su命令進行切換。實現過程:

[root@localhost ~]# gpasswd -a xiaoli wheel
//正在將用戶「xiaoli」加入到「wheel」組中
[root@localhost ~]# grep "wheel"  /etc/group
wheel:x:10:xiaoli
[root@localhost ~]# vim /etc/pam.d/su
auth            sufficient      pam_rootok.so                              //默認存在
                 …………                                                             //省略部份內容
auth            required        pam_wheel.so use_uid               //默認存在,去掉「#」號便可!
                 …………                                                             //省略部份內容

啓用pam_wheel認證後,未加入wheel組內的其餘用戶將沒法使用su命令,嘗試進行切換時,將提示「拒絕權限」,從而將切換用戶的權限控制在最小範圍內。

[xiaozhang@localhost ~]$ su - root
密碼:                                                                   //不論密碼正確與否,都將提示拒絕權限
su: 拒絕權限

對用戶的任何操做(添加、刪除、切換)等操做都將記錄在/var/log/secure 文件中,根據須要便可進行查看。

(2)sudo命令——提高執行權限

經過su命令能夠很是方便地切換到另外一個用戶,可是前提條件是必須知道目標用戶的登陸密碼(從root用戶切換爲其餘用戶時除外),從任意用戶切換至root用戶就必須得知道root用戶的密碼。對於生產環境中的Linux服務器,root用戶的密碼,知道的人,越少越好,不然就會存在巨大的風險。

有一種方法,既可讓普通用戶擁有一部分的管理權限,又不須要知道root用戶的密碼,那就是使用——sudo命令。

使用sudo命令皆能夠提高執行權限。不過,須要由管理員預先執行受權,指定哪些用戶以超級用戶(或其餘用戶)的身份來執行哪些命令。

1)在配置文件/etc/sudoers中添加受權

sudo機制的配置文件爲/etc/sudoers,文件的默認權限是400,需使用專門的visudo工具進行編寫,雖然能夠經過「vim」進行編輯,可是保存時必須執行「:w!」命令強制操做,不然系統將提示只讀文件而拒絕保存。

配置文件/etc/sudoers中,受權記錄的基本配置格式:

用戶    主機名列表=命令程序列表

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

  • 用戶:直接受權指定的用戶名,或者採用「%組名」的方式(受權一個組的全部用戶);
  • 主機:使用此配置文件的主機名稱。此部分主要是方便在多個主機間共用一份sudoers文件,通常設置爲localhost或實際的主機名便可;
  • 命令:容許受權的用戶經過sudo方式制定的特權命令,需填寫命令程序的完整路徑,多個命令執行用逗號「,」進行分隔;

典型的sudo配置記錄中,每行對應一個用戶或組的sudo受權配置。好比:

[root@localhost ~]# visudo
                              ………………             //省略部份內容
xiaozhang       localhost=/sbin/ifconfig    //容許用戶xiaozhang在本機使用ifconfig命令
%wheel  ALL=NOPASSWD:ALL            //容許wheel組中的成員在任意主機上不須要使用密碼便可執行任意命令

當使用相同受權的用戶較多,或者受權的命令較多時,能夠採用集中定義的別名。用戶、主機、命令部分均可以定義爲別名(必須爲大寫)分別經過關鍵字User_Alias、Host_Alias、Cmnd_Alias來進行設置。好比:

[root@localhost ~]# visudo
                              ………………             //省略部份內容
User_Alias      OPERATORS=user1,user2,user3                 //定義用戶名列表
Host_Alias      MAILSVRS=smtp,pop                                   //定義主機列表
Cmnd_Alias      PKGTOOLS=/bin/rpm,/usr/bin/yum            //定義命令列表
OPERATORS       MAILSVRS=PKGTOOLS                       //使定義的列表所有關聯起來

sudo配置記錄的命令部分容許使用通配符「*」、取反符號「!」,當須要受權某個目錄下的全部命令或取消其中個別命令時特別有用。好比:

[root@localhost ~]# visudo
                              ………………             //省略部份內容
xiaowang        localhost=/bin/*,!/bin/passwd root  
//容許xiaowang用戶在本機使用/bin路徑下的全部命令,可是不容許給root用戶修改密碼

一般狀況下,經過sudo方式執行的操做並不記錄,若要啓用sudo日誌記錄以備查看,應該這麼作:

[root@localhost ~]# visudo
                              ………………             //省略部份內容
Defaults logfile="/var/log/sudo"
2)經過sudo執行特權命令

對於已得到受權的用戶,經過sudo方式執行特權命令時,只需在正常的命令前加「sudo」便可!

[xiaosun@localhost ~]$ sudo ifconfig ens33 192.168.1.1/24

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for xiaosun: 
xiaosun 不在 sudoers 文件中。此事將被報告。
//由於xiaosun沒得到特權命令的受權
[xiaozhang@localhost ~]$ ifconfig ens33 192.168.1.1/24
SIOCSIFADDR: 不容許的操做
SIOCSIFFLAGS: 不容許的操做
SIOCSIFNETMASK: 不容許的操做
[xiaozhang@localhost ~]$ sudo ifconfig ens33 192.168.1.1/24

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for xiaozhang:                 
//執行命令時須要輸入本身的密碼進行驗證(若是不但願輸入密碼應在命令前添加「NOPASSWD」)
//xiaozhang 可使用特權命令(已經得到受權)

在當前會話中,第一次經過sudo執行命令時,必須知道用戶自己的密碼(並非root的密碼)進行驗證,此後再使用sudo命令時,只要與前一次sudo操做的間隔時間不超過5分鐘,則不須要重複驗證。

若想查看用戶本身得到哪些特權命令、環境變量,能夠執行「sudo -l」命令。

[xiaozhang@localhost ~]$ sudo -l
[sudo] password for xiaozhang: 
匹配此主機上 xiaozhang 的默認條目:
    !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME
    HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG
    LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION
    LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC
    LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS
    _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin,
    logfile=/var/log/sudo

用戶 xiaozhang 能夠在該主機上運行如下命令:
    (root) /sbin/ifconfig
//查看已經受權的用戶
[root@localhost ~]# su - xiaosun
上一次登陸:二 8月 27 21:41:40 CST 2019pts/0 上
[xiaosun@localhost ~]$ sudo -l
[sudo] password for xiaosun: 
對不起,用戶 xiaosun 不能在 localhost 上運行 sudo。
//查看爲受權的用戶

若是啓用sudo日誌,則能夠查看用戶sudo的操做記錄。

[root@localhost ~]# tail /var/log/sudo
Aug 27 21:41:07 : xiaoli : TTY=pts/0 ; PWD=/home/xiaoli ; USER=root ;
    COMMAND=/sbin/ifconfig ens33 192.168.1.1/24
Aug 27 21:42:53 : xiaozhang : TTY=pts/0 ; PWD=/home/xiaozhang ; USER=root ;
    COMMAND=/sbin/ifconfig ens33 192.168.1.1/24

2、系統引導和登陸控制

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

1.開關機安全控制

對於服務器主機,除了物理上的安全防禦以外。在開關機安全控制方面,除了要作好物理安全防禦之外,還要作好系統自己的一些安全措施。

(1)調整BIOS引導設置

  • 將第一引導設備設爲當前系統所在硬盤;
  • 禁止從其餘設備(光盤、U盤、網絡)引導系統;
  • 將安全級別設爲setup,並設置管理員密碼;

(2)禁止ctrl+Alt+Del快捷鍵重啓

快捷鍵重啓功能爲服務器本地維護提供了方便,但對於多終端登陸的Linux服務器,禁用此功能是比較安全的選擇。操做以下:

[root@localhost ~]# cat /etc/inittab                 //查看提供ctrl+Alt+Del快捷鍵的文件
                                ………………                 //省略部份內容
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
[root@localhost ~]# ll /usr/lib/systemd/system/ctrl-alt-del.target 
lrwxrwxrwx. 1 root root 13 7月  14 18:54 /usr/lib/systemd/system/ctrl-alt-del.target -> reboot.target
//查看得知它是reboot.target文件的軟鏈接

不影響reboot.target文件的前提下執行如下命令便可禁用ctrl+Alt+Del快捷鍵

[root@localhost ~]# systemctl mask ctrl-alt-del.target                                  //註銷ctrl+Alt+Del服務
Created symlink from /etc/systemd/system/ctrl-alt-del.target to /dev/null.
[root@localhost ~]# systemctl daemon-reload                                             //從新加載systemd配置
[root@localhost ~]# systemctl unmask ctrl-alt-del.target                             //從新開啓ctrl+Alt+Del服務
Removed symlink /etc/systemd/system/ctrl-alt-del.target.
[root@localhost ~]# systemctl daemon-reload                                            //從新加載systemd配置

(3)限制更改GRUB引導參數

從系統安全的角度來看,若是人很都可以修改GRUB引導參數,對服務器自己顯然是一個極大的安全隱患。爲了增強對引導過程的安全控制,能夠爲GRUB菜單設置一個密碼,只有提供正確的密碼才被容許修改引導參數。
爲GRUB菜單設置的密碼建議採用「grub2-mkpasswd-pbkdf2 」命令生成。
爲GRUB菜單設置的密碼建議採用「grub2-mkpasswd-pbkdf2 」命令生成。

[root@localhost ~]# grub2-mkpasswd-pbkdf2                              //根據提示輸入密碼
輸入口令:
Reenter password: 
PBKDF2 hash of your password is 
//「is」以後是通過加密的密碼字串符(因爲限制,不可發佈)
[root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
[root@localhost ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
//建議作個備份(實驗環境,無所謂)
[root@localhost ~]# vim /etc/grub.d/00_header                 //這是經過密鑰工具生成密碼的配置文件
                   ……………………                         //省略部份內容
cat << EOF
set superusers="root"                                      //設置用戶名
password_pbkdf2 root                                    
//填寫剛纔經過密鑰工具生成的密鑰文件(就是剛纔生成密鑰文件「is」以後的內容,因爲限制不可發佈)
//設置用戶名的密碼 
EOF
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
//從新生成配置文件

從新計算機測試,按「e」鍵進入GRUB菜單時,將提示:
保證Linux系統安全的必要措施
輸入正確的用戶名和密碼方可進入(實驗用的是 root,跟系統中的root沒有任何關係)!

2.終端及登陸控制

(1)限制root用戶的登陸

在Linux系統中,login程序會讀取/etc/securetty文件,以決定root用戶從哪些終端上登陸系統。

[root@localhost ~]# vim /etc/securetty 
                   ……………………                  //省略部份內容
#tty5
#tty6
//禁止root用戶從tty五、tty6登陸系統

(2)禁止普通用戶登陸

當服務器正在進行備份或調試等維護工做時,可能不但願再有新的用戶登陸系統,這時,只需創建/etc/nologin空文件便可;反之則容許普通用戶登陸。

[root@localhost ~]# touch /etc/nologin                //禁止普通用戶登陸
[root@localhost ~]# rm -rf /etc/nologin                //容許普通用戶登陸

注意:僅建議在服務器維護期間、測試期間使用!

3、弱口令檢測、端口掃描

本次實驗使用的安全工具是——John the Ripper和NMAP。
John the Ripper工具網盤連接:https://pan.baidu.com/s/1HQNCPFnKNBQWmjSNSEZ7_Q
提取碼:q1b0
NMAP工具使用yum安裝便可!

1.弱口令檢測工具——John the Ripper

對於任何一個承擔着安全責任的管理員,及時找出這些弱口令是很是必要的,這樣便於採起進一步的安全措施(修改口令)。

John the Ripper是一款開源的密 碼 破 解 工具,可以在已知密文的狀況下快速分析出明文的密碼字串,支持DES、MD5等多種加密算法,並且容許使用字典進行破解。

(1)安裝John the Ripper

[root@localhost ~]# tar zxf john-1.8.0.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/john-1.8.0/
[root@localhost john-1.8.0]# ls
doc  README  run  src
//doc目錄是手冊文檔、README是連接的說明文件、run是運行程序、src是源碼文件
[root@localhost john-1.8.0]# cd src
[root@localhost src]# make clean linux-x86-64
//經過這種方式進行編譯
[root@localhost src]# cd ../run
[root@localhost run]# ls
ascii.chr   john       lm_ascii.chr  makechr       relbench  unique
digits.chr  john.conf  mailer        password.lst  unafs     unshadow
//確認有john可執行程序產生

(2)檢測弱口令帳號

以實驗環境Linux系統爲例(若是檢測別的密文文件,能夠複製一份到本地):

[root@localhost run]# ./john /etc/shadow
Loaded 6 password hashes with 6 different salts (crypt, generic crypt(3) [?/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
123456           (user1)
123456           (xiaowang)
123456           (xiaosun)
123456           (xiaoli)
123456           (xiaozhang)
………………              按Ctrl+C組合鍵終止後續過程
//密碼破譯須要時間,需耐心等待

(3)使用密碼字典進行破解

[root@localhost run]# :>john.opt
//狀況已破解的帳戶列表,以便從新分析、破解
[root@localhost run]# ./john --wordlist=./password.lst /etc/shadow
//使用工具自己自帶的密碼字典進行破解
Loaded 6 password hashes with 6 different salts (crypt, generic crypt(3) [?/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
123456           (user1)
123456           (xiaowang)
123456           (xiaosun)
123456           (xiaoli)
123456           (xiaozhang)
………………              按Ctrl+C組合鍵終止後續過程

2.網絡掃描工具——NMAP

(1)安裝NMAP軟件包

[root@localhost ~]# yum -y install nmap

(2)掃描語法及類型

nmap  [掃描類型]  [選項]  <掃描目標 ...>

經常使用的選項有:
「-p」用來指定掃描的端口信息;
「-n」表示禁用反向DNS解析(加快掃描速度);

經常使用的幾種掃描類型,如圖:
保證Linux系統安全的必要措施

(3)掃描操做示例

[root@localhost ~]# nmap 127.0.0.1
//掃描本機開啓的TCP端口
[root@localhost ~]# nmap -sU 127.0.0.1
//掃描本機開啓的UDP端口
[root@localhost ~]# nmap -p 21 192.168.1.0/24
//掃描192.168.1.0網段中哪些主機提供了FTP服務
[root@localhost ~]# nmap -n -sP 192.168.1.0/24
//掃描192.168.1.0網段存活的主機(能夠ping通)
[root@localhost ~]# nmap -p 139,445 192.168.1.0/24
//掃描192.168.1.0網段中開啓共享服務的主機

能夠根據實際的需求更換不一樣的選項!

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

相關文章
相關標籤/搜索