linux 系統級別安全


作為一個開放源代碼的操作系統,Linux服務器以其安全、高效和穩定的顯著優勢而得以廣泛應用。下面主要從賬戶安全、系統引導、登錄控制的角度,優化Linux系統的安全性

 

賬號安全控制

    用戶賬號,是計算機使用者的身份憑證,每個訪問系統資源的人,必須要有賬號才能登錄計算機,在Linux中,提供了多種機制來確保用戶賬號的安全使用

1. 基本安全措施

(1)系統賬號清理、鎖定

    在Linux系統中,除了用戶手動創建的各種賬號外,還包括隨系統或程序安裝過程中生成的大量其他賬號,用來維護系統運作、啟動或保持服務進程,一般不允許登陸,稱為非登錄用戶。為了保持系統安全,這些用戶的登陸shell通常是/sbin/nologin,表示禁止終端登錄,應確保不被人為改動

1
2
3
4
5
6
7
[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
……   // 省略部分內容

 

   各種非登錄用戶中,有一些很少用到,如news、uucp、games、gopher。可使用冗余賬戶,直接刪除即可,還有一些隨着應用程序的卸載未能自動刪除,則需要管理員手動清除

1
2
3
[root@localhost ~] # userdel uucp
[root@localhost ~] # userdel games
[root@localhost ~] # userdel gopher

 

    對於一些長期不用的賬號,若無法確定是否刪除,應暫時鎖定(用usermod、passwd命令都可以鎖定、解鎖賬號)

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~] # usermod -L ysf                       //鎖定賬號
[root@localhost ~] # passwd -S ysf                        //查看賬號狀態
ysf LK 2017-12-22 0 99999 7 -1 (密碼已被鎖定。)
[root@localhost ~] # usermod -U ysf                       //解鎖賬號
[root@localhost ~] # passwd -S ysf
ysf PS 2017-12-22 0 99999 7 -1 (密碼已設置,使用 SHA512 加密。)
[root@localhost ~] # passwd -l ysf
鎖定用戶 ysf 的密碼 。
passwd : 操作成功
[root@localhost ~] # passwd -u ysf
解鎖用戶 ysf 的密碼 。
passwd : 操作成功

 

    如果服務器中的賬號已經固定,不進行更改,可以采用鎖定賬號配置文件的方法。使用chattr命令鎖定、解鎖文件,使用lsattr查看文件鎖定情況

1
2
3
4
5
6
7
8
9
[root@localhost ~] # chattr +i /etc/passwd /etc/shadow              //+i,鎖定文件
[root@localhost ~] # lsattr /etc/passwd /etc/shadow                 //查看文件鎖定情況
----i--------e-  /etc/passwd
----i--------e-  /etc/shadow
[root@localhost ~] # useradd yangshufan            //文件鎖定,無法添加、刪除用戶,也不能更改用戶的密碼、登陸shell、宿主目錄等屬性
useradd : cannot  open  /etc/passwd
[root@localhost ~] # chattr -i /etc/passwd /etc/shadow              //-i,解鎖文件
[root@localhost ~] # useradd yangshufan                             //正常創建用戶
[root@localhost ~] #

 

(2)密碼安全控制

   為了降低密碼被猜出或暴力破解的風險,應避免長期使用同一個密碼。管理員可以在服務器端限制用戶密碼使用最大有效期天數,對密碼已過期的用戶,登錄時要求重新設置密碼,否則拒絕登錄

1
2
3
4
5
6
7
8
[root@localhost ~] # vim /etc/login.defs                   //適應於新建的用戶
PASS_MAX_DAYS   30               // 密碼最多使用30天,必須更改密碼
PASS_MIN_DAYS   0                // 密碼最少使用0天,才能更改密碼
PASS_MIN_LEN    5                // 可接受的密碼長度       
PASS_WARN_AGE   7                // 密碼到期前的警告時間
 
[root@localhost ~] # chage -M 30 ysf           //適用於以存在的用戶,密碼30天過期
[root@localhost ~] # chage -d 0 yangshufan          //下次登錄時,必須更改密碼

 

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

    shell環境下,命令歷史機制為用戶提供了極大的便利,也帶來了一些潛在的風險。只有獲得用戶的命令歷史記錄,該用戶的命令操作將一覽無余,服務器的安全將受到威脅。歷史命令記錄條數有變量HISTSIZE控制,默認1000條,可修改配置文件,影響系統中的所有用戶。

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~] # vim /etc/profile           //適用於新登錄用戶
HISTSIZE=100
[root@localhost ~] # HISTSIZE=5          //適用於當前用戶
[root@localhost ~] # history 
    96  chage -d 0 yangshufan
    97  vim  /etc/profile
    98   export  HISTSIZE=100
    99   export  HISTSIZE=5
   100   history 
