、復習創建CA
定義CA詳細的配置信息的文件 /etc/pki/tls/openssl.cnf
1 創建CA,申請證書
1)CA
( umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem )生成私鑰文件
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out ?/etc/pki/CA/cacert.pem -days 3650 自簽名證書
touch /etc/pki/CA/index.txt
echo 01 > /etc/pki/CA/serial 證書序列號
2)client request 客戶端申請證書
( umask 066;openssl genrsa -out /etc/app/app.pem ) 申請私鑰
openssl req -new ?-key /etc/app/app.pem ?-out ?/etc/app/app.csr ??申請證書請求
scp /etc/app/app.csr 復制到CAhost主機上 CAhost:/etc/pki/CA/
3)
openssl ca -in /etc/pki/CA/app.csr -out /etc/pki/CA/certs/app.crt -days 300 頒發證書
scp /etc/pki/CA/certs/app.crt ?clienthost:/etc/app/ ?證書拷貝的客戶端
Ssh客戶端配置文件???ssh_config
Ssh服務器端配置文件 sshd_config
客戶端配置文件 不需要重啟服務,,服務器端配置文件需要重啟,因為服務器端不停,需要停下來啟動
改端口 port 22—> port 9527
Scp命令
只能復制和我相關的文件
Scp[options] [user@]host:/sourcefile ??/destpath
Scp[options] /sourcefile ??[user@]host:/destpath
常用選項:
-C壓縮數據流
-r 遞歸復制
-p保持原文件的屬性信息
-q 靜默模式
-P PORT 指明remote host的監聽的端口
三臺主機實現基于key驗證,即任何一臺主機訪問其他主機都不需要提供用戶名和密碼,
每個主機在自己的主機上生成自己的公鑰私鑰文件,然后把各自的公鑰文件傳到同一臺主機上,最后把公鑰文件分別傳到各主機,
生成公鑰私鑰對 ???ssh-keygen
復制到一個主機 ???ssh-copy-id
Ssh-copy-id ?-i id_rsa.pub 192.168.27.7
將改文件復制到其他主機上:scp authentized_kyes 192.168.27.7[5,6]:/root/.ssh.
Scp 復制特點,無論文件動不動,都會原封不動的給復制過去,即使一樣的文件,也會覆蓋一遍
rsync命令
基于ssh和rsh服務實現高效率的遠程系統之間復制文件
使用安全的shell連接作為傳輸方式
Rsync -av /etc server1:/tmp 復制目錄和目錄下文件
Rsync -av /etc/ server1:tmp ?只復制目錄下文件
比scp更快,只復制不同的文件
選項
-n 模擬復制過程
-v 顯示詳細過程
-r 遞歸復制目錄樹
-p 保留權限
-t 保留時間戳
-g 保留組信息
-o 保留所有者信息
-l 將軟鏈接文件本身進行復制(默認)
-L 將軟鏈接文件指向的文件復制
-a 存檔 ,相當于-rlptgoD,但保留ACL(-A)和SElinus屬性(-X)
例如scp /etc/fstab ?192.168.27.120:/app ??將/etc/fstab文件復制到主機192.168.27.120上的/app 中
只復制發生增量的文件
實現A和B服務器自動同步,
?
Sftp命令
交互式文件傳輸工具
用法和傳統的ftp工具相似
利用ssh服務實現安全的文件上傳和下載
使用ls ??cd ??mkdir ??rmdir pwd ?get ??put ?等指令,可用?或help獲取幫著信息
Sftp [user@]host
Sftp > help
Pssh工具 ?用來執行命令的
Pssh是一個Python編寫可以在多臺服務器上執行命令工具,也可實現文件復制
–version 查看版本
-h 主機文件列表,內容格式“[user@]host[:port]”
-H 主機字符串,內容格式”[user@]host[:port]”
-l:登錄使用的用戶名
-p: 并發的線程數
-o 輸出的文件目錄
-e 錯誤輸入文件
-t TIMEOUT 超時時間設置,0無限制
-O SSH的選項
-v 詳細模式
-A 手動輸入密碼模式
-x 額外的命令行參數使用空白符號,引號,反斜線處理
-X 額外的命令行參數,單個參數模式,同-x
-i 每個服務器內部處理信息輸出
-P 打印出服務器返回信息
看一臺主機的狀態 ??pssh -H 192.168.27.5 ?-i getenforce
看多臺主機的狀態 ??pssh -H 192.168.27.5 -H 192.168.27.6 -i getenforce
使用文本文件,pssh看主機的狀態
vim ?ip.txt ???ip地址文本
pssh -h ?ip.txt -i getenforce
通過pssh批量關閉SELinux
Pssh -H root@192.168.1.10?-i “sed -i ?s/SELINUX=enforcing/SELINUX=disabled/”
批量發送指令 pssh -H root@192.168.1.10?-ihostname
當不支持ssh的key認證時,通過-A選項,使用密碼認證批量執行指令
Pssh -H xuewb@192.168.1.10?-A -i hostname
將標準錯誤和標準正確重定向都保存至/app目錄下
Pssh -H 192.168.1.10 -o /app -e /app -i “hostname”
看每個主機的日志
Pssh -h ip.txt -i cat /var/log/secure
Pssh -h ip.txt -o /app ?-i cat /var/log/secure 生成日志放在專門的目錄中
pscp.pssh命令
功能是將本地文件批量復制到遠程主機
pscp.pssh -h ip.txt /etc/selinux/config /etc/selinux ?復制并覆蓋
Pscp.pssh選項
-v 顯示復制過程
-a 復制過程中保留常規屬性
-r 遞歸復制目錄
將本地curl.sh 復制到/app目錄
Pscp.pssh -H 192.168.1.10 /root/test/curl.sh /app/
Pscp.pssh -h host.txt /root/test/curl.sh /app/
將本地多個文件批量復制到/app/目錄
Psch.pssh -H 192.168.1.10 /root/f1.sh ?/root/f2.sh ?/app
將本地目錄批量復制到/app/目錄
Psch.pssh – H 192.168.1.10 -r /root/text/ ?/app/
Pslurp.pssh 功能是將遠程主機的文件批量復制到本地
Pslurp.pssh選項
-L 指定從遠程主機下載到本機的存儲的目錄,local是下載到本地后的名稱
-r 遞歸復制目錄
批量下載目標服務器的passwd文件至/app下,并更名為user
Pslurp -H 192.168.1.10 ?-L /app/ /etc/passwd user
SSH 端口轉發
SSH 會自動加密和解密所欲SSH客戶端與服務端之間的網咯數據。但是,SSH還能夠將其他TCP端口的網絡數據通過SSH鏈接來轉發,并且自動提供了相應的加密及解密服務。這一過程也被叫做“隧道”(tunneling)這是因為SSH為其他TCP連接提供了一個安全的通道來進行傳輸而得名。例如,telnet,smtp,ldap這些tcp應用均能夠從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。而與此同時,如果工作環境中的防火墻限制了一些網絡端口的使用,但是允許SSH的連接,也能夠通過將tcp端口轉發來使用SSH 進行通訊
SSH端口轉發能夠提供兩大功能:
加密SSH Client端至SSH Server 端之間的通訊數據
突破防火墻的限制完成一些之前無法建立的tcp連接
在公司外部,想連接一個不安全的網絡服務telnet,企業里面防火墻策略不允許telnet連接,因為telnet不安全不加密,擔心泄露數據,通常來講,互聯網的防火墻策略會允許ssh的訪問,,A可以走ssh協議進入到B主機,
A 可以通過ssh服務連接到B,但是A不可以通過telnet服務連接到C,可以通過隧道功能實現,把telnet的不安全的流量封裝到ssh內,隨著ssh協議,A到達了B,B再 轉包,轉發到C上,該段走的是telnet協議,
基于ssh的端口轉發功能
systemctl enable telnet.socket ?設置開機啟動
systemctl start telnet.socket ??啟動服務
Ss -nt 查看誰在連主機
Ss -ntl ?查看端口 開沒開 ?有沒有人用
iptables -A INPUT -s 192.168.27.A ??-j REJECT ??C對A設防火墻策略
ssh -L 9527:192.168.27.C:23 192.168.27.B?-Nf ?在A上,建立與B連接的隧道
telnet 127.0.0.1 9527 ??連自己,因為監聽的是自己的9527端口等價于telnet 192.168.27.C
Ssh -L ?localport: ??????remotehost:remotehostport ?sshserver
本地端口(9527) ??遠程主機telnetsrv(V) ???(B)
本機端口(在A機器上開端口9527,該端口專門監聽A向C發起的請求),一旦執行完該命令之后,會打開9527端口,當A連接本機的9527端口的時候,實際上是自動把請求發送到B,利用ssh封裝,到達B,再轉到C上
最終實現的效果
Data發送到本機的9527端口,本機打開一個隨機端口,(因為要當ssh的客戶端),把數據發送到目標的服務器22端口(中間把數據封裝到協議中),sshsrv(B),,,這臺機器收到之后把SSH拆開,獲取數據,再充當telnet的客戶端,所以要打開一個隨機端口,利用telnet流量發送到目標telnetsrv23(C)端口服務器
選項:
-f 后臺啟用
-N 不打開遠程shell,處于等待狀態
-g 啟用網關功能
實例
Ssh -L 9527:telnetsrv:23 -N sshsrv
Telnet 127.0.0.1 9527
當訪問本機的端口9527時,被加密后轉發到sshsrv的ssh服務,再解密被轉發到telnetsrv:23
Data—–localhost:9527——–localhost:xxxxxx——sshsrv:22———-sshsrv:yyyy—–telnetsrv:23
?Ps aux 查看進程
郵件服務對應的配置文件 vim /etc/postfix/main.cf ?默認不讓連接
Inet_interfaces=all
Systemctl restart postfix
?遠程轉發
-R sshserverport:remotehost:remotehostport sshserver
實例
Ssh -R 9527 :telnetsrv:23 -N sshsrv
讓sshsrv 偵聽9527端口的訪問,如有訪問,就加密后通過上述服務轉發請求到本機上述客戶端,再由本機解密后通過ssh服務轉發請求到本機ssh客戶端,再由本機解密后轉發到
Telnetsrv:23
Data—–sshsrv:9527——sshsrv:22——localhost:xxxxx—–localhost:yyyyy—–telnetsrv:23
動態端口轉發
當用firefox訪問Internet時,本機的1080端口作為代理服務器,Firefox的訪問請求被轉發到sshserver上,由sshserver替之訪問Internet
Ssh -D1080 root@sshserver
在本機Firefox設置代理socket proxy:127.0.0.1:1080
Curl ?–socks5 127.0.0.1:1080 http://www.qq.com
Iptables -F 清空防火墻策略
Iptables -vnL 查看防火墻策略
定義一個goole網站 ?vim /var/www/html/index.html ???<h1>welcome to MagEdu!</h1>
[root@centos7 ~]# yum install httpd -y ??當web服務器將來對外提供服務
[root@centos7 ~]# systemctl start httpd ?啟動服務
[root@centos7 ~]# systemctl enable httpd ?開機啟動
iptables -A INPUT -s 192.168.27.6 -j REJECT ??禁止6訪問
Centos6
-D效果,在本機打開一個代理端口,當我們把請求發送到1080端口的時候,它會自動的把請求發送到跳板機,然后由跳板機轉發的目標服務器上
ssh -D 1080 192.168.27.5 -N
在網絡中,connect設置socks host127.0.0.1 port:1080
Curl命令訪問
Curl –socks5 127.0.0.1:1080 http://192.168.27.7/
Ssh服務器端:sshd,配置文件:/etc/ssh/sshs_config
常用參數:
Port
Listenaddress ip
Logingracetime 2m
Permitrootlogin yes
Strictmodes yes 檢查.ssh/文件的所有者、權限等
Maxauthtries 6
Maxsessions 10 同一個連接最大會話
Pubkeyauthentication yes
Permitemptypassword no
Passwordauthentication yes
Gatewayports no
Clientaliveinterval 單位 秒
Clientalivecountmax 默認3
Usedns yes
Gssapiauthentication yes
提高速度可改為no
Maxstartups 未認證連接最大值,默認10
Banner /path /file
限制可登陸用戶的辦法
Allowusers user1 user2 user3
Denyusers
allowgroups
Denygroups
Ssh服務的最佳實踐
建議使用非默認端口
禁止使用protocol version1
限制可登陸用戶
設定空閑會話超時時長
利用防火墻設置ssh訪問策略
僅監聽特定的ip地址
基于口令認證時,使用強密碼策略
使用基于密鑰的認證
禁止使用過空密碼
禁止root用戶直接登錄
限制ssh的訪問頻度和并發在線數
經常分析日志
三
AIDE
高級入侵檢測環境工具,主要用途是檢查文件的完整性,審計計算機上的那些文件被更改過了
AIDE能夠構造一個指定文件的數據庫,它使用aide.conf作為其配置文件。AIDE數據庫能夠保存文件的各種屬性,包括:權限(permission)、索引節點序號(iNode number)、所屬用戶(user)、所屬用戶組(group)、文件大小、最后修改時間(mtime)、創建時間(ctime)、最后訪問時間(atime)、增加的大小以及連接數。AIDE還能夠使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每個文件的校驗碼或散列號
這個數據庫不應該保存那些經常變動的文件信息,例如:日志文件、郵件、/proc文件系統、用戶其實目錄以及臨時目錄。
當一個入侵者進入了你的系統并且種植了木馬,通常會想辦法來隱蔽這個木馬(除了木馬自身的一些隱蔽特性外,他會盡量給你檢查系統的過程設置障礙),通常入侵者會修改一些文件,比如管理員通常用ps -aux來查看系統進程,那么入侵者很可能用自己進過修改的ps程序來替換掉你系統上的ps程序,,以使用ps命令查不到正在運行的木馬程序。如果入侵者發現發現管理員正在運行crontab作業,也有可能替換掉crontab程序等等。所以由此可以看出對于系統文件或是關鍵文件的檢查是很必要的。目前就系統完整性檢查的工具用的比較多的由兩款:tripwire和AIDE,前者是一款商業軟件,后者是一款免費的但功能也很強大的工具
安裝AIDE
Yum install aide
Rpm -ql aide
修改配置文件
Vim /etc/aide.conf
/app ??對app關心custom代表的屬性
!/app f3 ?不關注app下的f3
初始化默認的數據AIDE的庫
aide –init ???數據庫放在/var/lib/aide/
比對文件需改名 ?mv aide.db.new.gz ?aide.db.gz
進行比對 aide –check
更改身份
Su 切換身份:su -l username -c ‘command’
Sudo
來自sudo包
Man 5 sudoers
Sudo能夠授權指定用戶在指定主機上運行某些命令。如果未授權用戶嘗試使用sudo,會提示聯系管理員
Sudo可以提供日志,記錄每個用戶使用sudo操作
Sudo可以提供日志,記錄每個用戶使用sudo操作
Sudo為 系統管理員提供配置文件,允許系統管理員集中地管理用戶的使用權限和使用的主機
Sudo使用時間戳文件來完成類似“檢票”的系統,默認存活期為5分鐘的“入場券”
通過visudo命令編輯配置文件,具有語法檢查功能
Visudo -c 檢查語法
授權wang用戶掛載光盤,需要編輯配置文件
Vim /etc/sudoers
用戶 ?登錄主機=(代表用戶)命令
Root ??ALL ???= ??(ALL) ????ALL
Visudo ?等價于 vi ?/etc/sudoers
Visudo 具有語法檢查功能
e ?繼續編輯
:set nu ?添加行號
x不保存,直接退出
修改,使vi帶顏色 ?vim /etc/profile.d/env.sh
export EDITOR =vim
授權wang用戶可以掛載
Wang ?ALL =(root) /usr/bin/mount ?/dev/sr0 ?/mnt/cdrom
執行
Sudo mount /dev/sr0 ?/mnt/cdrom
個人配置文件
Vim /etc/sudoers.d
檢查語法的工具 visudo -c
授權組 ?%wheel ALL=(ALL) ?ALL
Usermod -aG ?wheel ?wang ?把wang加入組中 ?wang即具有root的權限
Wang賬號從新登陸,就具有權限
Usermod -G “?“?wheel
Wang ALL =(root) sudoedit 授權wang用戶代表root能編輯suders文件
Sudoedit ?/etc/sudoers.d/wang
配置文件 ?/etc/sudoers, ?/etc/sudoers.d/
時間戳文件 ?/var/db/sudo
日志文件 ??/var/log/secure
配置文件支持使用通配符golb
?任意單一字符
*:匹配任意長度字符
[wxc] 匹配其中一個字符
[!wxc]除了這三個字符的其他字符
\x ?轉義
[[alpha]]:字母
配置文件規則有兩類 ?1別名定義:不是必須的
2 授權規則:必須的
授權規則格式
用戶 ?登錄主機=(代表用戶)命令
示例 ?root ALL =(ALL) ALL
格式說明
User ?運行命令者的身份
Host ?通過哪些主機
Runas 以哪個用戶的身份
Command ?運行哪些命令
別名
Users和runas
#uid
%group_name
%#gid
User_aliad|runas_alias
Host
Ip 或hostname
Network或(/netmask)
Host_alias
Command
Command name
Directory
Sudoedit
Cmnd_Alias
Sudo別名和示例
別名有四種類型:user_Alias,Runas_Alias,Host_Alias,Cmnd_Alias
別名格式:[A-Z]([A-Z][0-9]_)*
別名定義
Alias_Type NAME1=item1,item2,item3:NAME2=item4,item5
示例1:
Student ?ALL =(ALL) ALL
%wheel ALL =(ALL) ?ALL
示例2
Student ALL =(root) ??/sbin/pidof,/sbin/ifconfig
%wheel ALL=(ALL) ?ALL ?NOPASSWD :ALL
示例3
User_Alias NETADMIN=netuser1,netuser2
Cmnd_Alias NETCMD =/usr/sbin/ip
NETADMIN ALL =(root)NETCMD
示例4
User_Alias ?SYSASER=wang,mage,%admins
User_Alias DISKADER=tom
Host_Alias SERS=www.magedu.com,172.16.0.0/24
Runas_Alias OP=root
Cmnd_Alias_SYDCMD=/bin/chown,/bin/chmod
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
SYSADER SERS =SYDCMD,DSKCMD
DISKADER ALL =(OP) DSKCMD
示例5
Defaults:wang runas runas_default=tom
Wang ALL ?=(tom,jerry)ALL
示例6
Wang 192.168.175.136,192.168.175.138=(root)
/usr/sbin,!/usr/sbin/userad
示例7
Wang ALL =(ALL) /bin/cat /var/log/messages*
Sduo命令
ls -l /usr/bin/sudo
Sudo -i -u wang 切換身份
Sudo[-u user] COMMAND
-V顯示版本信息等配置信息
-u user 默認為root
-l ll 列出用戶在主機上可用的和被禁止的命令
-v 在延長密碼有效期5分鐘,更新時間戳
-k 清除時間戳,下次需要重新輸入密碼
-K 與-k類似,還要刪除時間戳文件
-b 在后臺執行指令
-p 改變詢問密碼的提示符號
例子,wang ALL =(ALL) /bin/cat /var/log/secure*,!/bin/cat ?/var/log/secure* * ?可以看secure文件,不可以看其他文件
TCP_Wrappers介紹
工作在第四層(傳輸層)的tcp協議
對有狀態連接的特定服務進行安全檢測并實現訪問控制
以庫文件形式實現
某進程是否接受libwrap的控制取決于發起此進程的程序在編譯時是否針對libwrap進行編譯的
判斷服務程序是否能夠由tcp_wrapper進行訪問控制的方法
Which sshd 服務器程序的路徑 /usr/sbin/sshd
ldd /PATH/TO/PROGRAM|grep libwrap.so
Strings ?PATH/TO/PROGRAM|grep libwrap.so
調該模塊了,就可以間接通過該模塊控制該服務的訪問
在centos7上面控制centos的訪問 ??vim /etc/hosts.deny ??sshd:地址
Hosts.deny hosts.allow 的基本的作用
先看/etc/hosts.allow,如果這個文件定義的規則是不匹配的,滿足就不看deny了,不滿足的才看、
/hosts.deny. ?Deny 文件中如果匹配了,就生效了,如果不匹配,就默認允許了
實現192.168.27網段都及拒絕,有一個網址192.168.27.7可以訪問
Vim hosts.allow ?sshd:192.168.27.7
Vim /etc/host.deny ?sshd:192.168.27
Windows 默認192.168.27.1
Vim hosts.deny sshd:192.168.27.EXCEPT 192.168.27.7
Vim /etc/hosts.deny ??sshd: 192.168. EXCEPT 192.168.27 EXCEPT 192.168.27.7
在deny中 192.168.網段拒絕,但是27這個網段是允許的,但是大網段中的ip被拒絕了
Deny 主要用在/etc/hosts.allow定義 拒絕
Allow主要用在/etc/hosts.deny中,定義 允許
Spawn 啟動一個外部程序完成執行的操作
Sshd :192.168.27.8 :spawn echo `date +%F` client login > /app/tcpwrapper.log
把登錄的時間記錄在日志中,在這里面涉及%用法需要使用%%
Sshd:192.168.27. :spawn echo `date +”%%F %%T”` client\: %c login on server\:%s > /app/tcpwrapper.log
Twist 實際動作是拒絕訪問,使用指定的操作替換當前服務,標準IO和ERROR發送到客戶端,默認至/dev/null
測試工具
Tcpdmatch [-d] daemon [@host] client
-d 測試當前目錄下的hosts.allow和hosts.deny
PAM認證機制
它提供了對所有服務進行認證的中央機制,適用于login,遠程登錄(telnet,rlogin,fsh,ftp,點對點協議(ppp))su等應用程序中。系統管理員通過pam配置文件來指定不同應用程序的不同認證策略;應用程序開發者通過在服務程序中使用PAM API(pam_xxxx())來實現對認證方法的調用;而pam服務模塊的開發者則利用PAM SPI 來編寫模塊(主要是引出一些函數pam_sm_xxxx()供PAM接口庫調用),將不同的認證機制加入到系統中;PAM接口庫(libpam)則讀取配置文件,將應用程序和相應的PAM服務模塊聯系起來
PAM相關文件
模塊文件目錄:/lib64/security/*.so
環境相關的設置:/etc/security/
主配置文件:/etc/pam.conf,默認不存在
為每種應用模塊提供一個專用的配置文件:/etc/pam.d/APP_NAME
注意:如/etc/pam.d存在,/etc/pam.conf將失效
Pam認證原理
PAM認證一般遵循這樣的順序:service(服務)—PAM(配置文件)—–pam__*.so
PAM 認證首先要確認那一項服務,然后加載相應的PAMd配置文件(位于/etc/pam.d下),最后調用認證文件(位于/lib/security下)進行安全認證
PAM認證過程:
1使用者執行/usr/bin/passwd程序,并輸入密碼
2passwd開始調用PAM模塊,PAM模塊會搜索passwd程序的PAM相關設置文件,這個設置文件一般是在/etc/pam.d里邊的與程序同名的文件,即PAM會搜索/etc/pam.d/passwd此設置文件
3經由/etc/pam.d/passwd設定文件的數據,取用PAM所提供的相關模塊來進行驗證
4將驗證結果回傳給passwd這個過程,而passwd這個過程會根據PAM回傳的結果決定下一個動作(重新輸入密碼或者通過驗證)
通用配置文件/etc/pam.conf格式
Application ?type ??control ?module-path ?arguments
專用配置文件/etc/pam.d/*格式
type ??control ?module-path ?arguments
說明
服務名(application)
Telnet,login,ftp,服務名字“OTHER”代表所有沒有在該文件中明確配置的其他服務
模塊類型
Control ?PAM庫該如何處理與該服務相關的PAM模塊的成功或失敗
Module-path 用來指明本模塊對應的程序文件的路徑名
Arfuments ?用來傳遞給該模塊的參數
模塊類型
Auth
Account
Password
Session
-type
簡單方式實現
Required
Requisite
Sufficient
Optional
Include
復雜詳細實現
Ok
Done
Bad
Die
Ignore
Reset
Module-path:模塊路徑
相對路徑
/lib/security 目錄下的模塊可使用相對路徑
絕對路徑
實現如果訪問ssh的身份驗證進過pam_shells.so檢查失敗了,就登錄失敗
Vim sshd ????auth required ??pam_shells.so
Getent passwd wang
Chsh -s /bin/csh wang
Vim ?/etc/shells ?注釋掉 #/bin/csh
只是影響ssh
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/91155