一、ssh介紹
1、什么是 ssh
ssh 是 Secure Shell 的縮寫,是一個建立在應用層上的安全遠程管理協議。ssh 是目前較為可靠的傳輸協議,專為遠程登錄會話和其他網絡服務提供安全性。利用 ssh 協議可以有效防止遠程管理過程中的信息泄露問題。 ssh可用於大多數UNIX和類UNIX操作系統中,能夠實現字符界面的遠程登錄管理,它默認使用22端口,采用密文的形式在網絡中傳輸數據,相對於通過明文傳輸的Telnet協議,具有更高的安全性。
2、ssh的登錄驗證
ssh 提供了基於賬戶密碼(口令)和密鑰對兩種登錄驗證方式,這兩者都是通過密文傳輸數據的。
賬戶密碼驗證:
登錄格式
ssh 用戶名@IP地址
密鑰對驗證:
- 首先需要在 Client 上創建一對密鑰,並且需要把公鑰放在需要訪問的 Server 上。
- 當 Client 需要連接 Server 時,Client 端的軟件就會向 Server 端發出登錄請求,請求使用密鑰對中的的公鑰進行安全驗證
- Server 收到請求之后,會在該用戶的家目錄下查詢公鑰文件,拿 Client 發送過來的公鑰和自己家目錄下的公鑰 進行比較
- 如果兩個公鑰一致,Server 就用公鑰加密“challenge(質疑)”,並把它發送給 Client 軟件。Client 收到加 密內容之后,使用本地的私鑰進行解密,再把解密結果發送給 Server 端,Server 端驗證成功后,允許登錄。
二、ssh服務
1、環境准備
准備好兩台Linux操作系統的主機,且將其主機名更改為不同,便於后面的密鑰對登錄。
centos6 更改主機名
[root@centos ~]# vim /etc/sysconfig/network
HOSTNAME=centos-11
臨時關閉防護功能:
iptables -F #清空防火牆規則
setenforce 0 #臨時關閉SELinux
永久關閉防護功能:
chkconfig iptables off #設置防火牆開機不自啟動
sed -i ‘7s/enforcing/disabled/’ /etc/selinux/config #永久關閉SELinux
#注意:以上兩條命令執行后,需要重啟服務器才能生效
2、密鑰對登錄配置
1、linux主機間進行密鑰對登錄
1、客戶端生成密鑰對文件 ssh-keygen -t rsa -b 2048
-t 指定加密類型(rsa/dsa等)
-b 指定密鑰對加密長度
詢問1:執行過程中會詢問保存位置,一般默認保存在當前用戶家目錄下的.ssh/目錄下
詢問2:是否對密鑰文件進行加密
加密:若加密,則在調用密鑰文件時需要先驗證密鑰的密碼,密碼正確才能使用密鑰文件
不加密:若不加密,則密鑰文件可以直接被調用,整個登錄驗證過程無需輸入任何密碼,即為免密登錄
[root@centos-11 ~]# ssh-keygen -t rsa -b 2048
2、將公鑰文件上傳至服務器端 ssh-copy-id 用戶名@服務器IP地址
[root@centos-11 ~]# ssh-copy-id root@10.10.10.12
#該用戶名和要用來登錄服務器的用戶名一致
3、客戶端嘗試登錄服務器 ssh 用戶名@服務器IP地址
[root@centos-11 ~]# ssh root@10.10.10.12
Last login: Fri Dec 20 20:41:00 2019 from 10.10.10.1
#密鑰對驗證優先級大於賬戶密碼驗證
2、windows 密鑰對登錄 linux主機
由於Windows不能直接生成密鑰對,所以需要借助工具。我使用的是xshell
1、使用Xshell自帶的密鑰對生成向導生成密鑰對
一直下一步,其中有一步是,設置密碼為本地私鑰。看情況進行選擇。最后一步復制公鑰無需保存。
2、將公鑰導入Linux主機的指定用戶下的指定公鑰配置文件內 后面用哪個用戶登錄就放在誰的用戶家目錄下,找到 .ssh 目錄,然后在里面創建 authorized_keys 文件,並且將公鑰寫入。
[root@centos-12 ~]# vim .ssh/authorized_keys
#粘貼你剛才復制的公鑰信息,另起一行
3、使用windows嘗試登錄指定用戶
3、禁止root用戶遠程登錄
root 在系統中是一個可以為所欲為的角色,我們可以在平時的操作中用普通用戶操作,在有需要修改一些系統設置的時候再從普通用戶切換到 root 用戶,這樣可以最大限度的避免因為誤操作而對系統造成破壞,同時也可以避免黑客在暴力破解后直接使用 root 用戶登錄系統,一般在遠程登錄管理上我們會禁止直接使用 root 用戶登錄。
配置文件:/etc/ssh/sshd_config
選項:
PermitRootLogin no
4、修改默認端口
修改默認端口:ssh 作為一個用來遠程管理服務器的工具,需要特別的安全,默認情況下使用TCP的22端口,若不進行修改,很容易被利用遭到攻擊,所以我們一般都會修改端口,盡量修改一個高位端口(范圍1-65535)
配置文件:/etc/ssh/sshd_config
Port 55235
linux 主機登錄
ssh -p 55235 root@10.10.10.12
xshell 登錄
ssh root@10.10.10.12:55235
5、ssh服務相關服務
scp:安全的遠程文件復制命令
scp是secure copy的簡寫,用於在Linux下進行遠程拷貝文件的命令,類似於命令有cp,scp傳輸是加密的,所以可能會稍微影響一點速度。另外,scp還非常不占資源,不會提高多少系統負荷。
格式:
scp 本地文件 用戶名@服務器IP:目錄
scp test.txt root@10.10.10.12:/tmp
-P 端口 #若端口不是默認22,則需要使用此格式指定端口
sftp:安全的文件傳輸協議
sftp是Secure FileTransferProtocol的縮寫,安全文件傳送協議。sftp與ftp有着幾乎一樣的語法和功能。由於這種傳輸方式使用了加密/解密技術,所以sftp比ftp更安全一些,但傳輸效率比普通的FTP要低得多.
格式:
sftp 用戶名@服務器IP
-oPort=端口 #若端口不是默認22,則需要使用此格式指定端口
交互命令:
help:查看在交互模式下支持哪些命令
pwd/lpwd:pwd是查看服務器所在路徑;lpwd是查看客戶端所在路徑
ls/lls:ls是查看服務器當前目錄下的文件列表;lls是查看客戶機當前所在路徑的所有文件列表
put:將客戶機中的指定文件上傳到服務器端
get:將服務器端的指定文件下載到客戶機的當前所在目錄
rm:刪除掉服務器端的指定文件
quit:退出sftp的交互模式,斷開和服務器之間的連接
6 TCP Wrappers(簡單防火牆)
1、介紹
TCP_Wrappers是一個工作在第四層(傳輸層)的的安全工具,對有狀態連接(TCP)的特定服務進行安全檢測並實現訪問控制,界定方式是凡是調用libwrap.so庫文件的的程序就可以受TCP_Wrappers的安全控制。它的主要功能就是控制誰可以訪問,常見的程序有rpcbind、vsftpd、sshd,telnet。
簡單來說 TCP Wrappers 只對走tcp協議的一些服務起到控制作用。
判斷方式:
1. 查看對應服務命令所在位置 which sshd
2. 查看指定命令執行時是否調用libwrap.so文件 ldd /usr/sbin/sshd | grep libwrap.so
[root@centos-12 ~]# which sshd
/usr/sbin/sshd
[root@centos-12 ~]# ldd /usr/sbin/sshd | grep libwrap.so
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fd38c0d1000)
2、工作原理
以ssh為例,每當有ssh的連接請求時,先讀取系統管理員所設置的訪問控制文件,符合要求,則會把這次連接原封不動的轉給ssh進程,由ssh完成后續工作;如果這次連接發起的ip不符合訪問控制文件中的設置,則會中斷連接請求,拒絕提供ssh服務。
3、配置
TCP_Wrappers的使用主要是依靠兩個配置文件/etc/hosts.allow, /etc/hosts.deny,以此實現訪問控制,默認情況下,/etc/hosts.allow,/etc/hosts.deny什么都沒有添加,此時沒有限制 。
service_list@host: client_list
配置文件編寫規則:
service_list: 是程序(服務)的列表,可以是多個,多個時,使用,隔開
@host:設置允許或禁止他人從自己的哪個網口進入。這一項不寫,就代表全部
client_list:是訪問者的地址,如果需要控制的用戶較多,可以使用空格或,隔開
內置ACL:ALL(所有主機)、LOCAL(本地主機)
以ssh服務代碼示例:
拒絕單個 IP 使用 ssh 遠程連接:
配置文件:
hosts.allow:空着
hosts.deny:sshd:10.10.10.1
拒絕某一網段使用 ssh 遠程連接:
hosts.allow:空着
hosts.deny:sshd:10.10.10.
僅允許某一 IP 使用 ssh 遠程連接:
hosts.allow:sshd:10.10.10.11
hosts.deny:sshd:ALL