第三十五天、
自主學習提前笑傲總結:
- tcpdump -i eth0 -nn -X port 21
2.非對稱加密:A PA, SA ; B PB, SB --> 例如A向B發送數據,所以數據到B後需要用B的私鑰進行解密,所以A加密過程使用的是B公開的公鑰;同理,數據雙向返回後,B發往A的數據需要A來解密使用的是A的私鑰,所以B端發送數據使用的是A的公鑰進行加密!!
--> 第二種,就是爲了確認數據的來源是否可靠準確:A發送數據到B,B事先有A的公鑰,A用私鑰對數據進行加密後,B可用A的公鑰進行解密,從而推斷數據來源準確性(理論上)
3.rpc遠程進程調用程序 ,客戶端通過調用rpc獲取指定服務的隨機端口,再去訪問
4.$0在shell中表示參數第一個即命令
5、在不重啓服務的情況下重讀配置文件 kill -1 pid killall -1 pname :都是通過信號的方式重讀、終端、激活、告知
6、還是要注意在特定目錄下手動實現一些命令實現的方式時,selinux的安全上下文是一個值得注意的問題
7.systemctl daemon-reload ...
systemctl reload service
CentOS6 : service servicename reload 在不重啓服務的情況下重新加載服務配置文件
8.使用socket文件的方式,非獨立運行服務,收到systemd監聽 -->centos7
9.centos7中對於文件也進行了監控-->selinux,所以通過命令如passwd修改過的文件沒有標籤,selinux此時沒有檢測,當下次進入時無法通過密碼登陸
***10.生產環境案例:當通過監控或者其他手段發現某目錄(/usr/sbin或/usr/bin等存放大量二進制程序文件)下的所有文件md5值都發生了變化,思考二進制文件遭到破壞或者破解,遭到******,考慮其他文件同樣可能遭到破壞:***病毒等破壞性程序依舊在系統上運行,即使將正確的文件拷貝也沒有任何意義,應該及時將數據文件全部拷貝出來做備份,然後重裝穩定的操作系統,保護數據是優先策略
:1.在溝通能斷網的前提下馬上切斷被黑服務器的外網(即停掉網卡,),然後根據不同的服務進行相關數據的備份(冷靜思考如數據庫則備份數據庫數據;web服務則備份像nginx的配置文件以及數據文件;文件共享服務的共享文件等!)
Centos5:串行啓動
/etc/rc.d/rcX.d/SxxDaemon
Centos6:有關聯的服務串行啓動。無關聯的並行。network httpd rpc(111) nfs
Centos7:全部並行。
SysV Xinted
Systemd
init
/etc/inittab
/etc/rc.d/rc
/etc/rc.d/rcX.d
/etc/rc.d/rc.sysinit
systemd
/usr/lib/systemd/system 每個服務最主要的啓動腳本設置,類似於之前的/etc/init.d/
當前啓動:
Centos6及之前:service(/etc/init.d) daemon start
Centos7: systemctl start daemon1[.service] [daemon2[.service]]
當前關閉:
Centos6及之前:service(/etc/init.d) daemon stop
Centos7: systemctl stop daemon1[.service] [daemon2[.service]]
當前重啓
Centos6及之前:service(/etc/init.d) daemon restart
Centos7: systemctl restart daemon1[.service] [daemon2[.service]]
當前狀態
Centos6及之前:service(/etc/init.d) daemon status
Centos7: systemctl status daemon1[.service] [daemon2[.service]]
條件式重啓:若原本是關閉,則忽略重啓請求
Centos6及之前:service(/etc/init.d) daemon condrestart
Centos7: systemctl try-restart daemon1[.service] [daemon2[.service]]
重載或重啓服務:先加載,再啓動
systemctl reload-or-restart name.service
重載或條件式重啓服務:
systemctl reload-or-try-restart name.service
systemctl list-units -t service [-a 顯示所有,不加只顯示激活的]
systemctl list-unit-files -t service 查看開機自啓動的服務 chkconfig --list
init
rc.d/rcX.d
service
chkconfig
kill
切換運行級別
systemctl isolate name.target
RHCE第一道考試題,必須準確詳細記住並操作:
Centos7破解root口令:
按e進入編輯內核,在Linux16行尾添加 rd.break ,即在解開鏡像文件的時候中斷,所以並不掛載真正的根文 件系統,所以 ctrl + x進入後,此時根還是隻讀掛載模式,
所以首先要準確知道自己操作系統的根分區是掛載在哪個文件系統上的
1.mount 查看掛在情況(如/dev/sda2 -->/sysroot) 此時表示進入後根分區實際是掛載在/sysroot文件系統下,所以意味着要切根;
2.mount -o remount,rw /sysroot 因爲通過上一步查看得知目前的根是以只讀的方式掛載的;
3.chroot /sysroot;
4.passwd root ; 因爲使用命令方式修改密碼在selinux開啓的狀態下不能被標識,所以修改後的密碼文件是沒有selinux標籤的?,所以要 :
5.touch /.autorelabel ;exit
Centos7修復:修改任何配置文件或者是服務文件、系統文件都必須一定要提前備份
A
1.grub2-mkconfig -o /boot/grub/grub.cfg ; 修復其他損失文件 grub2-install /dev/sda rpm2cpio ... |cpio -id
2.如果刪除boot ,手動輸入 insmod xfs, root=(hd0,1) 直接指定系統的根分區 ; mount光盤, rpm -ivh kernel.... --force 重新加載安裝內核、生成鏡像文件
3.內核5.5操作系統之前版本的可以使用編譯一個c程序,提權 -->有時間研究一下原理邏輯
B.加密算法、
4.telnet-server 端口23,telnet是xineted管理服務,所以啓動方式 /etc/init.d/xineted restart ,,telnet 默認拒絕root用戶 ftp21 ,
5.無法從指紋重新生成數據,單向不可逆,理論不可反向破解
6.哈希算法-單向散列不可逆; sha1sum、 md5sum校驗文件的md5值是否變化(內容變,md5值變):使用相同的算法得出的的摘要長度一定相等,但是不同數據摘要一定不一樣!
1.對源文件或者下載文件進行哈希值校驗
2.重點優化加密: key(data+Sa(hash(data)))+Pb(key) :key是對稱加密即會話密鑰session_key,對對稱加密加密 ,對稱密鑰加密解密快,優化原理,對大數據內容只使用了一次公鑰加密數字簽名,之前先使用哈希算法對數據加密,然後使用私鑰對哈希值數字簽名,最後再加一個使用對方公鑰數字簽名後的口令key
3.生產環境思考原理:例如使用sha512sum等算法將哈希值保存在一個統一的文件中,此後使用工具或者監控等手段進行比對以確認數據是否發生變化
sha512sum f1.log >> hash.txt (自動化實現後續)
md5sum | sha512sum --check hash.txt -->返回 hash.txt ok 意味着正常
rpm -V(大寫V) 包或安裝後的命令 :底層使用的原理就是md5sum在安裝時將每個文件的hash值存放在rpm數據庫中,使用此命令時就是與數據庫中的hash值進行比對:T表示mtime, S表示內容,5就是md5;沒有S5即內容沒有變化
find /etc/sysconfig/ -type f |xargs sha512sum - :使用此方式實現簡單批量統計在此算法下的哈希值 find ... |xargs cmd ...
*** 注意:使用find的目的就是將文件的絕對路徑存放在hash值的文件中,這樣在使用sha512sum或者其他校驗命令的時候就不用考慮在哪個當前目錄下了!!
第三十七天
7.一個十六進制的數等於4位的二進制
8.DH加密:生成會話密鑰即密鑰交換協議,即用來傳送對稱加密密鑰:對稱加密第一次傳送是明文,否則無法解密
A:整數a, 大素數 p 私有 x
B: 整數a, 大素數 p 私有 y
A: a^x%p 得到的值發送給B --> B [(a^x%p)^y]%p = a^(xy)%p
B: a^y%p 得到的值發送給A --> A [(a^y%p)^x]%p = a^(xy)%p
8.使用gpg --gen-key生成非對稱加密鑰匙對: 使用對方公鑰加密前必須對數據進行備份,防止加密失誤或者忘記密碼導致數據丟失
gpg -e 加密 (encrypt) 公鑰加密,,私鑰簽名
gpg -d 解密 (deciphering)
gpp -k 查看公鑰 gpg -K 查看私鑰
以此來理解非對稱加密的應用過程 (rm 一定要謹慎使用); gpg版本不同,導出導入公鑰的時候不正確!!
--export 如果不指定具體公鑰就全部導出
***gpg -a --export 十六進制keyid > file 具體指定key導出
必須是使用用戶單獨登錄,不能使用su切換再使用gpg --gen-key
ssl/tls協議:國際標準加密和身份認證協議
openssl passwd -1 -salt 鹽一樣,密碼一樣
(cmd &)丟到後臺另開shell ; {cmd ;}在當前shell下
(umask 077; ...生成私鑰) --針對一次性,在生成密鑰對的時候爲了確保權限安全而使用單獨開啓umask!
DH:
Alice a=5,p23,x=6
bob a=5,p23,y=15
A:(5^6)%23=8
B:(5^15)%23=19
A:(19^6)%23=2
B:(8^15)%23=2
A (Pa Sa Pb) B(Pb Sb Pa) C(Pa Pb Sc Pc)
Pa Sa
Pb Sb
a -> b
Pb(data)--> Sb|Pb(data) > data
b -> a
Pa(data) --> Sa|Pa(data) > data
1G des 2G 加密要1分鐘 解密要8分鐘
1G rsa 1G 加密要4分鐘 解密需要64小時
A->B
Pb[Sa(data)]
Pb{data+Sa[hash(data)]}
key{data+Sa[hash(data)]}+Pb(key)
[root@nanyibo etc]# find /etc/sysconfig/ -type f -exec sha512sum {} \; > /app/all.sha512
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
liubei guanyu
guanyu -> liubei
嚴重注意:任何情況下都不要刪除服務文件或者系統文件: 任何一個文件丟失都有可能是致命的 比如 gpg S.gpg-agent
7.***gpg:重要的實際應用,生產環境個人應用多 :centos5和centos6可以互傳,centos7不可以
注意: 1.導出公鑰 gpg -a --export [ID] > key
2.centos5\6等版本的操作系統上使用gpg生成密鑰的時候,建議是在本地機器上操作,並且必須頻繁晃動鼠標或者打鍵盤
liubei: gpg --gen-key 使用gpg生成密鑰對;導出公鑰到liubei.pub ; 將公鑰傳送到關羽主機
gpg --list-keys
gpg --export -r 十六進制Keyid > liubei.pub 必須使用 >
scp -p liubei.pub root@remoteip:/home/guanyu/
gpg -o letter -d letter.gpg
guanyu: 接收公鑰並導入liubei.pub公鑰; 使用
gpg --import liubei.pub
gpg --list-keys; gpg -k ; gpg -K == gpg --list-secret-keys
gpg --verify file.gpg :使用對方公鑰對對方加密文件進行簽名認證
echo "jinzhou lost" > letter
gpg -e -r liubeikey letter -->自動生成加密後文件letter.gpg
scp letter.gpg root@remoteip:/home/liubei
liubei:
gpg -o letter -d letter.gpg 解密後的文件以及選項必須在前面
刪除公鑰
gpg --delete-key liubeikey
刪除私鑰
gpg --delete-secret-key liubeikey
rpm -K 軟件包名 簽名檢測
8.SSL/TLS
9、重點:部署CA中心,訪問CA中心:
1.注意:證書就是公鑰(加密申請、簽名生成、回傳)
10、ssh -t ttylocal ttyremote :# 通過僞裝ttylocal終端的方式來連接ttyremote主機,類似×××
創建CA
1.根據ca數字證書的默認配置文件來實現:/etc/pki/tls/*
1.touch /etc/pki/CA/index.txt 生成證書索引數據庫文件;
echo 00 or 01 >/etc/pki/CA/serial 指定第一個頒發證書的序列號
2.生成私鑰
[root@ca CA]# (umask 066;openssl genrsa -out private/cakey.pem -des3 2048)
#因爲申請證書數字簽名需要私鑰,私鑰不能被其他人或組有任何權限,所以在當前shell下另開shell環境對當前操作執行,修改umask ( &) ; { ;}不能剝離shell
3.生成公鑰(證書)
[root@ca CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 10950
1.req表示申請證書文件 ,genrsa生成密鑰; 2.-x509選項表示自簽名證書
2.有個印象,在後面的集羣學習中會用到將私鑰和證書合併到一個文件中:cat cakey.pem cacert.pem > all.pem (文件合併簡單實用)
WEB申請證書
1.生成私租 :只要自己不是CA中心,證書命名以及位置存放不依賴/etc/pki/tls/openssl.cnf,只有是CA簽發中心纔會依賴此配置的限制要求; 但是不能亂放的原因依賴selinux對文件的期望值!
[root@web CA]# (umask 066;openssl genrsa -out private/app.key 2048)
2.生成CSR請求文件(基於私鑰生成的公鑰數字證書請求文件)
[root@web CA]# openssl req -new -key private/app.key -out app.csr
3.將CSR發送給CA
[root@web CA]# scp app.csr [email protected]:/etc/pki/CA
4.在CA將CSR籤成證書
[root@ca CA]# openssl ca -in app.csr -out certs/app.crt -days 365
5.CA將證書發送WEB
[root@ca CA]# scp certs/app.crt [email protected]:/etc/pki/CA
6.重點再理解並使用對稱加密、非對稱加密、單向散列(hash)結合使用;DH算法-->生成會話密鑰(公式理解熟記,協商內容,以及後續通信數據的繼續加密方式非對稱);
ssl/tls : openssl開源項目實現, 分兩個階段 1.握手階段,實際實現客戶端和服務器端互相驗證身份(利用數字證書進行身份認證),並協商通信中使用的安全參數、密碼套件、以及主密鑰,後續通信使用的所有密鑰都是通過MasterSecret生成。
2.應用階段:通信中使用雙方握手階段協商好的密鑰進行加密通信。
7.小細節;ssh遠程登錄時不指明連接用戶時使用的是本地當前用戶進行連接,如果遠程服務器沒有此用戶,永遠連接失敗(拒絕)
8.軟件、工具都是基於底層原理實現,必須ansible軟件實現大批量統一管理執行,前提是完成ssh-keygen基於key的驗證,後續使用軟件可以批量直接執行相關操作;
以此總結:必須熟練掌握原理、核心基礎知識,通過此知識去搜索並使用相關工具、軟件實現高效工作
使用shell腳本格式
#!/bin/bash
user=$1
remotehost=$2
password=$3
expect << EOF
spawn ssh-copy-id -i ~/.ssh/xxx.pub $user@$remotehost :實踐應該場景複製公鑰Key: spawn ssh-copy-id -i ~/.ssh/xxx.pub $1@$2 ,進行腳本變種來實現ssh基於key驗證的前期自動化工作,後續進行自動化
expect {
"yes/no" { send "yes\n" ;exp_continue }
"password" { send "$password\n" }
}
expect "]#" { send "useradd liubei\n" }
expect "]#" { send "echo redhat|passwd --stdin liubei\n" }
send "exit\n"
expect eof
EOF
#構建文件格式, ip user password ,使用awk取相應字段值保存在變量中,並使用以上腳本進行調用賦值變量,藉助循環實現大批量不同主機不同密碼的讀取登錄實現,爲基於ssh key驗證做自動化準備
#或者在安裝系統的時候自制腳本,實現將公鑰寫入到系統用戶家目錄下authorized_keys
9.並行運維工具pssh(提供多種功能命令) :學習以此來基於原理查找合適工具(包)和軟件 -->***,到國外技術網站尋求更好更高級的技術知識和工具
10.ssh端口轉發之遠程轉發-利用隧道反向穿透,fcn也可實現 ;防火牆有自動鏈路檢測機制,能夠通過防火牆出內網訪問外網,也就能從外網穿防火牆回來
1.在無需更改防火牆的或者沒有更改防火牆職權的情況下,通過此遠程端口轉發實現反向穿透;
2.假如防火牆規則規定內網只能通過80去訪問外網,那麼就思考將遠程sshd服務器的端口改爲80,在使用遠程端口轉發命令時,要明確指定-p serverIP:80,指明端口爲80
11.涉及服務配置以及各種重要數據文件修改等,必須 cp 備份: cp file1{,.bak} -->複製之後的文件是 file1.bak
注意:舉例如apache服務、DNS(named)服務都是在安裝的時候根據rpm -q --scripts安裝腳本生成非交互式登錄的用戶和組,在複製的時候使用cp -a file{,.bak}保留相關元數據
12.提前編寫腳本,實現發現連接異常失敗ip並使用防火牆規則禁用:最好是配合計劃任務實現
檢查防火牆的策略重複問題,如果已經存在,應該不再添加:在awk中對即將要封掉的ip進行判斷是否再次添加到防火牆
#!/bin/bash
while true;do
awk '/Failed password/{print $(NF-3)}' /var/log/secure |awk '{ip[$1]++}END{for(i in ip){if(ip[i]>=10){system("iptables -A INPUT -s "i" -j REJECT")system("echo Time: date +%F-%T
IP:"i" Num:" ip[i]" Rjected Log:/var/log/rejected.log")system("echo Time: date +%F-%T
IP:"i" Num:"ip[i]" Rejected! >>/var/log/rejected.log")}}}'
sleep 5m
done
第三十八天、
附加信息:詳細瞭解Linux用戶空間、內核空間
重要習慣:涉及要服務等重要配置文件更改必須先備份
1.ssh -x圖形化協議,在本地開啓一個圖形化,比如進行oracle等複雜安裝與配置的軟件,目標必須安裝 "Destop" "x windows sysem"
2.ssh-keygen --> ~/.ssh/id_rsa id_rsa.pub 基於ssh key驗證
ssh-copy-id -i key.pub
3.xshell開啓圖像化支持:新建->隧道->主機->開啓x11-xmanager
4.rsync -av #注意在使用rsync srouce remote@xxxx: 源目錄如果不加結束“/"表示複製整個目錄到目標主機,如果加"/"表示複製目錄下的文件
5修改完grub.cfg 後必須執行grub2-mkcofnig -o /boot/grub/grub.cfg
6.配置yum配置文件的時候,必須要注意指定倉庫路徑的時候repodata目錄在哪就指定到哪
7.謹記關於telnet此類非獨立服務,由xineted管理,所以安裝完成後chkconfig telnet on ; 重啓/etc/init.d/xineted服務 文件 /etc/xineted.d/..
二、端口轉發
1.重點理解反向穿透,在跳板機上執行命令
ssh -R #結合老王視頻進行原理***
ssh -b
XSHELL
SSH協議作用在二、三、四層 ; DNS作用在七層 ; TCP/IP結構體系概括七層爲四層
使用密鑰登錄ssh
ssh-keygen
ssh-copy-id -i id_rsa.pub root@centos7
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
重設私鑰簽名時的密碼
ssh-keygen -p
scp filename username@ip[hostname]:/remotepath
scp username@ip[hostname]:/remotepath/filename /localpath
-r :遞歸
-p :保持文件的原屬性
-q :靜默
-P :指定遠程主機監聽的端口,當默認端口修改後通常指定
rsync (increment 增量式) :rsync在複製時,源目錄如果不加/以結束,表示將整個目錄複製到遠程,否則表示
將目錄下的其他子目錄或者文件複製到遠程
rsync -av /etc remote:/dir :比scp更快,增量複製,注意權限和鏈接以及屬性
實用技術:
利用pssh在多臺主機上執行腳本 :配合利用自己編寫的指定網段搜索在線主機的方式、nmap全網搜索在線主機的方式使用正則將主機ip保存到指定文件
1.寫腳本
2.傳腳本 :要執行的腳本必須事先在對應的遠程主機上
3.將文件發往多臺主機
pscp.pssh -A -h ip.txt /app/installftp.sh /app
3.執行腳本
pssh -A -h ip.txt -i "/app/installftp.sh" -H指定單臺主機ip
pssh .. -p -i :開啓多進程的方式,可以配合 & 放入後臺更快執行
4.從多臺遠程主機拷文件到本地:適應於配合以計劃任務實現多服務器收集信息於本地
pslurp -A -h /app/ip.txt -L /app /etc/passwd . :注意最後的.可以換成從遠程主機拷貝下來的文件的重新命名,但是必須寫
端口轉發 :跳板機都充當了客戶端和服務端,走的流量最終是目標服務協議類型;利用的都是ssh安全的隧道協議;不安全的可以考慮利用安全的隧道協議進行保障安全 注意telnet非獨立安全協議服務,受到xineted管理,重啓/etc/xinetd.d/
本地端口轉發:
centos7: ssh -L 9527:centos5:23 -Nf centos6
ssh -L 9527:centos5:23 -fN centos6
-N 不開啓遠程shell登錄,配合-f後臺運行,釋放前端
-g網關 :開啓網關的能力後,其他與本地機器在同一網段的能夠訪問本機的都可以通過本機9527進行最終實現轉發到目標服務器,但是前面的鏈接走的不是ssh安全隧道,是不安全的
遠程端口轉發->反向穿透 ,如外網不能訪問內網,但是內網可以訪問外網的ssh服務,利用角色互換的原理配合防火牆能出去連接即可自動識別返回的機制,實現遠程端口轉發; 命令執行是在跳板機上,
[root@ca ~]# ssh -R 9527:centos5:23 -fN centos6
說明:此時實際本地客戶端是centos6,跳板機是centos7,最終訪問內網目標服務器是centos5; 因爲防火牆原因centos6和centos7角色互換,在內網服務器centos7上發起命令,指定端口9527,centos6客戶端相當於是跳板機即sshsever
動態端口轉發:不需要指定遠程主機,通過外部可以與之連接訪問的服務器作爲跳板機,以指定本地機器的任意端口作爲代理服務器從而轉發請求到sshsever將替之訪問internet Dynamcli動態
ssh -fND 8080 root@sshserver :以centos7爲例還要在本地服務器上進行設置:打開瀏覽器->preferences->advanced->network->Manual proxy ->socks ip port 例如 127.0.0.1 8080,因爲此時做代理的是本機上的指定端口作爲代理,由本機監聽訪問,由遠程跳板機做轉發替代連接到目標主機
在Linux上命令行測試(前提設置好瀏覽器proxy socket): curl --socks5 127.0.0.1:1080 http://www.qq.com
X 協議轉發 (圖形化協議轉發)
所有圖形化應用程序都是X客戶程序;
能夠通過Tcp/IP鏈接遠程x服務器;
數據沒有加密,可以通過ssh安全隧道協議進行
- vim /etc/sshd_config : Xllforwording yes X11DisplayOffset 10 X11UseLocalhost yes
2.xshell需要配置 隧道 :勾選X11轉發 xmanager ,本地已經安裝過了xmanager
ssh -X [email protected] gedit
ssh服務配置文件選項 :嚴重注意,任何時候都不能刪除系統文件或者服務重要文件,必須事先全部部分,rm慎用
** 總結:ssh 服務項配置 listenaddress port :智能作用,此監聽Ip可以通過瀏覽器進行遠程安裝操作系統
1.PermitRootLogin yes :如果改爲no,只有在使用其他用戶su - 切換到root可以ssh連接,否則不能直連
2.AllowUsers\DenyUsers配置選項同時存在且存在相同用戶時,DenyUsers生效 :都可以手動寫到服務配置文件最後,
注意:AllowUsers白名單設置如果沒有root可以拒絕root登錄ssh , !!
AllowGroups\DenyGroups
AllowUsers與DenyUsers同時有相同對象時,可以應該在允許一個組的所有成員,除了此組中的某個用戶~合理利用
3.使用awk編寫腳本對/var/log/secure進行安全掃描,將異常ip、多次失敗ip循環發現扔到防火牆策略中
4.編譯安裝dropbear簡述:學習舉一反三,1.cat README ; cat INSTALL(重點:安裝引導、編譯、編譯安裝) ; ./configure --help ,查看安裝時可以重新定義的選項參數;
a.開發編譯環境包組的提前準備; 如果編譯過程失敗,查看具體失敗原因比如缺失什麼,如果需要重新安裝,安裝後需要清理編譯 make clean ,然後重新編譯
b.編譯安裝完成後,對於每一個需要執行的命令或者執行程序,都可以通過 cmd --help的方式來查看獲取幫助信息
c.默認執行自帶的客戶端程序時如果默認找尋的文件路徑不是當前安裝要使用的,考慮使用軟件連接的方式來實現
ln -s /usr/local/bin/dbclient /usr/bin/dbclient :這樣在執行時默認找尋/usr/bin/dbclient時就會指向/usr/local/bin/dbclient真實客戶端所在(類似快捷方式)
d.編譯安裝後的卸載程序,實際上就是rm -rf 程序所在的目錄包括其他一些安裝目錄和文件,記得將創建的軟連接也一併刪除
e.參考默認配置或者服務其他成熟配置文件時,新建的配置文件在使用cp時需要注意權限保持一致等問題: cp -p
f.安裝系統重新編譯一次內核,將自定義系統初始化腳本模塊化調用;或者放在遠程或者http
重點應用;作業.提前編寫腳本,實現發現連接異常失敗ip並使用防火牆規則禁用:最好是配合計劃任務實現
1、檢查防火牆的策略重複問題,如果已經存在,應該不再添加:在awk中對即將要封掉的ip進行判斷是否再次添加到防火牆
2、判斷必須是10分鐘內出現的超過一定次數的纔可以被禁掉 :考慮跨年、日期;使用date +%s方式並結合${date:n:m}方式截取變量的指定字符串
3.cat file |while read -r lines ;do ... done
***實用性軟件應用:安裝防暴力破解ssh密碼驗證的登錄的工具 fail2ban --> python編寫的實用性工具
#ssh日誌文件:/var/log/secure
unset_ip () {
unset i
unset j
unset k
unset a
unset ip
unset uip
unset b
unset c
unset d
unset iptables_repeat
unset unset_ip
#rm -f /var/log/tmpip.log
}
iptables_repeat (){
#專項檢測INPUT鏈規則
iptables -L INPUT |grep "$1" &> /dev/null
if [ $? -eq 0 ];then
#echo 1
return 1
fi
}
cat /var/log/secure |awk '/Failed password/{print $1,$2,$3,$(NF-3)}' |while read -r -a records;do echo "$(date -d "${records[0]} ${records[1]} ${records[2]}" +%s) ${records[3]}" >> /var/log/tmpip.log
#臨時文件的格式就是:timestamp ip
done
export -f iptables_repeat
awk '{ip[$2][$1]++}
END{for(i in ip ){
for(j in ip[i]){
#此處爲了避免同一個epoch秒時間戳與下面每兩個不同epoch時間出現重複統計滿足條件的ip以及所在記錄,需要將此條件下的記錄從ip[i]數組刪除
if(ip[i][j] >= 2){uip[i];delete ip[i][j]}
for (k in ip[i])
if ((j!=k) && sqrt((j-k)*(j-k)) <= 1200 ) b[i][j]++
}
}
for(p in b){
for(s in ip[p]){
if(b[i][j] >= 2) uip[i]
}
}
for(u in uip) {
#"iptables_repeat "u|getline rc;print rc;
#if(rc == 1){printf "%s is already rejected in iptables\n",u}
#調用函數,根據return返回值保存在result進行判斷當前防火牆INPUT策略是否已經已經存在此ip
system("iptables -A INPUT -s "u" -j REJECT");printf "%s is rejected in iptables!\n",u
}
"secure_log.sh" 97L, 3313C 61,4-25 68%
cat /var/log/secure |awk '/Failed password/{print $1,$2,$3,$(NF-3)}' |while read -r -a records;do echo "$(date -d "${records[0]} ${records[1]} ${rec
ords[2]}" +%s) ${records[3]}" >> /var/log/tmpip.log
#臨時文件的格式就是:timestamp ip
done
#區別於上面的使用,此爲二維數組:awk並不支持二維數組的存儲,key值實際上是以\034作爲分割符 a[2,4] --> 2\0344
awk '
{
a[$1,$2]++;
}
END{
for(i in a) {
split(i,idx,SUBSEP);
#下面三項分別表示二維數組的i,j和a[i,j]
print idx[1], idx[2], a[idx[1], idx[2]];
}
}' data
5.AIDE : 高級***檢測環境,利用數據庫更新讀寫分離校驗各種自定屬性 -->配合計劃任務實現定時定期收集檢測目標信息做判斷
echo $PATH |tr -s ":" "\n"
自定義編寫一個假的程序腳本,替換原命令或者程序腳本,但是可以運行時指向原命令(先將原真實腳本移除或者移動到其他目錄)
rsyslog服務:在誤刪除/var/log/secure後對應的重啓此日誌服務和其他需要重啓的服務,生成並記錄日誌
sudo:
1.進行修改配置文件不建議直接在主配置文件下; 2.授權的命令必須要格式一致,多一個"/"都會出錯; 3.運行時必須使用sudo
爲方便使用visudo 打開自定義的配置有自動加亮等特點 使用 export EDITOR=vim
2.系統管理員的身份實際依據的是uid=0
2.visudo -f /etc/sudoers.d/xx ; 切換用戶後必須使用 sudo cmd ; centos5不支持擴展配置文件
3.%group 一旦某組授權了,其中的用戶可以使用
4.使用pssh將自定義的sudo授權文件推送給多臺主機,在各自服務器上進行修改並使用,不建議使用nfs,會出現用戶發生更改等諸多問題~nfsnobody!!
5.將文件發往多臺主機
pscp.pssh -A -h ip.txt /etc/sudoers.d/file /etc/sudoers.d/
liubei x.x.x.x=(ALL) cmd絕對路徑: 在實際推送到多臺遠程主機的時候,不同主機根據會在讀取執行相關sudo擴展配置文件時候根據自身ip和配置文件的授權主機對應各自的實際授權進行執行特定的權限命令
6.sudo以時間戳文件的方式記錄5分鐘免試密碼 , sudo ... 5mins
ip a a x.x.x.x/24 dev ens33 ; ip a d x.x.x.x/24 dev ens33
***sudo要慎用,考慮清楚 :sudo文件格式是什麼,就只能授權格式是什麼,授權任何一個命令都必須要謹慎思考
7.必須注意:授權passwd必須最後加 ! /usr/sbin/passwd root 要謹慎使用 ; 對 su 命令進行嚴格限制 !/bin/su root, !/bin/su - ,!/bin/su ,
useradd -o -u 0 ,此時又創建了一個0id的超級用戶,所以,要限制useradd不能使用選項,固定創建普通用戶
8.sudo -v 相當於 以root touch了 /var/db/sudo下的時間戳文件,所以運行後會即刻更新時間戳,5分鐘內一直不需要輸入密碼
sudo -k 強制下次輸入密碼
8.重中之重:比如授權su ,那麼必須要考慮 su - su su root su - root ,
9.防暴力破解ssh密碼驗證登錄python軟件; fail2ban ; 系統自帶高級***檢測環境 AIDE
TCPWriter
tcp 三次握手,四次揮手 ; udp 無連接狀態,快
1.必須支持調用libwrap庫
2、對於已經連接成功的或者執行成功的,不會給予生效
PAM:統一認證框架機制: 服務程序本身不再進行認證,將由PAM機制認證、授權、session等
1.login:我們認爲就是登陸tty,即本機登錄 ; 其他僞終端爲 /dev/pts/..
2.因爲如果有普通用戶可以登錄,就可以su root,所以禁止遠程登錄root包括su 方式 ;/etc/pam.d/remote、su --> requited pamsecuretty.so
[root@magedu(CentOS7) 2018-04-12 pam.d]# su - liubei
Last login: Tue Apr 10 14:03:37 CST 2018 on pts/1
[liubei@magedu(CentOS7) 2018-04-12 ~]$ su - root
Password:
su: Authentication failure 根據這個提示進行判斷認證問題
3.pam_limits.so默認一次請求打開最大的文件描述符(socket) 1024 ulimit -n 2028 :掌握ulimit選項
注意:進程在運行時必須是要以某一個用戶的身份去執行,所以限制用戶自身的資源使用權限就可以限制所有以此身份運行的進程!!!
(fail2ban 防暴力破解)
運維自動化安裝: 考慮深入完善初始化腳本、系統整體流程
***重要回顧深入1.TCP/IP協議棧相關知識與研究
1.定製初始化腳本:比如公鑰放入、通常配置 :安裝到設置網卡自啓動後ctrl+f2可以查Ip ip a s
2./boot不能在邏輯卷
3.* anaconda kickstart
4.通過安裝system-config-kickstart生成的anaconda_config文件必須將yum倉庫的id配置爲 [development]
centos5中必須是[base] centos6中隨意
5.centos7中在自動化安裝autofs包後需要手動啓動,可以考慮在安裝腳本中實現 systemctl enable autofs :因爲自動安裝完reboot參數,需要將服務設置爲開機自啓動
在沒有dhcp服務動態分配Ip以及沒有手動設置ip的時候,在tab安裝界面時,手動輸入 ip=x.x.x.x netmask=255.255.255.0(與本地僅主機ip在同一個網段) ks=ftp://...
1.最好自己搭建dhcp服務器
2.如果將網絡配置信息手動配置到ks文件中,可以先使用system-config-kickstart圖形配置,然後獲取模板文件進行參考
3.ls -1 /dev/sr >> /etc/fstab pwd >> /etc/fstab
DHCP: 和客戶端應該是在一個網段中,路由器用來隔離廣播域; dhcp要想啓動成功爲請求客戶端動態分配ip,首先需要監聽在一張具有靜態配置ip的網卡上提供服務
1.grep dhcp /etc/services 67server端,68client端口 UDP
2./etc/dhcp/dhcp.leases:單獨設置各個租約 arp -an :可以查看以緩存的mac和ip
2.必須注意:對於dhcp服務要工作在的網卡上必須配置靜態ip等信息,針對到準確網卡
3.如果開啓selinux,必須時刻注意每個文件的標籤,來回拷貝和移動會改變
4.yum provides "file" 反向查看包
5.檢查配置文件語法 :service dhcpd configtest :centos7不使用
dropbear安裝
1.下載dropbear-XXXX.XX.tar.bz2
2../configure --prefix=/app/dropbear --sysconfdir=/etc/dropbear
3.make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
4.make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install
5.mkdir /etc/dropbear
6.dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
7.dropbear -p 2222
練習:授權hr可以任意切換用戶,而不用輸入原密碼,但不能切換到root
aide
sudo
/etc/sudoers
/etc/sudoers.d/filename
liubei ALL(ALL) command1[,command2]
tcpwrappers
第四十天
iptables -A INPUT -s centos6 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j REJECT
hosts.allow
hosts.deny
sshd:192.168.0.6
sshd:192.168.0.0/24:deny
pam
實現禁止用root登錄telnet,同時用telnet登錄普通用戶也不能su到root下
[root@ca pam.d]# vim /etc/pam.d/remote
[root@ca pam.d]# vim /etc/pam.d/su
auth required pam_securetty.so
自動化運維之系統安裝
annaconda
手工
kickstart
system-config-kickstart
如果需要在工具中選擇安裝包,則repo文件的repoid要爲以下值:
rhel5:base
rhel6:隨意
rhel7:development
手工製作引導光盤:
[root@centos6 ~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "Centos 6.9 7.4 Magedu boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos_magedu.iso /app/myiso/
製作全功能的ISO
1.
[root@centos6 app]# mkdir -p /app/fulliso
2.
[root@centos6 fulliso]# cp -r /var/www/html/centos/6/* .
3.
[root@centos6 6]# cd /var/www/html/centos/6; cp .discinfo .treeinfo /app/fulliso/
4.
[root@centos6 fulliso]# find -name TRANS.TBL -exec rm -rf {} \;
5.
[root@centos6 fulliso]# rm repodata/ -rf
[root@centos6 fulliso]# mkdir repodata
[root@centos6 fulliso]# cp /var/www/html/centos/6/repodata/43d8fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089777d-c6-x86_64-comps.xml repodata/
6.
[root@centos6 fulliso]# createrepo -g repodata/43d8fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089777d-c6-x86_64-comps.xml ./
Spawning worker 0 with 3240 pkgs
7.
[root@centos6 fulliso]# vim isolinux/isolinux.cfg
default vesamenu.c32
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to CentOS 6.9 AutoMatic Install!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label mini
menu label ^Install an Mini system
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/ks6-mini.cfg
label desktop
menu label Install an ^Desktop system
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/ks6-desktop.cfg
label manual
menu label ^Manual Install or upgrade an existing system
kernel vmlinuz
append initrd=initrd.img
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu default
menu label Boot from ^local drive
localboot 0xffff
8.
[root@centos6 fulliso]# cp /var/ftp/pub/ks* /app/fulliso/
9.
[root@centos6 fulliso]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "Centos 6.9 Autoinstall DVD" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos_auto_dvd.iso /app/fulliso/
10.
[root@centos6 fulliso]# sz centos_auto_dvd.iso
dhcp
option domain-name "magedu.com";
option domain-name-servers 114.114.114.114, 8.8.8.8;
default-lease-time 6000;
max-lease-time 7200;
log-facility local7;
subnet 172.24.0.0 netmask 255.255.0.0 {
range 172.24.1.1 172.24.255.254;
option routers 172.24.0.254;
}
host zhangsan {
hardware ethernet 00:0c:29:5e:0f:2e;
fixed-address 172.24.0.100;
}
實驗:基於網絡PXE自動化安裝CENTOS7
小知識記錄:關於centos6下如果作爲yum源倉庫的話,搭建基於pxe自動化安裝Linux ,那麼光盤的自動掛載方式:cd /misc/cd 下,然後隨意執行df就可以自動掛載,要有autofs服務啓動支持最終將/dev/sr*光驅自動掛載--> /etc/fstab
1.安裝前準備:關閉防火牆和SELINUX,DHCP服務工作的網卡設置靜態
2.安裝HTTPD
yum -y install httpd
cd /var/www/html/
mkdir centos/{5,6,7}
3.將pxeLinux自動化安裝服務器本地的各系統光盤設置爲開機自動掛載:光盤的掛在文件系統類型爲 iso9660
vim /etc/fstab
/dev/sr0 /var/www/html/centos/5 iso9660 defaults 0 0
/dev/sr1 /var/www/html/centos/6 iso9660 defaults 0 0
/dev/sr2 /var/www/html/centos/7 iso9660 defaults 0 0
4.kickstart文件 :重點注意:1.在centos7、centos6裏面都可以使用(需要先安裝) system-config-kickstart命令生成模板再修改; 2.centos7系統在此配置安裝後執行腳本構建yum源必須是[development]id,centos5中必須是[base]id ; 網卡配置生效期初最好是一塊主網卡即可
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
#Install OS instead of upgrade
install
#Keyboard layouts
keyboard 'us'
#Root password
rootpw --iscrypted $1$SL6DIN0P$x.AbjumUWqIWTsVKmzxXP1
#Use network installation
url --url="http://192.168.77.254/centos/7"
#System language
lang en_US
#Firewall configuration
firewall --disabled
#System authorization information
auth --useshadow --passalgo=sha512
#Use text mode install
text
firstboot --disable
#SELinux configuration
selinux --disabled
#Network information
network --bootproto=dhcp --device=ens33
#Reboot after installation
reboot
#System timezone
timezone Asia/Shanghai --nontp
#System bootloader configuration
#bootloader --location=none
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
#Clear the Master Boot Record
zerombr
#Partition clearing information
clearpart --all --initlabel
#Disk partitioning information
part / --fstype="xfs" --size=20480
part /boot --fstype="xfs" --size=300
part /app --fstype="xfs" --size=10240
part swap --fstype="swap" --size=2048
%packages
@^minimal
@core
kexec-tools
autofs
vim
%end
%post
rm -rf /etc/yum.repos.d/*
wget -P /etc/yum.repos.d/ http://192.168.77.254/centos/magedu.repo #wget網絡下載文件並重定向到指定目錄 wget -P dpt目錄 下載源
mkdir /root/.ssh
chmod 700 /root/.ssh
cat > /root/.ssh/authorized_keys << EOF
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAkWzkFu1tufL7goP7h4UCNOTJRbSqxwqn+ibTE9tZYXW2kZ/T3PMkVxH+q30Mf46mcVpvhXdER7jnPN4Pq2UcLh8aEBdzgttVTQJOSs1M3jCCDc75M1TvX7s36+uAJ4srauO/yfXSX7MilVdL9NbDjsWyh7FF1Duqz5RWGzL/5t8=
EOF
chmod 600 /root/.ssh/authorized_keys
%end
5.配置TFTP服務
1.安裝軟件搭建服務需要注意客戶端和服務端程序的安裝問題: yum search .. ; yum provides 文件名-->找包; rpm -ql 包;
- /etc/init.d/並沒有發現tftp服務,所有可以判斷爲非獨立服務,受到xineted管理(修改主配置文件disabled爲no並重啓xineted服務;或者不修改tftp配置文件,使用下列方式受到systemd管理)
2.更改完/etc/xinetd.d/tftp文件後,可以通過chkconfig --list 查看是on還是off,還是未顯示
[root@pxe7 ~]# yum install -y tftp-server
[root@pxe7 ~]# systemctl start tftp.socket ; systemctl start tftp.service
[root@pxe7 ~]# systemctl enable tftp.socket ; systemctl enable tftp.service
6.配置DHCP服務
1.需要注意,在配置dhcpd.conf中子網subnet部分時,分配地址時一定不要把自身的ip分配,需要繞過;
2.配置過程中必須注意靈活觀察應用標準語法:{a;b;c;}
[root@pxe7 ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
option domain-name "magedu.com";
option domain-name-servers 192.168.77.254;
default-lease-time 3600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.77.0 netmask 255.255.255.0 {
range 192.168.77.2 192.168.77.253;
option routers 192.168.77.254;
next-server 192.168.77.254;
filename "pxelinux.0";
}
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address fantasia.fugue.com;
}
[root@pxe7 ~]# systemctl start dhcpd
[root@pxe7 ~]# systemctl enable dhcpd
7.準備PXE相關文件
[root@pxe7 ~]# yum -y install syslinux
[root@pxe7 ~]# cd /var/lib/tftpboot/
[root@pxe7 ~]# cp /var/www/html/centos/7/isolinux/{vmlinuz,initrd.img} .
[root@pxe7 ~]# cp /usr/share/syslinux/{pxelinux.0,menu.c32} .
[root@pxe7 ~]# mkdir pxelinux.cfg
8.製作啓動菜單文件 :這裏需要注意,啓發思維,根據所從光盤或其他地方拷貝到/var/lib/tftpboot/pxelinux.cfg/default後,根據源文件的內容,必須將無需用到的項都刪除,留下default菜單和標題頭等,以及最重要的label 引導菜單配置項即可
[root@pxe7 ~]# cp /var/www/html/centos/7/isolinux/isolinux.cfg pxelinux.cfg/default
default menu.c32
timeout 600
menu title CentOS Linux 7 PXE Install
label mini
menu label Auto Install CentOS 7 ^Mini
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.77.254/ksdir/ks7-mini.cfg
label desktop
menu label Auto Install CentOS 7 ^Desktop
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.77.254/ksdir/ks7-desktop.cfg
label linux
menu label Manual ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img
label local
menu default
menu label Boot from ^local drive
localboot 0xffff
menu end
實驗:在centos7實現PXE安裝centos6和centos7
1.分別準備Centos6和Centos7的yum源
/dev/sr2 8490330 8490330 0 100% /var/www/html/centos/7
/dev/sr1 3878870 3878870 0 100% /var/www/html/centos/6
/dev/sr0 2935370 2935370 0 100% /var/www/html/centos/5
2.分別爲6,7 各準備一個kickstart文件
[root@pxe7 isolinux]# cd /var/www/html/ksdir/
[root@pxe7 ksdir]# ls
ks6-desktop.cfg ks6-mini.cfg ks7-desktop.cfg ks7-mini.cfg
3.分別爲6,7準備各自的內核及ramdisk文件
[root@pxe7 ~]# tree /var/lib/tftpboot/centos*
/var/lib/tftpboot/centos6
├── initrd.img
└── vmlinuz
/var/lib/tftpboot/centos7
├── initrd.img
└── vmlinuz
0 directories, 4 files
4.準備啓動菜單
default menu.c32
timeout 600
menu title CentOS Linux 7 PXE Install
label 6mini
menu label Auto Install CentOS 6 ^Mini
kernel centos6/vmlinuz
append initrd=centos6/initrd.img ks=http://192.168.77.254/ksdir/ks6-mini.cfg
label 6desktop
menu label Auto Install CentOS 6 ^Desktop
kernel centos6/vmlinuz #注意因爲根據配置文件自動找到/var/lib/tftpboot/,所以目錄前不加"/"
append initrd=centos6/initrd.img ks=http://192.168.77.254/ksdir/ks6-desktop.cfg
label 7mini
menu label Auto Install CentOS 7 ^Mini
kernel centos7/vmlinuz
append initrd=centos7/initrd.img ks=http://192.168.77.254/ksdir/ks7-mini.cfg
label 7desktop
menu label Auto Install CentOS 7 ^Desktop
kernel centos7/vmlinuz
append initrd=centos7/initrd.img ks=http://192.168.77.254/ksdir/ks7-desktop.cfg
label linux
menu label Manual ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img
label local
menu default
menu label Boot from ^local drive
localboot 0xffff
menu end
5.客戶端服務器想要通過網絡連接到pxelinux自動化安裝部署服務器,需要開機bios選擇網絡啓動搜尋
實驗個人總結:
1.其中實驗過程中耗時解決一個自動化安裝過程中的問題是,安裝centos7與安裝centos6時所需要的內存空間一樣都是設置的1024G,但是PXE自動安裝時centos6可以成功,centos7卻一直失敗:通過反覆實驗確定實驗流程、服務流程、源、網絡通信都沒有問題,原因是安裝實質是複製過程,而centos7因集成度高,initramfs以及vmlinuz的代碼和數據都遠大於centos6,所以centos7安裝所需要的最低內存最好設在2000M上(物理內存和虛擬內存),這要必須區別於籠統的考慮硬盤空間問題;
2.思考系統工作原理,內核內存空間和用戶空間問題;
3.selinux和防火牆如果開啓下的安全策略設置問題
作業:在centos7上實驗用PXE安裝5,6,7