linux系統(tǒng)提供安全功能如何?
linux系統(tǒng)提供安全功能非??孔V。
一、賬號安全控制
用戶賬號是計算機使用者的身份憑證或標識,每個要訪問系統(tǒng)資源的人,必須憑借其用戶賬號才能進入計算機。在Linux系統(tǒng)中,提供了多種機制來確保用戶賬號的正當、安全地使用。1.基本(必要)的安全措施
(1)系統(tǒng)賬號的清理在Linux系統(tǒng)中,除了用戶手動創(chuàng)建的各種賬號之外,還包括隨系統(tǒng)或程序安裝過程而產生的其他大量的系統(tǒng)賬號。除了超級用戶root之外,其他大量賬號只是用來維護系統(tǒng)運行服務進程,一般情況是絕不允許登錄系統(tǒng)的,因此也被稱為非登錄用戶賬號。常見的非登錄用戶賬號的登錄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
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服務器中長期不用的用戶賬號,若無法確定是否應該刪除,可以暫時將其鎖定。比如:[root@localhost ~]# usermod -L q1 //鎖定賬號
[root@localhost ~]# passwd -S q1 //查看賬號狀態(tài)
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 //查看為鎖定的狀態(tài)
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow //解鎖文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow //查看為解鎖的狀態(tài)
---------------- /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)密碼安全控制在不安全的網絡環(huán)境中,為了降低密碼被猜出或被暴力破解的風險,用戶應養(yǎng)成定期修改密碼的習慣,避免長期使用同一個密碼。管理員可以在服務器端限制用戶密碼的最大有效天數(shù),對于密碼已過期的用戶,登錄時被要求重新設置密碼,否則將拒絕登錄。以下操作可以將密碼的有效期設為30天:[root@localhost ~]# vim /etc/login.defs //適用于修改完文件新建的用戶
……………… //省略部分內容
PASS_MAX_DAYS 30 //默認存在,修改即可
[root@localhost ~]# chage -M 30 q1 //適用于已經存在的q1用戶
在某些特殊情況下,如要求批量創(chuàng)建用戶初次登錄時必須自設密碼。比如:[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環(huán)境的命令歷史機制為用戶提供了極大的便利,但另一方面也給用戶帶來了潛在的風險,只要獲得用戶的命令歷史文件,該用戶的命令操作過程將會一覽無遺,如果曾經在命令行輸入了明文的密碼,則會給服務器帶來巨大的風險。Bash終端環(huán)境中,歷史命令的記錄條目是由變量HISTSIZE控制,默認是1000條,通過修改其配置文件,可以影響系統(tǒng)中的所有用戶。比如:[root@localhost ~]# vim /etc/profile //適用于新登錄的用戶
………… //省略部分內容,添加以下內容
HISTSIZE=200
[root@localhost ~]# export HISTSIZE=200
//適用于當前用戶,export的作用:將一個變量設置為全局變量
除此之外,還可以修改用戶宿主目錄中的~/.bash_logout文件,添加情況歷史命令的操作語句:[root@localhost ~]# vim ~/.bash_logout //打開配置文件,添加以下內容
history -c //清空歷史命令
clear //清屏
這樣,當用戶退出已登錄Bash環(huán)境后,所記錄的歷史命令將自動清空。Bash終端環(huán)境中,還可以設置一個閑置超時時間,當超過指定的時間見沒有任何輸入時自動注銷終端,這樣可以有效避免當管理員不在時其他人員對服務器的誤操作風險,閑置超時由變量TMOUT來控制,默認單位為秒(s)。[root@localhost ~]# vim /etc/profile //適用于新登錄的用戶
………… //省略部分內容,添加以下內容
export TMOUT=600
[root@localhost ~]# export TMOUT=600 //適用于當前用戶
注意:當正在執(zhí)行程序代碼編譯時,修改系統(tǒng)配置等耗時較長的操作時,應避免設置TMOUT變量。必要時可以使用“unset TMOUT”命令取消TMOUT變量設置。2.用戶切換與提權
大多數(shù)Linux服務器并不建議用戶直接以root用戶進行登錄,一方面可以大大減少因誤操作而導致的破壞;另一方面也降低了特權密碼在不安全的網絡中被泄露的風險。針對這些原因,需要為普通用戶提供一種身份或權限提升機制,以便在必要的時候執(zhí)行管理任務。Linux系統(tǒng)為我們提供了su、sudo兩種命令,其中su命令主要用來切換用戶,而sudo命令用來提升執(zhí)行權限。(1)su命令——切換用戶使用su命令,可以切換為指定的另一個用戶,從而具有該用戶的所有權限。當然,切換時需要對目標用戶的密碼進行驗證(從root用戶切換為其他用戶時除外)。例如:[root@localhost ~]# su - xiaoli
[xiaoli@localhost ~]$ su - root
密碼: //輸入用戶root密碼
[root@localhost ~]# //驗證成后獲得root權限
上述命令中,選項“-”等同于“--login”或“-l”,表示切換用戶后進入目標用戶的登錄shell環(huán)境,若不添加“-”選項,則表示僅切換身份,不切換用戶環(huán)境。對于切換為root用戶的情況時,“root”可以省略。默認情況下,任何用戶都允許使用su命令。從而有機會反復嘗試其他用戶(如root)的登錄密碼。這樣帶來了很大的安全風險,為了加強su命令的使用控制,可以借助于pam_wheel認證模塊,只允許極個別用戶可以使用su命令進行切換。實現(xiàn)過程:[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 文件中,根據(jù)需要即可進行查看。(2)sudo命令——提升執(zhí)行權限通過su命令可以非常方便地切換到另一個用戶,但是前提條件是必須知道目標用戶的登錄密碼(從root用戶切換為其他用戶時除外),從任意用戶切換至root用戶就必須得知道root用戶的密碼。對于生產環(huán)境中的Linux服務器,root用戶的密碼,知道的人,越少越好,否則就會存在巨大的風險。有一種方法,既可以讓普通用戶擁有一部分的管理權限,又不需要知道root用戶的密碼,那就是使用——sudo命令。使用sudo命令皆可以提升執(zhí)行權限。不過,需要由管理員預先執(zhí)行授權,指定哪些用戶以超級用戶(或其他用戶)的身份來執(zhí)行哪些命令。1)在配置文件/etc/sudoers中添加授權sudo機制的配置文件為/etc/sudoers,文件的默認權限是400,需使用專門的visudo工具進行編寫,雖然可以通過“vim”進行編輯,但是保存時必須執(zhí)行“:w!”命令強制操作,否則系統(tǒng)將提示只讀文件而拒絕保存。配置文件/etc/sudoers中,授權記錄的基本配置格式:用戶 主機名列表=命令程序列表
授權配置主要包括用戶、主機、命令三個部分,即授權哪些人在哪些主機上執(zhí)行哪些命令。各部分的具體含義:用戶:直接授權指定的用戶名,或者采用“%組名”的方式(授權一個組的所有用戶);主機:使用此配置文件的主機名稱。此部分主要是方便在多個主機間共用一份sudoers文件,一般設置為localhost或實際的主機名即可;命令:允許授權的用戶通過sudo方式制定的特權命令,需填寫命令程序的完整路徑,多個命令執(zhí)行用逗號“,”進行分隔;典型的sudo配置記錄中,每行對應一個用戶或組的sudo授權配置。比如:[root@localhost ~]# visudo
……………… //省略部分內容
xiaozhang localhost=/sbin/ifconfig //允許用戶xiaozhang在本機使用ifconfig命令
%wheel ALL=NOPASSWD:ALL //允許wheel組中的成員在任意主機上不需要使用密碼即可執(zhí)行任意命令
當使用相同授權的用戶較多,或者授權的命令較多時,可以采用集中定義的別名。用戶、主機、命令部分都可以定義為別名(必須為大寫)分別通過關鍵字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 //使定義的列表全部關聯(lián)起來
sudo配置記錄的命令部分允許使用通配符“*”、取反符號“!”,當需要授權某個目錄下的所有命令或取消其中個別命令時特別有用。比如:[root@localhost ~]# visudo
……………… //省略部分內容
xiaowang localhost=/bin/*,!/bin/passwd root
//允許xiaowang用戶在本機使用/bin路徑下的所有命令,但是不允許給root用戶修改密碼
通常情況下,通過sudo方式執(zhí)行的操作并不記錄,若要啟用sudo日志記錄以備查看,應該這么做:[root@localhost ~]# visudo
……………… //省略部分內容
Defaults logfile="/var/log/sudo"
2)通過sudo執(zhí)行特權命令對于已獲得授權的用戶,通過sudo方式執(zhí)行特權命令時,只需在正常的命令前加“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:
//執(zhí)行命令時需要輸入自己的密碼進行驗證(如果不希望輸入密碼應在命令前添加“NOPASSWD”)
//xiaozhang 可以使用特權命令(已經獲得授權)
在當前會話中,第一次通過sudo執(zhí)行命令時,必須知道用戶本身的密碼(并不是root的密碼)進行驗證,此后再使用sudo命令時,只要與前一次sudo操作的間隔時間不超過5分鐘,則不需要重復驗證。若想查看用戶自己獲得哪些特權命令、環(huán)境變量,可以執(zhí)行“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
二、系統(tǒng)引導和登錄控制
在互聯(lián)網環(huán)境中,大部分服務器是通過遠程登錄的方式來進行管理的,而本地引導和終端登錄往往容易被忽視,從而留下安全隱患。特別是當服務器所在的機房環(huán)境卻反嚴格、安全的管理制度時,如何防止其他用戶的非法介入就成為必須重視的問題。1.開關機安全控制
對于服務器主機,除了物理上的安全防護之外。在開關機安全控制方面,除了要做好物理安全防護以外,還要做好系統(tǒng)本身的一些安全措施。(1)調整BIOS引導設置將第一引導設備設為當前系統(tǒng)所在硬盤;
禁止從其他設備(光盤、U盤、網絡)引導系統(tǒng);
將安全級別設為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文件的前提下執(zhí)行以下命令即可禁用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引導參數(shù)從系統(tǒng)安全的角度來看,如果人很都能夠修改GRUB引導參數(shù),對服務器本身顯然是一個極大的安全隱患。為了加強對引導過程的安全控制,可以為GRUB菜單設置一個密碼,只有提供正確的密碼才被允許修改引導參數(shù)。為GRUB菜單設置的密碼建議采用“grub2-mkpasswd-PBKDF2 ”命令生成。為GRUB菜單設置的密碼建議采用“grub2-mkpasswd-pbkdf2 ”命令生成。[root@localhost ~]# grub2-mkpasswd-pbkdf2 //根據(jù)提示輸入密碼
輸入口令:
Reenter password:
PBKDF2 hash of your password is
//“is”之后是經過加密的密碼字串符(由于限制,不可發(fā)布)
[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
//建議做個備份(實驗環(huán)境,無所謂)
[root@localhost ~]# vim /etc/grub.d/00_header //這是通過密鑰工具生成密碼的配置文件
…………………… //省略部分內容
cat << EOF
set superusers="root" //設置用戶名
password_pbkdf2 root
//填寫剛才通過密鑰工具生成的密鑰文件(就是剛才生成密鑰文件“is”之后的內容,由于限制不可發(fā)布)
//設置用戶名的密碼
EOF
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
//重新生成配置文件
重新計算機測試,按“e”鍵進入GRUB菜單時,將提示:
輸入正確的用戶名和密碼方可進入(實驗用的是 root,跟系統(tǒng)中的root沒有任何關系)!
2.終端及登錄控制
(1)限制root用戶的登錄在Linux系統(tǒng)中,login程序會讀取/etc/securetty文件,以決定root用戶從哪些終端上登錄系統(tǒng)。[root@localhost ~]# vim /etc/securetty
…………………… //省略部分內容
#tty5
#tty6
//禁止root用戶從tty5、tty6登錄系統(tǒng)
(2)禁止普通用戶登錄當服務器正在進行備份或調試等維護工作時,可能不希望再有新的用戶登錄系統(tǒng),這時,只需建立/etc/nologin空文件即可;反之則允許普通用戶登錄。[root@localhost ~]# touch /etc/nologin //禁止普通用戶登錄
[root@localhost ~]# rm -rf /etc/nologin //允許普通用戶登錄
注意:僅建議在服務器維護期間、測試期間使用!三、弱口令檢測、端口掃描
本次實驗使用的安全工具是——John the Ripper和NMAP。John the Ripper工具網盤鏈接:https://pan.baidu.com/s/1HQNCPFnKNBQWmjSNSEZ7_Q提取碼:q1b0NMAP工具使用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可執(zhí)行程序產生
(2)檢測弱口令賬號以實驗環(huán)境Linux系統(tǒng)為例(如果檢測別的密文文件,可以復制一份到本地):[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組合鍵終止后續(xù)過程
//密碼破譯需要時間,需耐心等待
(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組合鍵終止后續(xù)過程
2.網絡掃描工具——NMAP
(1)安裝NMAP軟件包[root@localhost ~]# yum -y install nmap
(2)掃描語法及類型nmap [掃描類型] [選項] <掃描目標 ...>
常用的選項有:“-p”用來指定掃描的端口信息;“-n”表示禁用反向DNS解析(加快掃描速度);常用的幾種掃描類型,如圖:
(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網段中開啟共享服務的主機
可以根據(jù)實際的需求更換不同的選項!