作為一個開放源代碼的操作系統,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密碼,如下圖所示
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的主機是否開啟文件共享服務
|