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系統安全及應用