SSH協定伺服器、SUDO用法以及PAM機制
-----------------------------------------------------------------------------------------------------------------------------------------------
ssh:secure shell,protocol,22/tcp,安全的遠端登入
具體的軟體實作
openssh:ssh協定的開源實作
dropbead:另一個開源實作
SSH協定版本:V1、V2
ssh 使用者名@目标主機,不寫使用者名将以root身份登入
-p port:遠端伺服器監聽的端口
-b:指定本機的某ip連接配接目标ip
-v:調試模式,用來檢測連接配接情況的錯誤
-x:支援x11轉發
-t:強制僞tty配置設定,例如ip1想要連接配接ipn,但内部設定不可直接連接配接,需要從其他主機連接配接,此時可以用ssh -t ip1 ssh -t ip2 ssh -t ip3 ... ssh ipn
windows界面運作linux桌面:XManager工具中有一個Xstart,打開後以ssh方式登入linux即可實作遠端登入linux桌面
ssh服務基于密鑰key認證登入
1、在用戶端生成一對密鑰
ssh-keygen -t rsa -P PASSWD -f ~/.ssh/FILE
2、将用戶端的公鑰拷貝到伺服器端
ssh-copy-id -i FILE.pub USER@ip,在伺服器端/root/.ssh/authorized_keys内可以看到
3、用戶端向伺服器端發一個連接配接請求,資訊包括ip、使用者名
4、服務端得到用戶端的請求後,會到授權密鑰authorized_keys中查找,如果有響應的ip和使用者名,伺服器端會随機生成一個字元串
5、服務端将使用用戶端拷貝過來的公鑰進行加密,然後發送給用戶端
6、得到服務端發來的資訊後,用戶端會使用私鑰進行解密,然後将解密的字元串發送給服務端
7、服務端接收到用戶端發來的字元串後,跟之前字元串相比,如果一緻,就允許免密碼登入
scp指令
scp IPA:/位置/FILE IPB:/位置/FILE
此指令可以将自己檔案傳遞到其它裝置,也可以讓兩台裝置間互傳,也可以從其它裝置傳遞到自己主機
選項
-r:可以複制目錄
-p:傳遞時保留權限
-q:靜默模式
-P PORT:指定端口
scp指令的複制為無腦複制粘貼,不檢查檔案存在性,是以配合rsync指令更為得手
rsync指令
基于ssh和rsh服務實作高效率的遠端系統之間複制檔案,使用安全的shell連接配接作為傳輸方式
rsync -av /etc IP:/位置,複制目錄和目錄下檔案
rsync -av /etc/ IP:/位置,隻複制目錄下檔案
此指令隻複制不同檔案
sftp指令:互動式檔案傳輸工具,用法和傳統的ftp工具相似,利用ssh服務實作安全的檔案上傳和下載下傳
pssh工具
pssh是一個python編寫可以在多台伺服器上執行指令的工具,也可以實作檔案複制
pssh -H 使用者@IP -i 指令
示範舉例
1、通過pssh批量關閉seLinux
pssh -H [email protected] -i "sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config" 批量發送指令
2、pssh -H [email protected] -i setenforce 0
3、pssh -H [email protected] -i hostname
4、當不支援ssh的key認證時,通過 -A選項,使用密碼認證批量執行指令
5、pssh -H [email protected] -A -i hostname
6、将标準錯誤和标準正确重定向都儲存至/app目錄下
7、pssh -H 192.168.1.10 -o /app -e /app -i "hostname"
pscp.pssh功能是将本地檔案批量複制到遠端主機
-v顯示複制過程
-r遞歸複制目錄
将本地test.sh複制到/app目錄
pscp.pssh -H 目标IP /本機位置/test.sh /app
pscp.pssh -h IP清單.txt /本機位置/test.sh /app
将本地多個檔案批量複制到/app目錄
pscp.pssh -H 目标IP /本機位置/test1 /本機位置/test2 /app
将本地目錄批量複制到/app/目錄
pscp.pssh -H 目标IP -r /本機位置/目錄/ /app/
pslurp功能試講遠端主機的檔案批量複制到本地
-L指定從遠端主機下載下傳到本機的存儲目錄,local是下載下傳到本地後的名稱
批量下載下傳目标伺服器的test檔案至/app下,并改名為file
pslurp -H 目标IP -L /app /目标位置/testt file
SSH端口轉發
(1)SSH會自動加密和解密所有SSH用戶端和服務端之間的網絡資料,但是SSH還能夠将其他TCP端口的網絡資料通過SSH連結來轉發,并且自動提供了響應的加密及解密服務,這一過程也被叫做“隧道”,這是因為SSH為其他TCP連接配接提供了一個安全的通道來進行傳輸而得名,例如Telnet,SMTP,LDAP這些TCP應用均能夠從中得益,避免了使用者名、密碼以及隐私資訊的銘文傳輸。而與此同時,如果工作環境中的防火牆限制了一些網絡端口的使用,但是允許SSH的連接配接,也能夠通過将TCP端口轉發來使用SSH進行通訊。
(2)SSH端口轉發能夠提供量大功能
(3)加密SSH Client端至SSH Server端之間的通訊資料
(4)突破防火牆的限制完成一些無法建立的TCP連接配接
總而言之就是通過SSH連接配接服務端,會産生一個隧道,這個隧道可以允許TCP服務通過隧道,忽略防火牆,直接連接配接服務端。像TCP服務沒有隧道是無法通過防火牆通訊連接配接服務端内部的。
本地轉發
-L PORT:IP1:IP1PORT -fN IP2:IP2PORT
PORT:本地的某個未使用的端口
IP1:如果本地存在多個ip,需要指定哪個ip去連接配接服務端
IP1PORT:IP1的端口
IP2:目标服務端的ip
IP2PORT:目标服務端的ip端口
-f 背景啟用
-N 不打開遠端shell,處于等待狀态
-g 啟用網關功能
本地轉發:指令在A裝置上輸入,此時B是IP1,C是IP2
遠端轉發
-R PORT:IP1:IP1PORT -fN IP2
IP1:需要讓外部主機到達防火牆内部的ip
IP2:防火牆外部主機的ip
遠端轉發,指令在B裝置輸入,此時C是IP1,A是IP2
如果需要實作SSH端口本地轉發或者遠端轉發,先安裝telnet-server,安裝完成後systemctl start telnet.socket,開啟23端口,再telnet下ip,看是否能通,不能通輸入指令放開端口iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
動态端口轉發
通路Internet時,可以将本機的1080端口作為代理伺服器,通路請求被轉發到sshserver上,由sshserver代替通路Internet,比如說我們主機不能直接通路谷歌,如果買了一台國外的虛拟機,由于該虛拟機可以直接通路谷歌,是以我們可以通過該虛拟機通路谷歌,該虛拟可以看作是sshserver,也就是代理
curl --sock5 IP:PORT WEBSITE,用代理的ip通路目标網站
X 協定轉發
所有圖形化應用程式都是X客戶程式
能夠通過tcp/ip連接配接遠端X伺服器
資料沒有加密機,但是它通過ssh連接配接隧道安全進行
ssh伺服器
用戶端:ssh,配置檔案:/etc/ssh/ssh_config
伺服器端:sshd,配置檔案:/etc/ssh/sshd_config
常用參數,參數更改後輸入指令systemctl restart sshd
Port:伺服器端口,連接配接到網際網路上時,為了安全将Port 22改為非标準端口
AddressFamily any:支援ipv4和ipv6位址
listenaddress IP:将Port的端口号監聽在ip特定的位址上
Hostkey:公鑰私鑰算法
LoginGraceTime:登入後多長時間不輸入密碼将退出
PermitRootLogin:是否允許root賬戶直接登入
StrictModes:嚴格模式,是否檢查必要檔案的權限
MaxAuthTroes:最大嘗試次數,次數是此項值的一半
MaxSessions:每一個會話在網絡連接配接裡打開最大的次數,比如說CRT視窗右鍵單擊克隆視窗,數值是多少就最多克隆幾個會話
AuthorizedkeyFile:基于key驗證公鑰存放的路徑
PasswordAuthentication:關閉後遠端無法通過密碼登入連接配接,隻能基于key驗證登入
PubkeyAuthentication:基于key驗證
其它項Kerberos option、GSSAPI options中也是驗證,用的不多,可以關閉,加快網絡連接配接
MaxStarups:預設數值10:30:100,因為ssh伺服器作為遠端管理的,是以該項允許最大連接配接數為10,10以内時不做任何操作,超過10次将以30%的失敗率幹擾連接配接,當連接配接數到達100次時,再次連接配接将全部拒絕
ClientAliveInterval:用戶端存活間隔,0表示不檢測
ClientAliveCountmax:用戶端存活檢測次數,配合存活間隔項,當秒數達到次數x存活間隔時間的數值時,将自動斷開連接配接
PermitEmptyPasswdords:允許無密碼登入,設定為no
Banner:選項後是文本檔案,使用者登入後顯示文本内容
Allowusers USER1 USER2:添加白名單
Denyusers USER1 USER2:添加黑名單
AllowGroups
DenyGroups
注:黑白名單都存在的使用者也無法登入
ssh服務優化
建議使用非預設端口
禁止使用protocol version 1
限制可登陸使用者
設定空閑會話逾時時長
利用防火牆設定ssh通路測量
僅監聽特定的ip位址
基于密碼認證時,使用強密碼政策tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 |xargs
使用基于key的驗證
禁止使用空密碼登入
禁止root使用者直接登入
限制ssh的通路頻度和并發線上數
經常分析日志,/var/log/secure,多次見到Failed password for root from IP port PORT ssh2時,需要引起注意,可能是有人在惡意猜root密碼,放入防火牆
AIDE
進階***檢測環境,用于檢測所關心檔案的特定屬性資訊
/etc/aide.conf:定義監控的檔案以及檔案資訊
向下翻
定義完規則,aide --init寫入aide資料庫,如果做比較,cp aide.db.net.gz aide.db.gz,有讀入庫,可以輸入aide --check做比較
更改身份
su - USER,随着使用者切換,shell環境也變
su USER,使用者切換,但shell環境不變
配置檔案/etc/sudoers
時間戳檔案/var/db/sudo,sudo後會在該檔案夾下生成一個使用者的目錄,這個目錄生成時間的5分鐘以内輸入指令不用重新輸入密碼
日志檔案/var/log/secure,記錄了使用者sudo的操作記錄詳細資訊
USER ALL = (ALL) CMD
使用者 哪台裝置 代表誰去執行 /路徑/指令+參數
/etc/sudoers.d/FILE,檔案名任意輸入,将授權指令寫入該檔案也可以其作用
visudo -c 檢查/etc/sudoers的錯誤文法
%GROUP ALL = (ALL) CMD
組 哪台裝置 代表誰去執行 /路徑/指令+參數
%wheel ALL=(ALL) NOPASSWD:ALL,wheel組的使用者執行指令時候可以不用輸密碼,此用法用于編寫腳本授權
注:系統預設如果将普通使用者加入wheel組,該普通使用者将會有和root一樣的權限,是以生産中将配置檔案中%wheel ALL=(ALL) ALL注釋掉
配置檔案支援通配符寫法,比如說chen ALL=(ALL) /bin/* ,代表允許使用者chen執行所有/bin下面的程式
配置檔案規則
使用者和被代表的使用者可以是使用者名、#uid、%群組名、%#群組id、使用者别名/被代表的使用者别名
哪台裝置可以用ip、hostname、network、host_alias
指令用指令名、路徑、sudoedit、指令别名
sudo别名
别名有四種類型
User_Alias,Runas_Alias,Host_Alias,Cmnd_Alias
别名格式
[A-Z]([A-Z][0-9]_)* ,必須是A-Z開頭,後面可以跟[A-Z]和[0-9]_ 數字
比如說
User_Alias NETADMIN= chen1,chen2
Cmnd_Alias NETCMD = /usr/sbin/ip,/usr/sbin/usermod
NETADMIN ALL=(root) NETCMD
将内容寫入/etc/sudoers.d/FILE,之後用chen1就可sudo chen1 ip...,chen2可以sudo usermod...
sudo選項
-V:顯示版本資訊等配置資訊
-u:user
-l,ll:列出使用者在主機上允許和禁止的指令
-v:延長密碼有效期限,延長5分鐘
-k:清除時間戳,下次登入需要重新輸入密碼
-K:與-k類似,不過還要删除時間戳檔案
-b:在背景執行指令
-p:改變詢問密碼的提示符号
TCP_Wrappers
工作在第四層(傳輸層)的TCP協定
用于對有狀态連接配接的特定服務進行安全檢測并實作通路控制
以庫檔案形式實作
某建材是否接受libwrap的控制取決于發起此程序的程式在編譯時是否針對libwrap進行編譯的
判斷服務程式是否能夠由tcp_wrapper進行通路控制的方法
ldd /位置/程式 | grep libwrap.so
strings 位置/程式 | grep libwrap.so
配置檔案:/etc/host.allow、/etc/host.deny
基本文法
守護程序路徑@主機名:用戶端ip位址清單,比如說拒絕192.168.1.10通路本機的ssh服務,首先which sshd檢視指令路徑,/usr/sbin/sshd,之後再/etc/host.deny裡寫sshd:192.168.1.10,該檔案寫入後立即生效
except
在/etc/host.allow中寫入in.telnetd:172.20. EXCEPT 172.20.112. EXCEPT 172.20.112.224,表明172.20網段可用telnet本主機,除了172.20.112網段的裝置,但在這個網段中又除了172.20.112.224的裝置,它可以telnet本主機,最後except看作雙重否定,即肯定
配置檔案選項
/etc/host.allow中寫入in.telnetd:172.20. :deny,意思比對到172.20網段将被拒絕
/etc/host.deny中寫入in.telnetd:172.20. :allow,意思比對到172.20網段将被允許
spawn:當通路某個服務時候,激活另一個指令的執行,比如說in.telnet: ALL :spawn echo "hello"
twist:拒絕通路,使用指定的操作替換目前服務,标準輸入輸出和錯誤資訊發送到用戶端/dev/null,比如說in.telnet: ALL :twist echo "hello",結果是拒絕通路,并顯示hello
PAM部分重要子產品說明
pam_shell.so:檢查使用者是不是有效的shell登入
auth required pam_shell.so 拒絕不是有效shell登入的使用者
pam_securetty.so:隻允許root使用者直接登入的終端
pam_nologin.so:組織非使用者登入系統,其作用就是如果建檔案/etc/nologin普通使用者将無法登入
pam_limits.so:限制使用者使用的資源,是特殊的PAM子產品,配置檔案在/etc/security/limits.conf,指令是
ulimit:内部指令,不支援csh,隻支援/bin/bash,ulimit -a列出目前資源限制清單
清單中每一項分别對應-c,-d,-e,-f等等,比如說ulimit -c可以更改core file size這一項,不過這些指令是臨時更改,永久更改在/etc/security/limits.conf或者/etc/security/FILE(任意字元),格式:<domain> <type> <item> <value>
格式說明:
<domain> 應用于哪些對象
Username 單個使用者
@group 組内所有使用者
* 所有使用者
<type> 限制的類型
Soft 軟限制,普通使用者自己可以修改
Hard 硬限制,由root使用者設定,且通過kernel強制生效
- 二者同時限定
<item> 限制的資源
nofile 所能夠同時打開的最大檔案數量,預設為1024
nproc 所能夠同時運作的程序的最大數量,預設為1024
<value> 指定具體值
舉例:限制使用者最多打開的檔案數和運作程序數
(1)在/etc/pam.d/system-auth中寫入
session required pam_limits.so
(2)vim /etc/security/limits.conf
apache – nofile 10240 使用者apache可打開10240個檔案
student hard nproc 20 使用者student不能運作超過20個程序