在平時的工作環境中,網絡中不時有搞怪man去搞一些破壞,如修改我們的二進制程序,洪水***等等,當我們遇到這些問題我們如何去解決它呢?
一、AIDE
當一個***者進入了你的系統並且種植了***,通常會想辦法來隱蔽這個***(除了***自身的一些隱蔽特性外,他會盡量給你檢查系統的過程設置障礙),通常***者會修改一些文件,比如管理員通常用ps -aux來查看系統進程,那麼***者很可能用自己經過修改的ps程序來替換掉你係統上的ps程序,以使用ps命令查不到正在運行的***程序。如果***者發現管理員正在運行crontab作業,也有可能替換掉crontab程序等等。所以由此可以看出對於系統文件或是關鍵文件的檢查是很必要的。目前就係統完整性檢查的工具用的比較多的有兩款:Tripwire和AIDE,前者是一款商業軟件,後者是一款免費的但功能也很強大的工具。
1、AIDE 概念
AIDE(Adevanced Intrusion Detection Environment)高級***檢測環境)是一個***檢測工具,主要用途是檢查文件的完整性,審計計算機上的那些文件被更改過了。
2、工作機制
AIDE能夠構造一個指定文件的數據庫,它使用aide.conf作爲其配置文件。AIDE數據庫能夠保存文件的各種屬性,包括:權限(permission)、索引節點序號(inode number)、所屬用戶(user)、所屬用戶組(group)、文件大小、最後修改時間(mtime)、創建時間(ctime)、最後訪問時間(atime)、增加的大小以及連接數。AIDE還能夠使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每個文件的校驗碼或散列號。
建議:這個數據庫不應該保存那些經常變動的文件信息,例如:日誌文件、郵件、/proc文件系統、用戶起始目錄以及臨時目錄。
二、AIDE使用介紹
1、安裝AIDE包
[root@centos6~]#yum install -y aide
2、AIDE的配置文件
/etc/aide.conf
The location of the database to be read. aide檢查是從下面的文件中讀取 database=/var/lib/aide/aide.db.gz
The location of the database to be written.aide更新數據庫是寫到下面文件中 database_out=/var/lib/aide/aide.db.new.gz
設定選項 | 解釋 |
p | permissions |
i | inode |
n | number of links |
u | user |
g | group |
s | size |
b | block count |
m | mtime |
a | atime |
c | ctime |
S | check for growing size |
acl | Access Control Lists |
selinux | SELinux security context |
xattrs | Extended file attributes |
md5 | md5 checksum |
sha1 | sha1 checksum |
sha256 | sha256 checksum |
sha512 | sha512 checksum |
rmd160 | rmd160 checksum |
tiger | tiger checksum |
定義檢測屬性時可以組合定義,相當於alias作用。
3、aide命令介紹
選項 | 解釋 |
-i,--init | 初始化數據庫 |
-C,--check | 檢查數據庫 |
-u,--update | 更新數據庫 |
初始化數據庫:
[root@centos6~]#aide --init
查看/var/lib/aide/
目錄下是否生成數據庫
檢查數據庫時,必須把命令該爲aide.db.gz
才能檢查數據庫。
[root@centos6/var/lib/aide]#mv aide.db.new.gz aide.db.gz
[root@centos6~]#aide -C
更新數據庫
[root@centos6~]#aide -u
二、sudo
在生產環境中,一個人的力量總是不夠的,我們可以把一些任務分配別的人員協同操作,這樣辦事效率也提高了。但是我們又不想把所有的權限都分給小夥伴,所以sudo就解決了這樣一個問題。sudo能夠授權指定用戶在指定主機上運行某些命令;如果未授權用戶使用sudo嘗試登錄,會提示管理員。這樣方便了我們的管理。
1、含義
sudo是linux系統管理指令,是允許系統管理員讓普通用戶執行一些或者全部的root命令的一個工具,如halt,reboot,su等等。<摘自:百度>
2、sudo的優點
(1)提供日誌,記錄每個用戶使用sudo操作
(2)爲系統管理員提供配置文件,允許系統管理員集中地管理用戶的使用權限和使用的主機。
(3)sudo提供用戶一個使用時長,相當於“入場券”,如果超時,重新登錄。默認爲5分鐘(如果想修改,只能自己編譯安裝時候修改)。
(4)sudo提供專門的修改文件工具visudo,默認是vi界面,如果想使用vim功能,可以自定環境變量“export EDORIT=vim”
。
(5)自己創建文件的權限爲440,如果你忘記修改權限,visudo命令可以自動修改完成。
(6)修改配置文件是同時打開一個,不能打開多個。並且配置文件不建議直接去修改。
3、配置文件
/etc/sudoers/
和/etc/sudoers.d/*
(1)配置文件支持使用通配符
? | 任意單個字符 |
* | 匹配任意長度 |
[] | 匹配單個字符 |
[!] | 除了的任意字符 |
\ | 支持轉義 |
(2)授權規則格式
用戶 登入主機=(代表用戶) 命令
選項 | 說明 |
user | 運行命令着的身份 |
host | 通過哪些主機 |
(runas) | 以哪個用戶身份運行 |
command | 運行哪些命令 |
user和runas格式
username #uid %group_name %#group_name User_Alias Runas_Alias
host
ip或hostname network network/prefix(只有CentOS7支持) Host_Alias
command
commandName directory sudoedit 可以對文件`/etc/sudoers`修改 CMD_Alias
注意:這裏的命令一定要與執行的命令精確匹配,否則不成功。別名定義一定要大寫字母開頭,構成只能有字母和數字。
(3)別名
格式:Alias_Type NAME1 = item1, item2, item3 : NAME2 = item4, item5 注意:不同的別名之間需要使用冒號隔開。%wheel是一個組,權限和root一樣,使用時一定要小心。如果在添加NOPASSWD不提供口令直接登錄。sudo使用時登錄需要認證,但是此時認證時運行者的口令。
時間戳文件/var/db/sudo/
日誌文件/var/log/secure
(4)設定默認值defaults
示例:Defaults:laowang runas_default=tom
4、sudo命令
格式:sudo [-u user] COMMAND
選項 | 解釋 |
-u | 指定用戶,默認root |
-l | 列出用戶在主機上可用的和被禁止的命令 |
-v | 再延長有效期5分鐘,更新時間戳 |
-k | 清除時間戳(197--01-01),西祠需要重新輸入密碼 |
-K | 與-k類似,但還要刪除時間戳文件 |
-b | 在後臺執行 |
-p | 改變詢問密碼的提示符號 %p代表用戶 |
-V | 顯示版本信息等配置信息 |
注意:在sudoers文件中,如果定義文件後面添加“”表示所有,即這個文件後面可以添加任意字符 ,言外之意,就是可以看到別的文件。*
三、tcp_wrappers
1、概念
Transmission Control Protocol (TCP) Wrappers 爲由 inetd 生成的服務提供了增強的安全性。TCP Wrappers 是一種對使用 /etc/inetd.sec 的替換方法。TCP Wrappers 提供防止主機名和主機地址欺騙的保護。欺騙是一種僞裝成有效用戶或主機以獲得對系統進行未經授權的訪問的方法。
2、工作機制
(1)工作在第四層的TCP協議 (2)對有狀態的特定服務進行安全檢測並實現訪問控制 (3)以庫文件形式實現 (4)其進程是否接受libwrap的控制取決於發起此進程的程序在編譯時是否針對libwrap進行編譯的。
3、如何查看服務程序是否支持libwrap訪問控制
(1)先使用命令查看執行程序文件是哪個
which COMMAND
(2)使用命令ldd 對上述文件查找
ldd
which COMMAND|grep libwrap
4、配置文件
1、配置文件
/etc/hosts.allow
和/etc/hosts.deny
2、檢查順序
在tcp_wrappers中檢查順序並不像前面的服務一樣,前面的成功後面的就不再執行。而tcp_wrappers的檢查順序爲
/etc/hosts.allow
-->/etc/hosts.deny
前面的規則一旦匹配成功,直接生效,將不再繼續後面的執行;如果前面的沒有成功,則繼續向後執行。
3、基本語法 damon_list@host:client_list [:option:option...]
damon_list格式:
(1)單個應用程序的二進制文件名,而非服務名 (2)以逗號或空格分隔的應用程序文件名列表 (3)ALL 表示所有接受tcp_wrappers控制的服務程序 (4)主機有多個IP ,可用@hostIP來實現 如:[email protected]
client_host格式:
(1)以逗號或空格分隔的客戶端列表 (2)基於IP地址 (3)基於主機名 (4)基於網絡/掩碼 192.168.159.0/255.255.255.0 (5)基於CIDR格式 192.168.159.0/24 (6)基於網絡組 @munetwork (7)內置ACL:ALL,LOCAL,KNOWN,UNKNOWN,PARANOID
EXPECT用法
示例:
sshd:192.168.159.0/24 EXPECT 192.168.159.151
[:OPTIONS]選項
(1)deny 主要用在/etc/host.allow文件中,定義“拒絕”規則。 如:vsftpd:192.168.159.159:deny 先定義了這個IP可以訪問但是又否定。
(2)allow 主要用在/etc/hosts.deny 定義“允許”規則 如:vsftpd:192.168.159.159:allow 先定義192.168.159.159不允許然後否定允許使用
(3)spawn 啓動一個外部進程完成執行的操作 選項: %c:客戶端信息 %s:服務器端信息 %d:服務名 %p:守護進程的PID 注意:如果在配置文件中想使用“%”需要使用兩個“%”;如果使用“:”則需要使用“\”進行轉義。
示例: 在CentOS6主機上編輯/etc/hosts.allow
文件[root@localhost~]#vim /etc/hosts.allow
sshd:192.168.4.135:spaw echo "
date%c to %s %d %p " >> /var/log/sshd.log
在CentOS7主機上連接 [root@centos7/var/log]#ssh 192.168.4.131
在CentOS6上查看是否生成sshd.log文件並且有內容[root@localhost~]#cat /var/log/sshd.log
Thu Sep 14 09:33:18 CST 2017 192.168.4.135 to [email protected] sshd 29705
(4)twist 實際動作是拒絕訪問,使用指定的操作替換當前服務,標準I/O和ERROR發送到客戶端,默認輸出至/dev/null
示例: 在CentOS6上配置/etc/hosts.allow
文件[root@localhost~]#vim /etc/hosts.allow
vsftpd:192.168.4.135:twist /bin/echo "Do not login"
在CentOS7上連接 [root@centos7~]#ftp 192.168.4.131
Connected to 192.168.4.131 (192.168.4.131). Do not login ftp>
測試工具:
tcpdmatch [-d] daemon[@host] client
-d 測試當前目錄下的host.allow和hosts.deny文件
[root@localhost~]#tcpdmatch -d /etc/hosts.deny 192.168.4.135
client: address 192.168.4.135 server: process hosts.deny access: granted
[root@localhost~]#tcpdmatch -d /etc/hosts.allow 192.168.4.135
client: address 192.168.4.135 server: process hosts.allow access: granted
四、PAM認證
1、概念
PAM (Pluggable Authentication Modules)可插入認證模塊是一套共享庫,使本地系統管理員可以隨意選擇程序的認證方式.。提供了對所有服務進行認證的中央機制,適用於login,遠程登錄(telnet,rlogin,fsh,ftp,點對點協議(ppp)),su等應用程序中。系統管理員通過PAM配置文件來指定不同應用程序的不同認證策略;應用程序開發者通過在服務程序中使用PAM API來實現對認證方法的調用;而PAM服務模塊的開發者則利用PAM SPI來編寫模塊,主要調用一些函數,將不同的認證機制加入到系統中;PAM接口庫則讀取配置文件,將應用和相應PAM服務模塊聯繫起來。
2、配置文件
模塊存放位置/lib64/security/
環境相關的配置/etc/security/
模塊通過讀取配置文件完成用戶對系統資源的使用控制
主配置文件/etc/pam.conf
默認不存在
文檔 /usr/share/doc/pam-*;man -k pam_ 查看所有pam的說明
注意:如果/etc/pam.d/和/etc/pam.conf兩個文件同時存在,則只有/etc/pam.d/下的文件起效。*
3、認證原理
PAM一般遵循的順序:server-->PAM(配置文件)-->pam.*so;PAM認證首先要確定哪一項服務,然後加載相應PAM的配置文件(/etc/pam.d),最後調用認證文件(/lib64/security/)進行認證。
4、passwd程序PAM認證機制過程
(1)用戶執行/usr/bin/passwd程序,並輸入密碼;
(2)passwd開始呼叫PAM模塊,PAM模塊會搜尋passwd程序的PAM相關設定文件,這個設定文件在/etc/pam.d/
目錄下與之程序同名的文件。即PAM會搜尋/etc/pam.d/passwd
(3)經由/etc/pam.d/passwd
設定的文件數據取用PAM所提供的相關模塊來進行驗證;
(4)將驗證結果回傳給passwd程序,而passwd這個程序會根據PAM回傳的結果決定下一個動作。
5、/etc/pam.d/目錄下文件格式
type | control | module-path | argument |
(1)type類型
type | 解釋 |
Auth | 賬號的認證和授權 |
Account | 與賬號管理相關的非認證類的功能 |
Password | 用戶修改密碼複雜度檢查機制等功能 |
Session | 用戶獲取之前或使用服務完成之後需要進行的一些附加操作,如打開或關閉數據的信息,監視目錄等 |
-type | 表示因爲缺失而不能加載的模塊將不記錄在系統日誌,對於不總是安裝在系統上的模塊有用 |
(2)control PAM庫如何處理與該服務相關的PAM模塊成功或失敗情況
control | 解釋 |
required | 一票否決,表示本模塊必須返回成功才能通過認證,但是如果該模塊返回失敗,失敗結果也不會立即通知用戶,而是要等到同一type類型全部執行完畢再將放回給應用程序。即爲必要條件 |
requisite | 一票否決,該模塊必須返回成功才能通過認證,但是一旦該模塊返回失敗,將不再執行同一type內的任何模塊,而是直接將控制權返回給應用程序。即一個必要條件 |
sufficient | 一票通過權,表明本模塊返回成功則通過身份認證的要求,不必再執行同一type內的其他模塊,但是如果本模塊返回失敗可忽略,即充分條件 |
optional | 表明本模塊爲可選的,它的成功與否不會對身份認證起關鍵作用,其返回值一般被忽略 |
include | 調用其他的配置文件中定義的配置信息 |
還有另外一種方式:使用一個或多個“status=action” status:檢查結果的返回值 action:採取行爲ok,done,die,bad,ignore,reset
action | 解釋 |
ok | 模塊通過,繼續檢查 |
done | 模塊通過,返回最後檢查給應用 |
bad | 結果失敗,繼續檢查 |
die | 結果失敗,返回失敗結果給應用 |
ingore | 結果忽略,不影響最後結果 |
reset | 忽略已經得到的結果 |
(3)modules-path
相對路徑:/lib64/security目錄下的模塊可使用的相對路徑;如pam_shells.so 絕對路徑:如果編譯安裝以後模塊存放的位置
建議:將來修改PAM文件時,備用一個ssh連接窗口,以免我們誤操作。
(4)argument 用來給該模塊傳遞參數
6常用pam模塊
1、pam_shells:檢查有效shell 會調用文件/etc/shells
示例
(a)先創建用戶指定其bash爲/bin/csh
[root@centos6~]#useradd -s /bin/bash wang
(b)在CentOS6上修改/etc/shells和/etc/pam.d/su文件
在認證前添加
auth required pam_shells.so
(c)在CnetOS6使用wang賬戶登錄
[root@localhostsecurity]#su - wang
Password: su: incorrect password
但是此時使用ssh還可以連接
[[email protected]]#ssh [email protected]
[email protected]'s password: Last login: Thu Sep 14 13:42:35 2017 from 192.168.4.131
如果我們想徹底禁止wang登錄把/etc/pam.d/su 和/etc/pam.d/sshd兩個文件在auth前天添加如下一行:
auth required pam_shells.so
(d)如果讓wang登錄刪除上述設置即可。
2、pam_securetty.so:只允許root用戶在/etc/securetty列出的安全終端上登錄
示例
允許telnet使用root登錄
方法一:
修改配置文件/etc/pam.d/remote
配置文件
#auth required pam_securetty.so
方法二:
直接修改/etc/securetty
添加所需要登錄的終端;如果連接的終端使用完畢後,後續的連接將不會執行。
3、pam_nologin.so:如果/etc/nologin文件存在,將導致非root用戶不能登錄
作用機理:如果用戶shell是/etc/nologin時,當該用戶登錄時,會顯示/etc/nologin.txt文件內容,並拒絕登錄。
file=/PATH/TO/SOMEFILE
示例
修改配置文件login文件添加入下面一行:
auth required pam_nologin.so
在CentOS7使用wang登錄
[root@centos7~]#ssh [email protected]
[email protected]'s password: Connection closed by 192.168.4.131
如果想給非root用戶提示信息可以編輯文件/etc/pam.d/nologin
account required pam_nologin.so file=/etc/nologin.txt
4、pam_limits.so:在用戶級別對其可使用的資源的限制
(1)配置文件
/etc/security/limits.conf /etc/security/limits.d/*.conf
(2)格式
domain | type | item | value |
(a)domain 應用於哪些對象
username 單個用戶 @group 組內所有用戶
(b)type類型
soft軟限制,普通用戶可以自己修改;如果出現會有警告信息 hard硬限制,只有root能設定,且通過kernel強制生效 -:兩者同時設定
(c)item 限制資源
core | limits the core file size (KB) |
data | max data size (KB) |
fsize | maximum filesize (KB) |
memlock | max locked-in-memory address space (KB) |
nofile | max number of open file descriptors |
rss | max resident set size (KB) |
stack | max stack size (KB) |
cpu | max CPU time (MIN) |
nproc | max number of processes |
as | address space limit (KB) |
maxlogins | max number of logins for this user |
maxsyslogins | max number of logins on the system |
priority | the priority to run user process with |
locks | max number of file locks the user can hold |
sigpending | max number of pending signals |
msgqueue | max memory used by POSIX message queues (bytes) |
nice | max nice priority allowed to raise to values: [-20, 19] |
rtprio | max realtime priority |
(4)value 指定具體值
ulimit命令的使用
選項 | 解釋 |
-a | 列出所有設定值 |
-n | 最多打開的文件描述符個數 |
-u | 最大用戶進程數 |
-S | 使用'SOFT'資源限制 |
-H | 使用‘HARD’資源限制 |
5、pam_time.so
(1)格式:
services; | ttys; | users; | times; |
(2)services 服務程序名稱
(3)ttys 登錄的終端 可是使用*
(4)users 用戶
(5)times
格式:day/time-range Mo Tu We Th Fr Sa Su Wk Wd Al MoMo = no day MoWk = all weekdays bar Monday 所有的工作日但是除了星期一 AllFr 所有添但是除了星期五 time-range: 格式:HHMM 如果開始時間小於結束時間,系統假設到了第二天。 可是使用模式 “&” “ |”“ !”
示例
禁止用戶上班時間使用ssh服務
編輯/etc/security/time.conf添加如下一行:
sshd;*;centos;Wk
編輯/etc/pam.d/sshd添加如下一行:
auth required pam_time_so
瞭解pam_group.so模塊