SSH協議服務器、SUDO用法以及PAM機制
python
-----------------------------------------------------------------------------------------------------------------------------------------------
linux
ssh:secure shell,protocol,22/tcp,安全的遠程登陸
算法
具體的軟件實現shell
openssh:ssh協議的開源實現數據庫
dropbead:另外一個開源實現apache
SSH協議版本:V一、V2vim
ssh 用戶名@目標主機,不寫用戶名將以root身份登陸windows
-p port:遠程服務器監聽的端口安全
-b:指定本機的某ip鏈接目標ipbash
-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認證登陸
一、在客戶端生成一對密鑰
ssh-keygen -t rsa -P PASSWD -f ~/.ssh/FILE
二、將客戶端的公鑰拷貝到服務器端
ssh-copy-id -i FILE.pub USER@ip,在服務器端/root/.ssh/authorized_keys內能夠看到
三、客戶端向服務器端發一個鏈接請求,信息包括ip、用戶名
四、服務端獲得客戶端的請求後,會到受權密鑰authorized_keys中查找,若是有響應的ip和用戶名,服務器端會隨機生成一個字符串
五、服務端將使用客戶端拷貝過來的公鑰進行加密,而後發送給客戶端
六、獲得服務端發來的信息後,客戶端會使用私鑰進行解密,而後將解密的字符串發送給服務端
七、服務端接收到客戶端發來的字符串後,跟以前字符串相比,若是一致,就容許免密碼登陸
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 命令
演示舉例
一、經過pssh批量關閉seLinux
pssh -H root@192.168.1.10 -i "sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config" 批量發送指令
二、pssh -H root@192.168.1.10 -i setenforce 0
三、pssh -H xuewb@192.168.1.10 -i hostname
四、當不支持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"
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是下載到本地後的名稱
-r遞歸複製目錄
批量下載目標服務器的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
PORT:本地的某個未使用的端口
IP1:須要讓外部主機到達防火牆內部的ip
IP1PORT:IP1的端口
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個進程