linux認證和防護機制
第一章Tcp-Wrapper
一、Tcp_wrapper
1、獨立守護進程(standalone)
類似獨立經營的專賣店。
2、xinetd(非獨立守護進程,超級進程)
類似大商場裏面的專賣店。xinetd如果接受wrapper訪問控制,那麽裏面的所有子進程都接受wrapper的控制。
3、tcp-wrapper的配置文件
/etc/hosts.allow
/etc/hosts.deny
註意:進程訪問會先通過/etc/hosts.allow,如果有匹配規則就放行,然後檢查hosts.deny進行檢查如果有匹配就拒絕,如果沒有就放行進入下一個默認規則,tcp_wrapper的默認規則就是放行。
4、語法格式
daemon_list:client_list[:options]
Daemon_list
使用服務程序的可執行文件名,通常在/usr/bin,/bin/等目錄下。
多個daemon之間用逗號隔開。
ALL表示所有服務。
[email protected]表示當主機有多個ip地址時,可以對不同的ip地址訪問采用不同的訪問策略。
Client-list
直接指定具體ip地址的主機
使用network/mask的形式指定主機範圍,格式必須是10.0.0.0/255.0.0.0的格式
使用主機名或FQDN名
all,表示所有
local,表示和本地主機在同一網段的主機
konwn,表示FQDN可以被解析的
unknown,表示主機名不能被解析的。
paranoid,正向和反向解析不匹配的
except,不包括,除。。。。之外。
實例:
Telnet服務不允許172.16.0.0/16訪問,但允許172.16.100.200訪問,其他客戶端不受控制。
方法1:
/etc/hosts.allow
In.telnetd:172.16.100.200
/etc/hosts.deny
In.telnetd:172.16.
方法2:
/etc/hosts.deny
In.telnetd:172.16.EXCEPT 172.16.100.200
方法3:
/etc/hosts.allow
In.telnetd: ALL EXCEPT 172.16. EXCEPT 172.16.100.200
options:
spawn:啟動一個日誌追加功能。
deny:
allow:
sshd:192.168.1.89 EXCEPT 192.168.1.: spawn echo ‘somebody enter `who`‘>>/var/log/tecwrapper.log
~
tcp_wrapper宏:
%c:客戶端信息([email protected])
%s:服務器端信息([email protected])
%h:客戶端主機名
%p:服務器端PID
通過以下命令獲取詳細信息:
[[email protected]~]$man 5 hosts_access
二、Xinetd
1、配置文件/etc/xinetd.conf
全局配置文件,對片段配置文件都生效。
可以將xinetd的日誌文件單獨定義到一個獨立文件中,使用FILE /var/log/xinetd.log的形式。
服務配置段,通過service開頭並定義。
# Define general logging characteristics.
log_type = SYSLOG daemon info使用FILE/var/log/xinetd.log的形式定義日誌到獨立的文件中。info表示日誌記錄級別。
log_on_failure = HOST記錄登錄失敗時記錄的信息為主機信息。
log_on_success = PID HOST DURATION EXIT記錄登錄成功的信息包括PID,主機名,登錄時長,退出時間。
通過man xinetd.conf查看配置文件使用方法。
2、片段/etc/xinetd.d/*
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
# allows crc checksumming etc.
service rsync要和文件名相同
{
disable = yes是否啟用,yes是禁用
flags = IPv6
socket_type = stream套接字類型,常用的是tcp/udp/rpc三種。stream表示tcp,dgram表示udp。
wait = no是否等待進程完成,適用於tcp套接字。
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID在原有賦值的基礎上,增加新的值。
log_type= FILE /var/log/rsync.log
}
~
~
擴展知識:
訪問控制:
only_from = :允許哪些地址訪問
ip:10.10.10.10
network= 10.10.10.0/24,10.10.10.0/255.255.255.0
hostname:www.dtedu.com
domain:www.dtedu.com
no_access = 拒絕哪些地址訪問
access_time = 設置訪問時間範圍,hh:mm-hh:mm
bind = 設置主機監聽的地址,當一臺主機有多個ip地址時,可以設置提供服務的在那個地址上。
cps = 第一個參數設置每秒鐘連接進來的最大數量,當超過最大連接數時會暫停提供服務,第二個參數定義暫停時間長度。
per_source = 用來設置一個單獨ip地址最大並發連接請求。
instances = 用來定義當前服務最大提供能力,通常為連接數
service_args = 用來設置默認啟動服務時,附加的參數
banner = 用來定義連接進來時提供的標語信息,可以指定一個文件。
知識點:系統日誌記錄是通過syslogd這個程序來完成的,它生成兩個進程syslogd和klogd,這個是早期的進程,後來系統日誌通過rsyslog進行管理,生成的進程只有rsyslogd一個了。
[[email protected]~]$service rsyslog status
rsyslogd (pid 1280) is running...
提供rpc服務的是portmap應用程序。
第二章authentication(認證)
驗證一個客戶端的用戶名和密碼是否能通過檢驗。那麽這個驗證的數據庫必然在驗證方。
一、用戶名認證原理
在計算機中,能夠識別的並非是我們輸入的用戶名,而是UID,GID,就像是主機名對應一個ip地址,一個服務對應一個端口一樣。需要一種名稱轉換機制,這裏就稱為名稱解析。這個解析需要一個數據庫或表來完成,常見的有dns、/etc/hosts、mysql、nis、ldap。
在計算機系統中,我們常見的登錄服務、ftp服務等都要涉及到用戶身份驗證,比如登錄會調用一個login的程序,由這個程序來驗證用戶身份,當用戶輸入用戶名時,要轉換成UID,需要名稱解析庫那麽有那麽多的名稱解析庫用哪個呢?這裏使用的是/etc/passwd,而如果另一個服務也要驗證可能調用的就是另一個庫了,這樣紛雜的情況會給程序帶來很大設計壓力,所以就在app和名稱解析之間有了一個中間件-nsswitch。
那麽程序在進行用戶名認證的時候使用了nssswitch,nsswitch要調用具體的數據庫文件,就需要一個“解析的過程”,這個就由/usr/lib下的庫文件來完成。
[[email protected]~]$ls /usr/lib64/ |grep nss
libnss3.so
libnssckbi.so
libnss_compat.so
libnssdbm3.chk
libnssdbm3.so
libnss_dns.so
libnss_files.so
libnss_hesiod.so
libnss_nisplus.so
libnss_nis.so
libnsspem.so
libnsssysinit.so
libnssutil3.so
nsswitch
配置文件位置:/etc/nsswitch.conf
配置講解:
success:服務ok,名稱解析ok
notfound:服務ok,名稱解析fail
unavail:服務fail
tryagain:
默認是在首個庫解析成功後就返回信息,否則沒有找到就繼續
passwd:nis [NOTFOUND=return] files
表示如果對passwd驗證的時候,首先進行nis解析,如果nis沒有解析出來就不再從files中解析了,只有當nis服務不可用的時候才從files中解析。
小工具:
getent,用來驗證通過nsswitch進行配置後,當解析時是否從指定的庫中進行解析的。比如:
驗證nsswitch中的hosts是否是從/etc/hosts文件進行驗證。
[[email protected]~]$getent hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain411
10.40.0.225 node5.dtedu.com node5
192.168.1.11 ms.dtedu.com ms
10.40.0.226 node6.dtedu.com node6
127.0.0.1 localhost localhost.localdomain localhost6 localhost6.localdomain6
只驗證其中的一個信息:
[[email protected]~]$getent hosts node5.dtedu.com
10.40.0.225 node5.dtedu.com node5
認證和名稱解析是兩套完全獨立的運行機制,認證過程的密碼驗證是通過對密碼進行md5計算後生成校驗碼然後和系統內部shadow中保存的md5驗證碼進行對比來驗證密碼正確性的。
二、密碼認證原理
1、密碼的認證機制有多種手段,主要包括:
1、md5認證,就是前面說的通過/etc/shadow的驗證方法。 pam_unix.so
2、直接查看密碼的驗證方式。
3、ldap驗證pam_winbind.so
4、nis驗證
5、kerberos驗證
2、同樣對於密碼認證的多樣性,造成了也需要一個專門的中間件,來管理程序使用不同的認證方式,這個中間件就是PAM,它本身是一個framwork(框架),並不做真正的認證,只是提供認證的方法(庫文件,/lib64/security)。
[[email protected]~]$ll /lib64/security/
總用量 732
-rwxr-xr-x. 1 root root 18552 10月 15 2014 pam_access.so
-rwxr-xr-x. 1 root root 7504 12月 7 2011 pam_cap.so
-rwxr-xr-x. 1 root root 10272 10月 15 2014 pam_chroot.so
-rwxr-xr-x. 1 root root 27080 10月 15 2014 pam_console.so
-rwxr-xr-x. 1 root root 14432 10月 15 2014 pam_cracklib.so
3、配置文件/etc/pam.d/*
[[email protected]~]$ls /etc/pam.d/
chfn login runuser su
chsh newrole runuser-l sudo
config-util other smartcard-auth sudo-i
crond passwd smartcard-auth-ac su-l
cvs password-auth smtp system-auth
fingerprint-auth password-auth-ac smtp.postfix system-auth-ac
fingerprint-auth-ac remote sshd
hbmgmtd run_init ssh-keycat
4、PAM(可插入式認證模塊)
基本格式:Typecontrolmodule-path[module-arguments]
4.1type類型:
auth:用來檢查認證密碼是否匹配
acct:驗證用戶賬戶是否有效,就是匹配但不有效比如鎖定。
password:驗證密碼修改時是否符合密碼安全屬性要求,比如長短,時間
session:會話驗證
4.2control類型:
required:一票否決權,就是說自己這一關一定要通過,通過後其他關要不要檢查自己不做決定。required必須都通過
requisite:真正意義上的一票否決權,沒有一票肯定權。
sufficient:表示自己這一關如果通過了,就可以直接晉級過關了。不用檢查後面的了。一票通過權,如果沒有通過並沒有否決權。
optional:可選項,通過就繼續檢查其他選項,錯誤就忽略。
include:
5、模塊的用途
pam_unix模塊,常規的登錄檢查模塊,參數有nullok、shadow、md5
參考文件:The Linux-PAM System Administrators‘ Guide
二、authorization(授權)
驗證一個用戶是否擁有訪問一個服務器提供的某項服務的能力。
linux認證和防護機制