[root@localhost ~] # vim ~/.bash_logout        //添加以下語句,用戶退出登錄bash時,自動清空歷史命令
history  -c
clear

 

    bash終端環境中,可設置一個閑置超時時間,當超過指定的時間沒有任何輸入時,自動注銷終端。由變量TMOUT控制,默認單位

1
2
3
4
5
[root@localhost ~] # vim /etc/profile         //適用於新登錄用戶
export  TMOUT=600
 
[root@localhost ~] # TMOUT=600               //適用於當前用戶
[root@localhost ~] # unset TMOUT             //如果進行耗時較長的操作,避免打擾,可取消TMOUT變量

 

 

2. 用戶切換與提權

    一般情況下,不建議直接使用root用戶登錄,一是減少因操作失誤而造成的破壞;二是降低特權密碼被泄露的風險。鑒於這些原因,需要為普通用戶提供一種身份切換或權限提升機制,以進行管理任務

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

    使用su命令,可以切換一個指定的用戶,擁有該用戶的所有權限

1
2
3
4
[root@localhost ~] # su - ysf            //root切換為普通用戶,不需要密碼驗證
[ysf@localhost ~]$  su  -                  // 普通用戶切換為root,需要驗證,root可省略
密碼:
[root@localhost ~] #

 

   默認所有用戶允許使用su命令,從而有機會反復嘗試其他用戶(root)的登陸密碼,帶來安全風險。可以使用pam_wheel認證模塊,只允許極個別用戶使用su命令進行切換

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost ~] # vim /etc/pam.d/su
auth            required        pam_wheel.so use_uid       // 這行去掉注釋 
[root@localhost ~] # su - ysf
[ysf@localhost ~]$  su  - root            // 再次嘗試切換,就會提示密碼錯誤
密碼:
su : 密碼不正確
[ysf@localhost ~]$  exit
logout
[root@localhost ~] # gpasswd -a ysf wheel          //添加授權用戶到wheel組
Adding user ysf to group wheel
[root@localhost ~] # grep wheel /etc/group         //查看wheel組成員
wheel:x:10:ysf
[root@localhost ~] # su - ysf                      
[ysf@localhost ~]$  su  -                            // 再次嘗試切換,切換成功
密碼:
[root@localhost ~] #

 

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

    使用su命令雖然可以切換為root用戶,但必須知道root密碼要知道每多一個人知道特權密碼,就多一份風險。而sudo命令可以讓普通用戶擁有一部分root用戶才能執行的命令,有不用知道特權密碼

1)修改配置文件/etc/sudoers

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~] # visudo        //也可使用vi進行編輯,但保存是必須執行“:w!”強制執行
%wheel          ALL=(ALL)       NOPASSWD: ALL         //wheel 組的用戶不需要密碼驗證
yangshufan      localhost= /sbin/ifconfig              //yangshufan 能在主機localhost上執行 ifconfig 命令修改IP地址
 
User_Alias      USER=ysf,yang
Host_Alias      HOST=win,www
Cmnd_Alias      CMND= /bin/rpm , /usr/bin/yum
USER            HOST=CMND                       // 這四行表示允許用戶ysf,yang在主機win,www上執行rpm,yum命令
 
yang            localhost= /sbin/ *,! /sbin/ifconfig       //yang 可以執行在 /sbin 目錄下除了 ifconfig 外所有的命令程序
 
Defaults logfile= "/var/log/sudo"               // 啟用 sudo 日志記錄以備管理員查看

 

2)通過sudo執行特權命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[yangshufan@localhost ~]$  ifconfig  eth0:0 10.0.0.1 /8           // 未用 sudo 命令
SIOCSIFADDR: 權限不夠
SIOCSIFFLAGS: 權限不夠
[yangshufan@localhost ~]$  sudo  ifconfig  eth0:0 10.0.0.1 /8        // 使用 sudo 命令
……   // 省略部分內容
[ sudo ] password  for  yangshufan:                              // 驗證密碼
[yangshufan@localhost ~]$  ifconfig  eth0:0                    // 查看命令,執行成功
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:1C:B4:FB  
           inet addr:10.0.0.1  Bcast:10.255.255.255  Mask:255.0.0.0
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
 
[yangshufan@localhost ~]$  sudo  -l                 // 查看獲得哪些 sudo 授權
[ sudo ] password  for  yangshufan:  
用戶 yangshufan 可以在該主機上運行以下命令:
     (root)  /sbin/ifconfig       
     
[root@localhost ~] # tail /var/log/sudo           //可以看到用戶的sudo操作記錄
Dec 27 07:49:35 : yangshufan : TTY=pts /0  ; PWD= /home/yangshufan  ; USER=root ;
     COMMAND= /sbin/ifconfig  eth0:0 10.0.0.1 /8

 

 

