tcp_wrapper:mysql
庫文件:libwrap.sosql
tcp封裝器;shell
判斷一個服務或應用程序是否受tcp_wrapper的訪問控制:centos
1.對於動態連接至libwrap.so庫的應用程序:安全
# ldd /PATH/TO/APP_FILE | grep libwrap網絡
2.對於靜態編譯的庫文件應用至程序中,可以接受tcp_wrapper的訪問控制:session
利用strings命令查看某個應用程序,從中過濾/etc/hosts.deny或/etc/hosts.allow,若是有此類信息,則說明其受tcp_wrapper控制;app
# strings COMMAND框架
openssh/dropbearssh
httpd
named
mysql/MariaDB
vsftpd
nfs
samba
常見的基於tcp_wrapper進行訪問控制的服務:sshd,vsftpd
tcp_wrappers的配置文件:
/etc/hosts.allow, /etc/hosts.deny
匹配順序:
/etc/hosts.allow --> /etc/hosts.deny --> 默認規則(容許全部)
獲取配置文件幫助的方法:
~]# man hosts.allow
~]# man hosts.deny
~]# man hosts_options (推薦)
配置文件的格式:
daemon_list : client_list [[[: option] : option] ...]
daemon_list:
注意:必須是應用程序文件的名稱;即存放於/usr/sbin目錄中的文件名;
1.單個應用程序文件名稱:
如:vsftpd
2.程序文件的名稱列表,以逗號分隔:
如:sshd, vsftpd
3.ALL:不加區分的表示全部受tcp_wrapper控制的應用程序;
client_list:
1.單個IP地址或主機名,若是使用主機名,則必須保證本機能夠解析;
2.網絡地址:之前綴長度表示的掩碼無效(172.16.0.0/16)
a) 若是有掩碼,則必須使用完整格式的掩碼;
如:172.16.0.0/255.255.0.0
b) 可使用簡短格式:
如:172.16.
3.內置的訪問控制列表:
ALL:全部的主機;
KNOWN:全部能被當前主機正確解析的主機名;
UNKNOWN:全部不能被當前主機正確解析的主機名;
PARANOID:正向解析和反向解析結果不一致全部主機;
: option
deny:拒絕,主要用於hosts.allow文件,定義拒絕訪問規則;
allow:容許,主要用於hosts.deny文件,定義容許訪問規則;
spawn:生成,發起,執行;
問題:
拒絕172.16.69.1主機訪問172.16.72.1的ftp服務;
使用EXCEPT關鍵字,配置例外的client;
示例:
在172.16.0.0/16網段中除了172.16.69.1以外的其他主機均可以訪問FTP;
/etc/hosts.deny:
vsftpd : ALL EXCEPT 172.16. EXCEPT 172.16.69.1
spawn使用示例:
sshd, vsftpd : ALL : spawn /bin/echo $(date +%F-%T) %c attempt login %s >> /var/log/tcpwrapper.log
%c: Client information: user@host, user@address, a host name, or just an address, depending on how much information is available.
%s: Server information: daemon@host, daemon@address, or just a daemon name, depending on how much information is available.
sudo:
su: switch user,切換用戶;
徹底切換:su -l username, su - username
非徹底切換:su username
su - user -c 'COMMAND'
sudo:
sudo, sudoedit — execute a command as another user
以另一個用戶的身份執行指定的命令;一般狀況下,此處的另外一個用戶指的是root用戶;
受權機制:sudo的受權配置文件,/etc/sudoers
對於此配置文件,共分爲兩類內容:
1.別名的定義:定義內建變量;
2.用戶規格:其實就是受權項,其中能夠調用定義過的別名;
用戶規格(受權項):
每行只能有一個受權項;
其格式爲:
who where=(whom) what
user client=(runas) commands
注意:經過編輯/etc/sudoers文件完成的受權,只能經過sudo命令來啓用;
sudo命令:
sudo [option]... command
-u user:以指定的用戶身份運行命令;
-l[l] [command]:列表顯示當前用戶能以sudo方式運行的全部命令;
/etc/sudoers文件的編寫格式:
who: 這次sudo配置的受權目標用戶;
username:單個用戶的用戶帳戶名稱;
#uid:單個用戶的UID;
%groupname:指定組內的全部用戶帳戶;
%#gid:以"gid"爲GID的組內的全部用戶帳戶;
user_alias:事先定義過的用戶帳戶的別名;
where:定義被受權訪問的客戶端主機;
ip/hostname:單個主機;
Network Address:網絡地址;
host_alias:事先定義過的主機的別名;
whom:受權用戶後續命令的運行者的真實身份;一般是root;
what:這次受權可以運行的命令;
command:單個命令;
directory:指定目錄下全部的命令;
sudoedit:特殊命令,用於受權其餘用戶能夠執行sudo命令,而且能夠編輯/etc/sudoers文件;
cmnd_alias:實現定義過的命令的別名;
示例:
zhangsan ALL=(root) /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd [a-zA-Z0-9]*, ! /usr/bin/passwd root
定義別名的方法:
Alias_Type ALIASNAME = item1, item2, ...
Alias_Type:
User_Alias:
Host_Alias:
Runas_Alias:
Cmnd_Alias:
ALIASNAME:別名的名稱必須所有使用大寫字母;
User_Alias USERADMINUSERS = tom, jerry, centos, suse, %myclass
Cmnd_Alias USERADMINCOMMANDS = /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd [a-zA-Z0-9]*, ! /usr/bin/passwd root, /usr/sbin/usermod
USERADMINUSERS ALL=(root) USERADMINCOMMANDS
經常使用的標籤:
PASSWD
NOPASSWD
Cmnd_Alias USERADMINCOMMANDS = NOPASSWD: /usr/sbin/useradd, PASSWD: /usr/sbin/userdel, /usr/bin/passwd [a-zA-Z0-9]*, ! /usr/bin/passwd root, /usr/sbin/usermod
特別強調:
諸如passwd,su,sudo,sudoedit等之類的特殊的命令,在使用sudo受權時務必要考慮全面,不然可能爲系統引入安全隱患;須要格外注意!!!
nsswitch & pam:
nsswitch:Name Service Switch,名稱服務開關;
名稱解析:將人類使用的天然語言的符號轉換成計算機可以使用的數字符號
解析:根據已知的信息(關鍵字,key)查找某個特定的存儲庫,從而可以獲取到與該關鍵字有關的其餘信息的過程;
存儲庫:文件,SQL,NoSQL,LDAP,...
login:
文件:文件系統,系統調用;
SQL:SQL接口;
NoSQL:NoSQL接口;
...
通用框架:爲應用程序提供簡潔高效的接口;代理程序;
做用:承上啓下;
承上:提供統一的配置和調用接口;
啓下:用戶與各類形式的存儲進行交互;
在Linux中實現名稱解析的通用框架:庫
/lib64/libnss*, /usr/lib64/libnss*
框架:
libnss3.so
驅動(接口):
libnss_files.so, libnss_dns.so, libnss_db.so , ...
爲每種用到解析庫的應用程序,經過一個配置文件定義其配置:
/etc/nsswitch.conf
文件的格式:
db: store_format1 store_format2 ....
每種存儲中均可以根據查找鍵進行查找,而且會返回狀態;
STATUS => success | notfound | unavail | tryagain
對於每種狀態返回值,都有響應的行爲(ACTION):
ACTION => return | continue
默認狀況下,對於success狀態的行爲是return;對於其餘狀態的行爲都是continue;
能夠自定義狀態和行爲的關係:
[STATUS=ACTION]
將此項放置於對應的存儲格式以後便可;
hosts: files nis [NOTFOUND=return] dns
getent命令:
getent - get entries from Name Service Switch libraries
getent database [key]
pam:
pluggable authentication modules;通用的認證框架;
其功能實現一樣經過庫;
模塊的存放路徑:/lib64/security/*
配置文件:
全局認證配置文件:/etc/pam.conf
格式:
application type control module-path module-arguments
爲每種應用提供的專用的配置文件:/etc/pam.d/*APP_NAME*
格式:
type control module-path module-arguments
type:
auth:與帳號的認證和受權有關;
account:與帳號的管理相關,但與認證無關的功能;
password:與用戶修改密碼時密碼的複雜度有關的功能;
session:用戶獲取到服務以前或使用服務完成以後須要進行附加操做;
control:
required:若是本條目沒有被知足,那麼最終本次的認證必定失敗;可是本次認證過程並不中斷;整個棧運行完畢以後一定返回"認證失敗"的信號;具有隱形的一票否決;
requisite:若是本條目沒有被知足,那麼本次認證必定失敗;並且整個棧當即終止並返回"認證失敗"信號;顯示的一票否決;
sufficient:若是本條目的條件被知足,且本條目以前沒有任何的required條目判斷爲失敗,則整個棧當即終止並返回"認證成功"信號;若是本條目的驗證失敗,還須要繼續參考其餘的條目規則;一票經過;
optional:可選的,無足輕重的表決;
include:將其餘的配置文件中的流程棧包含在當前位置,就好像把其餘的配置文件的配置內容複製到當前文件同樣;
substack:運行其餘配置文件的流程,但與include不一樣的是,其在子棧中運行,其運行結果不影響主棧;
status:user_unknown, success, default, ...
action: ok, N, bad, die, done, ignore, reset, ...
module-path: 相對路徑,絕對路徑,/lib64/security/*
module-arguments: 默認的模塊參數;
pam_shells.so模塊的認證功能:
auth required pam_shells.so
/etc/shells文件中是否包含用戶默認的登陸shell;
pam_limits.so
pam_listfile.so
pam_time.so