1. 程式人生 > >tcp_wrapper,sudo,nsswitch與pam安全解析

tcp_wrapper,sudo,nsswitch與pam安全解析

tcp wrapper sudo

tcp_wrapper作為tcp協議的一種封裝機制,主要適用於允許或拒絕某個或某段IP地址對本機訪問,之前講過的關於用戶控件的防火墻應用工具iptables也可以實現這一功能,iptables可以針對所有的應用程序服務進行限制,而txp_wrapper這類的封裝器只能針對於sshd以及vsftpd服務;

判斷一個應用程序是否受tcp_wrapper管制,只需要查看他是否具有libwrap.so這個庫即可;

tcp_wrapper的相關配置文件有/etc/hosts.allow,/etc/hosts.deny

/etc/hosts.allow:針對於允許訪問的IP地址,但也可以寫入拒絕訪問的IP地址;優先級高;

/etc/hosts.deny:針對於拒絕訪問的IP地址,但也可以寫入允許訪問的IP地址;優先級低;

配置文件格式:

daemon_list:client_list [option]

daemon_list:應用程序文件列表,如ssh服務,其文件名稱為sshd;

client_list:允許或拒絕的IP或IP段;不能使用前綴格式的IP地址,如172.16.72.1/16,如果有掩碼則必須寫成172.16.72.1/255.255.255.0的形式;也可以寫成IP段的形式,如172.16.,表示172.16這個網段的所有IP地址;

option:allow,允許訪問;

deny,拒絕訪問;

spawn:生成,發起,執行;

在/etc/hosts.allow中允許172.16.72.2主機訪問172.16.72.6主機的ssh服務

技術分享

技術分享

在/etc/hosts.allow中允許172.16.72.2的主機訪問,在/etc/hosts.deny中拒絕所有主機訪問sshd,vsftpd服務;

技術分享

技術分享

172.16.72.1想要訪問172.16.72.6的ssh服務

技術分享

172.16.72.1想要訪問172.16.72.6的vsftpd服務

技術分享

172.16.72.2想要訪問172.16.72.6的ssh服務

技術分享

172.16.72.2想要訪問172.16.72.6的vsftpd服務

技術分享

使用EXCEPT關鍵字,在/etc/hosts.allow中排除172.16.72.2以外的IP地址的訪問;

技術分享

技術分享

172.16.72.1訪問:

技術分享


sudo:

在生產環境中,使用root用戶作為常用用戶是非成危險的操作,容易被別人利用root用戶進行某種破環性的操作,所以在工作當中,使用普通用戶進行管理,在需要使用root用戶時,使用su或者sudo命令臨時切換root權限就是一個較為安全的操作;

su切換用戶,完全切換以及非完全切換;

完全切換:su - username

非完全切換:su username

暫時獲取root權限,當執行完命令後返回bash界面:su -c ‘COMMAND‘

雖然su命令可以幫助我們切換到root用戶下執行,但是這樣也不利於系統的安全性操作,假如一名運維人員被分配到的工作是管理網絡方面的配置,但是如果他使用的是su -c這樣的操作模式,他就不僅僅能對網絡配置文件進行操作了,權限幾乎可以進行任何操作,所以在真正的生產環境中,使用的幾乎都是配置指定命令的sudo;

sudo命令,可以根據/etc/sudoers配置文件中的配置信息,指定哪個用戶可以借用sudo命令使用在root權限下能夠使用的那些命令;

在/etc/sudoers配置文件中,一行只能有一個授權

其格式為:

who where=(whom) what

user client=(runas) COMMANDS

sudo命令:

sudo [option]... command

-u user:以指定的用戶身份運行命令;

-l [command]:列表顯示當前用戶能以sudo的方式運行

的所有命令;

-k:清空緩存,再一次使用sudo就需要輸入密碼;

sudo -k

(第一次執行sudo輸入密碼後,會有緩存保存300秒,這樣300秒內執行sudo就不需要輸入密碼)

/etc/sudoers編寫格式:

who:

user:用戶名;

#uid:指定用戶的uid;

%group:指定組;

%#gid:指定組的gid;

user_alias:事先定義好的用戶別名;

在配置文件中定義別名:

Alias_Type:

User_Alias:設置用戶別名;

Host_Alias:設置sudo範圍別名;

Cmnd_Alias:設置命令別名;

Runas_Alias:一般為root;

設置別名:

Alias_Type NAME=item1,item2....

NAME必須都為大寫;

技術分享

where:

ALL:表示所有主機皆可用;

ip/hostname:單個主機;

Network Address:網絡地址;

host_alias事先定義過的主機的別名;

whom:授權用戶後續命令的運行著的真實身份,通常是root;

what:此次授權能夠執行的命令;

command:單個命令授權;

directory:指定目錄下所有的命令;

sudoedit:特殊命令,授權其他用戶可以執行sudo命令,並且可以編輯/etc/sudoers文件;

cmnd_alias:事先定義過的命令別名;


示例:設置wjq用戶管理整個系統中的用戶密碼

技術分享

技術分享

上圖中,wjq用戶可以修改root密碼,這種操作在現實環境中是不被允許的;

在配置文件中應設置為passwd後不允許跟隨參數root,passwd命令後必須跟隨參數;

如:

技術分享

技術分享

技術分享

類似於passwd這類的可以對root用戶進行修改的特殊命令還有su,sudo等,這兩個命令一旦授權就必須考慮好怎樣排除root登錄的情況,避免普通用戶使用其進行root登錄操作;需要註意的是sudoedit,可以使普通用戶修改/etc/sudoers配置文件;

如:su命令限制

技術分享

技術分享

技術分享


nsswitch與pam:

nsswitch:名稱服務開關,進行名稱解析,將數字符號轉化為計算機能夠識別的語言;

名稱解析,根據特定的信息查找某個已經設置好的存儲庫,查看存儲庫中是否有符合該關鍵字的信 息;如passwd存儲庫,查看用戶相關信息,host存儲庫,查看指定域名或指定IP地址的關聯信息等;

存儲庫的類型有很多種,如文件,關聯型數據庫,非關聯型數據庫,LDAP;

nsswitch的通用框架為上層應用程序提供統一的接口,將數據轉換,從而才能訪問下層不同文件系 統的存儲庫,若是沒有中間層的作用,上層應用程序想要訪問下層不同的文件系統則需要編寫對應文 件系統的程序,而這樣的工作量太大,並不適應於當前環境;

Linux中實現名稱解析的通用框架是通過庫來實現的:

/lib64/libnss*<-->/usr/lib64/libnss*

解析庫的配置是由/etc/nsswitch.conf配置文件進行配置的

格式為:

db: store_format1 store_format2...

技術分享

對passwd,shadow,group,host等進行設置;

查找對應庫中的關鍵字的信息,使用命令getent

技術分享

passwd庫中的關鍵字只用用戶名以及uid

技術分享


pam:

pluggable authentication modules 插入式認證模塊

通用的認證框架;

pam認證的功能模塊亦是通過庫來實現,pam的庫都存儲在/lib64/security(CentOS7)

配置文件:

全局認證配置文件:/etc/pam.conf

格式:

application type control module-path module-options

為每一種應用所提供的專用的配置文件:/etc/pam.d/*

格式:

type control module-path module-options

如:

技術分享

type:

auth:賬戶的認證授權配置有關;

account:表示賬戶類接口,主要負責賬戶合法性檢查,確認帳號是否過期,是否有權限登 錄系統等;

session:服務開始前,服務結束後需要進行的附加操作;

password:修改密碼後,根據密碼復雜度進行的相應操作;

control:

require:隱性的一票否決,若有條目未被滿足,不立刻中斷認證而是繼續查看條目,直到 條目結束才中斷認證;

requisite:顯性的一票否決,若有條目未被滿足則立刻中斷認證;

sufficient:當本條目滿足時,若該條目之前的所有條目都被滿足了,則整個棧立即終止並 立即返回認證成功的信號;如果本條目的驗證失敗,還需要繼續參考其他的條目規 則;一票通過;沒有一票否決;會當做optional對待

optional:無足輕重,不管成功還是失敗都不影響全局;

include:將其他的配置文件中的流程棧包含在當前位置,就好像把其他的配置文件的配置 內容復制到當前文件

substack:運行其他配置文件的流程,但與include不同的是其在子棧中運行,其運行結果 不影響主棧;

status:

user_unknown:用戶未知,無法查找到;

success:成功後返回什麽結果,通常為ok;

default:默認情況下返回什麽結果;

action:返回的動作;ok,N,bad,ignore,die(一票否決),done(一票成功)

如:

技術分享

module-path:相對路徑,絕對路徑,/lib64/security/*


module-arguments:默認的模塊參數;


tcp_wrapper,sudo,nsswitch與pam安全解析