系統引導和登錄控制

    現在,大部分服務器是通過遠程登錄的方式來進行管理的,本地引導和終端登錄過程往往被忽視,從而留下安全隱患。

1. 開關機安全控制

   對於服務器主機,其物理安全是非常重要的,除了要保持機箱完好、機櫃鎖閉、嚴格控制機房人員進出、硬件設備現場接觸等,在開關機方面,還要做好系統本身的安全措施

(1)調整BIOS引導設置    

* 將第一優先引導設備設為當前系統所在磁盤

* 禁止從其他設備引導系統,對應的項為Disabled

* 將BIOS安全級別改為setup,並設好管理密碼,以防止未授權修改

 

(2)禁止Ctrl+Alt+Del快捷鍵重啟

1
2
3
[root@localhost ~] # vim /etc/init/control-alt-delete.conf 
#exec /sbin/shutdown -r now "Control-Alt-Delete pressed"             //加#,注釋信息
[root@localhost ~] # reboot                                           //重啟生效

 

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

    通過修改GRUB引導參數進入單用戶模式,不需要密碼就可以進入系統,而且還用於root權限,只應在緊急情況下使用。從系統安全角度來看,如果任何人都能修改GRUB引導參數,對服務器來說是個極大地威脅。所以需要為GRUB菜單設置一個密碼,只有提供正確的密碼才被允許修改引導參數。

1
2
3
4
5
6
7
8
[root@localhost ~] # grub-md5-crypt           //經過MD5算法加密的字符串,安全性更好
Password: 
Retype password: 
$1$vkPke/$TRfLUURiy7XMKa13XgvIH1              // 經過加密的密碼字符串
 
[root@localhost ~] # vim /boot/grub/grub.conf 
password --md5 $1$vkPke/$TRfLUURiy7XMKa13XgvIH1            // 復制密碼,添加到第一個title之前就可以了
……   // 省略部分內容

 

    再次修改GRUB菜單時,必須輸入正確的GRUB密碼,如下圖所示

楊書凡04.png

 

 

2. 終端及登錄控制

    在Linux中,默認開啟了留個tty終端,允許任何用戶進行本地登錄,可從以下方面限制本地登錄:

(1)減少開放的tty終端個數

    對於遠程維護的Linux服務器,六個tty終端有些多余

1
2
3
4
5
6
7
8
9
/etc/init/tty .conf                     // 控制 tty 終端的開啟
/etc/init/start-ttys .conf              // 控制 tty 終端的開啟數量、設備文件
/etc/sysconfig/init                    // 控制 tty 終端的開啟數量、終端顏色
 
[root@localhost ~] # vim /etc/init/start-ttys.conf  
env  ACTIVE_CONSOLES= /dev/tty [1-3]                        // 修改為1-3
[root@localhost ~] # vim /etc/sysconfig/init 
ACTIVE_CONSOLES= /dev/tty [1-3]                            // 修改為1-3
[root@localhost ~] # reboot

   重啟后,將無法切換到tty4、tty5、tty6

 

(2)禁止root用戶登錄

    在Linux系統中,login程序會讀取/etc/securetty文件,以決定允許root用戶從哪些終端登錄。若要禁止root用戶從指定的終端登錄,只需注釋或刪除對應的行即可

1
2
3
[root@localhost ~] # vim /etc/securetty 
#tty1
#tty2

 

(3)禁止普通用戶登錄

    當服務器在維護時,不希望普通用戶登錄系統,只需建立/etc/nologin文件即可。當login程序檢測到/etc/nologin文件存在時,將拒絕普通用戶登錄系統(root除外)

1
[root@localhost ~] # touch /etc/nologin

    當收到刪除/etc/nologin文件或重啟主機后,即可恢復正常    

 

 

 

弱口令檢測、端口掃描

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

    過於簡單的密碼是服務器面臨的最大風險,盡管大家知道設置一個更長、更復雜的密碼會更安全,但總有人貪圖方便而采用簡單、易記的密碼。對於任何一個承擔着安全責任的管理員,及時找出這些弱口令賬戶是非常重要的,這樣更容易采取安全措施(如提醒重設更安全的密碼)

   John the Ripper是一款開源的密碼破解工具,能在已知密文的情況下,快速分析明文的密碼字串,支持DES、MD5等多種加密算法,允許使用密碼字典進行暴力破解。通過John the Ripper,可以檢測Linux/UNIX系統用戶的密碼強度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@localhost ~] # tar zxf john-1.8.0.tar.gz
[root@localhost ~] # cd john-1.8.0
[root@localhost john-1.8.0] # ls -ld *
drwxr-xr-x. 2 root root 4096 12月 27 09:45 doc                            // 手冊文檔
lrwxrwxrwx. 1 root root   10 12月 27 09:45 README -> doc /README           // 鏈接文件
drwxr-xr-x. 2 root root 4096 12月 27 09:45 run                            // 運行程序
drwxr-xr-x. 2 root root 4096 12月 27 09:45 src                            // 源碼文件
 
