1. 程式人生 > >Linux系統安全及應用

Linux系統安全及應用

linux 賬號安全 nmap 弱口令檢測 楊書凡

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


賬號安全控制

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

1. 基本安全措施

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

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

[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。可使用冗余賬戶,直接刪除即可,還有一些隨著應用程序的卸載未能自動刪除,則需要管理員手動清除

[root@localhost ~]# userdel uucp
[root@localhost ~]# userdel games
[root@localhost ~]# userdel gopher


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

[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查看文件鎖定情況

[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)密碼安全控制

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

[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條,可修改配置文件,影響系統中的所有用戶。

[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控制,默認單位

[root@localhost ~]# vim /etc/profile         //適用於新登錄用戶
export TMOUT=600

[root@localhost ~]# TMOUT=600               //適用於當前用戶
[root@localhost ~]# unset TMOUT             //如果進行耗時較長的操作,避免打擾,可取消TMOUT變量



2. 用戶切換與提權

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

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

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

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


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

[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

[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執行特權命令

[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快捷鍵重啟

[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菜單設置一個密碼,只有提供正確的密碼才被允許修改引導參數。

[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密碼,如下圖所示

技術分享圖片



2. 終端及登錄控制

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

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

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

/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用戶從指定的終端登錄,只需註釋或刪除對應的行即可

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


(3)禁止普通用戶登錄

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

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

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




弱口令檢測、端口掃描

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

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

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

[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定期掃描內部網絡,可以找出網絡中不可控的應用服務,及時關閉不安全的服務,較少安全風險

[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通而放棄掃描

[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的主機是否開啟文件共享服務




Linux系統安全及應用