目錄
1、SSH的概述
- SSH是一種安全通道協議,主要用來實現字符界面的遠程登錄、遠程復制等功能
- SSH協議對通信雙方的數據傳輸進行了加密處理,其中包括用戶登錄時輸入的用戶口令。因此SSH協議具有很好的安全性
- SSH客戶端:Putty、Xshell、CRT
- SSH服務器:OpenSSH
- OpenSSH是實現SSH協議的開源軟件項目,適用於各種UNIX、Linux操作系統
- Centos7 系統默認已安裝openssh相關軟件包,並已將sshd服務添加為開機自啟動
- 執行“systemctl start sshd”命令即可啟動sshd服務
- sshd服務默認使用的是TCP的22端口
- sshd服務的默認配置文件是/etc/ssh/sshd_config
ssh_config和sshd_config都是ssh服務器的配置文件,二者區別在於前者是針對客戶端的配置文件,后者則是針對服務端的配置文件
2、OpenSSH
- 服務名稱:sshd
- 服務端主程序:/usr/sbin/sshd
- 服務端配置文件:/etc/ssh/sshd_config
1、sshd_config配置文件的常用選項設置
vim /etc/ssh/sshd_config //服務端配置文件 #Port 22 //監端口為22 #AddressFamily any //監聽地址為任意網卡,也可以指定Openssh服務器的具體ip #LoginGraceTime 2m //登錄驗證時間為2分鍾 #PermitRootLogin yes //禁止root用戶登錄 #MaxAuthTries 6 //最大重試次數為 6 #PermitEmptyPasswords no //禁止空密碼用戶登錄 #UseDNS no //禁用DNS反向解析,以提高服務器的響應速度 ---------------------------------------------------------------------------------- //配置允許和禁止用戶登錄:加@表示限制ip,注意允許和禁止不要同時使用!! AllowUsers zhangsan //允許zhangsan登錄(多個用戶以空格間隔) AllowUsers zhangsan@192.168.80.80 //只允許zhangsan通過192.168.80.80登錄 DenyUsers lisi //禁止lisi登錄
1、密碼驗證
對服務器中本地系統用戶的登錄名稱、密碼進行驗證。簡便,但可能會被暴力破解
2、密鑰對驗證
要求提供相匹配的密鑰信息才能通過驗證。通常先在客戶端中創建一對密鑰文件(公鑰、私鑰),然后將公鑰文件放到服務器中的指定位置。遠程登錄時,系統將使用公鑰、私鑰進行加密/解密關聯驗證。能增強安全性,且可以免交互登錄
3、公鑰和私鑰的關系
- 公鑰和私鑰是成對生成的,這兩個密鑰互不相同,可以互相加密和解密
- 不能根據一個密鑰來推算出另一個密鑰
- 公鑰對外公開,私鑰只有私鑰的持有人才知道
- 當密碼驗證、密鑰對驗證都啟用時,服務器將優先使用密鑰對驗證。可根據實際情況設置驗證方式
vim /etc/ssh/sshd_config PasswordAuthentication yes //啟用密碼驗證 PubkeyAuthentication yes //啟用密鑰對驗證 Authori zedKeysFile .ssh/ authorized_keys //指定公鑰庫文件
1、ssh遠程登錄
ssh [選項] root@192.168.200.11
- 當用戶第一次登錄SSH服務器時,必須接受服務器發來的ECDSA密鑰(根據提示輸入"yes")后才能繼續驗證
- 接收的密鑰信息將保存到~/.ssh/known_hosts文件中。密碼驗證成功以后,即可登錄目標服務器的命令行環境中
// -p:指定非默認的端口號,缺省時默認使用22端口 ssh -p 10001 xx@192.168.200.11
2、scp遠程復制
下行復制 scp root@192.168.200.10:/etc/passwd /root/passwd10. txt //將遠程主機中的/etc/passwd文件復制到本機 上行復制 scp -r /etc/ssh/root@192.168.200.10:/opt //將本機的/etc/ssh目錄復制到遠程主機
3、sftp安全FTP
由於使用了加密/解密技術,所以傳輸效率比普通的FTP要低,但安全性更高
操作語法sftp與ftp幾乎一樣
sftp xx@192.168.200.10 Connecting to 192.168.200.10... //輸入密碼 sftp> ls sftp> get文件名 //下載文件到ftp目錄 sftp> put文件名 //_上傳文件到ftp目錄 sftp> quit
1、客戶端創建密鑰對
通過ssh-keygeni工具為當前用戶創建密鑰對文件。可用的加密算法為RSA、ECDSA或DSA等 ( ssh- keygen命令的“-t”選項用於指定算法類型)
useradd xx echo "1234556"| passwd --stdin xx Su - admin ssh-keygen -t rsa Generating public/private ecdsa key pair Enter file in which to save the key (/home/admin/.ssh/id_rsa) : //指定私鑰位置,直接回車使用默認位置 Created directory '/home/ admin/.ssh' //生成的私鑰、公鑰文件默認存放在宿主目錄中的隱藏目錄.ssh/下 Enter passphrase (empty for no passphrase) : //設置私鑰的密碼 Enter same passphrase again: //確認輸入 1s -1 ~/.ssh/id_ ecdsa* //id_ ecdsa是私鑰文件,權限默認為600; id_ ecdsa.pub是公鑰文件,用來提供給SSH服務器
2、將公鑰文件上傳至服務器(兩種方法)
方法一
scp ~/.ssh/ id_ecdsa.pub root@192.168.200.10:/opt //在服務器中導入公鑰文本 mkdir .ssh cat /opt/id_ecdsa.pub >> ~/.ssh/authorized_keys cat .ssh/authorized_keys
方法二
cd ~/.ssh/ ssh-copy-id -i id_ecdsa.pub root@192.168.200.10 //此方法可直接在服務器的root用戶.ssh/目錄中導入公鑰文本
3、客戶端使用密鑰對驗證
ssh root@192.168.200.10 Enter passphrase for key '/home/root/.ssh/id_ecdsa': //輸入私鑰的密碼
ssh-agent bash ssh-add Enter passphrase for /root/.ssh/id_ecdsa: //輸入私鑰的密碼 ssh root@192.168.200.10
1、TCP Wrappers (TCP封套 )
將TCP服務程序“包裹”起來,代為監聽Tcp服務程序的端口,增加了一個安全檢測過程,外來的連接請求必須先通過這層安全檢測,獲得許可后才能訪問真正的服務程序
大多數Linux 發行版,TCP Wrappers 是默認提供的功能(rpm -q tcp_wrappers)
2、TCP Wrappers 保護機制的兩種實現方式
直接使用tcpd程序對其他服務程序進行保護,需要運行tcpd程序
由其他網絡服務程序調用libwrap.so.*鏈接庫,不需要運行tcpd程序。此方式的應用更加廣泛,也更有效率。
使用ldd命令可以查看程序的libwrap.so.*鏈接庫
ldd $ (which ssh)
3、TCP Wrappers的訪問策略
- TCPWrappers機制的保護對象為各種網絡服務程序,針對訪問服務的客戶端地址進行訪問控制
- 對應的兩個策略文件為/etc/hosts.allow和/etc/hosts.deny,分別用來設置允許和拒絕策略
格式
<服務程序列表>:<客戶端地址列表>
服務程序列表
- all:代表所有的服務
- 單個服務程序:如:“vsftpd”
- 多個服務程序組成的列表:如“vsftpd,sshd”
客戶端地址列表
- ALL:代表任何客戶端地址
- LOCAL:代表本機地址
多個地址以逗號分隔
- 允許使用通配符“*" 和“?" ,前者代表任意長度字符,后者僅代表一個字符
- 網段地址:如“192.168.80.*”或者192.168.208.0/255.255.255.0
- 區域地址:如". benet.com"匹配benet.com 域中的所有主機
TCP Wrappers機制的基本原則
- 首先檢查/etc/hosts.allow文件, 如果找到相匹配的策略,則允許訪問
- 否則繼續檢查/etc/hosts.deny文件,如果找到相匹配的策略,則拒絕訪問
- 如果檢查上述兩個文件都找不到相匹配的策略,則允許訪問
“允許所有,拒絕個別”
只需在/etc/hosts.deny文件中添加相應的拒絕策略
“允許個別,拒絕所有”
除了在/etc/hosts.allow中添加允許策略之外,還需要在/etc/hosts.deny文件中設置"ALL:ALL"的拒絕策略
//只希望從IP地址為192.168.200.11的主機或者位於192.168.80.0/24網段的主機訪問sshd服務,其他地址被拒絕 vim /etc/hosts.allow sshd:192.168.200.11,192.168.80.* vim /etc/hosts.deny sshd: ALL