[root@localhost john-1.8.0] # cd src/
[root@localhost src] # make clean linux-x86-64                    //切換到src目錄下,編譯
……   // 省略編譯信息
[root@localhost src] # ls ../run/john                            //run子目錄生成john可執行程序
.. /run/john
[root@localhost src] # cp /etc/shadow /etc/shadow.txt            //准備待破解的密碼文件
[root@localhost src] # cd ../run
[root@localhost run] # ./john /etc/shadow.txt                    //執行暴力破解,破解后信息保存到john.pot文件
Loaded 3 password hashes with 3 different salts (crypt, generic crypt(3) [? /64 ])
Press  'q'  or Ctrl-C to abort, almost any other key  for  status
ysf              (ysf)
123              (yangshufan)
……   // 按Ctrl+C,終止后續過程
[root@localhost run] # ./john --show /etc/shadow.txt             //可通過--show選項,查看已破解的賬戶列表
ysf:ysf:17527:0:30:7:::
yangshufan:123:17527:0:99999:7:::
2 password hashes cracked, 1 left
 
[root@localhost run] # :> john.pot                       //清空以破解的賬戶列表,以便使用密碼字典重新破解
[root@localhost run] # ./john --wordlist=./password.lst /etc/shadow.txt              //提供默認的密碼字典password.lst,可往里添加更多密碼組合
Loaded 3 password hashes with 3 different salts (crypt, generic crypt(3) [? /64 ])
Press  'q'  or Ctrl-C to abort, almost any other key  for  status
123              (yangshufan)
1g 0:00:00:18 100% 0.05467g /s  193.8p /s  393.0c /s  393.0C /s  !@ #$%..sss
Use the  "--show"  option to display all of the cracked passwords reliably
Session completed

    從上可看出,由於密碼字典的密碼組合較少,僅破解出一個其中密碼。也不難看出像這類密碼有多么脆弱了

 

 

 

2. 網絡掃描——NMAP

    NMAP是一款強大的端口掃描類安全評測工具,支持ping掃描、多端口檢測、OS識別等多種技術。使用NMAP定期掃描內部網絡,可以找出網絡中不可控的應用服務,及時關閉不安全的服務,較少安全風險

1
2
3
[root@localhost ~] # mount /dev/cdrom /media/
mount : block device  /dev/sr0  is write-protected, mounting  read -only
[root@localhost ~] # rpm -ivh /media/Packages/nmap-5.51-3.el6.x86_64.rpm

 

    NMAP的掃描程序位於/usr/bin/nmap目錄下,命令基本格式如下:

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

 

    其中:

掃描目標:可以是主機名、IP地址、網絡地址等,多個目標以空格分隔

選項:-p指定掃描的端口;-n禁用反向解析(加快掃描)    

常用的掃描類型如下

-sS:TCP SYN掃描(半開掃描),只向目標發送SYN數據包,如果收到SYN/ACK響應就認為目標正在監聽,並立即斷開連接;否則就認為目標端口未開放

-sT:TCP連接掃描,完整的TCP掃描方式,如果成功連接就認為目標端口正在監聽;否則就認為目標端口未開放

-sF:TCP FIN掃描,開放的端口會忽略,關閉的端口會回應RST數據包。這種方式掃描可間接檢測防火牆的健壯性

-sU:UDP掃描,探測目標主機提供哪些UDP服務,UDP掃描會比較慢

-sP:ICMP掃描,快速判斷目標主機是否存活,不做其他掃描

-s0:跳過ping檢測,當對方不響應ICMP請求時,使用這種方式可避免因無法ping通而放棄掃描

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost ~] # nmap 127.0.0.1                 //掃描常用的TCP端口
Not shown: 995 closed ports
PORT     STATE SERVICE
22 /tcp    open   ssh
25 /tcp    open   smtp
111 /tcp   open   rpcbind
631 /tcp   open   ipp
3306 /tcp  open   mysql
 
[root@localhost ~] # nmap -sU 127.0.0.1            //掃描常用的UDP端口
PORT    STATE         SERVICE
111 /udp  open           rpcbind
631 /udp  open |filtered ipp
 
[root@localhost ~] # nmap -p 21 192.168.1.0/24     //檢測192.168.1.0/24網段有哪些主機提供FTP服務
 
[root@localhost ~] # nmap -n -sP 192.168.1.0/24     //檢測192.168.1.0/24網段有哪些主機存活(能ping通)
 
[root@localhost ~] # nmap -p 139,445 192.168.4.10-20   //檢測192.168.10-20的主機是否開啟文件共享服務

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM