1. 程式人生 > >linux認證和防護機制

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認證和防護機制