ssh服務的最佳實踐方案:
1.更換服務端口,不要使用默認的22號端口;
2.禁止使用sshv1;
3.合理的設置登錄用戶的黑名單和白名單;
4.設置空閒會話的超時時間,將其改的短一些;
5.需要利用防火牆來配合設置ssh的安全訪問規則;
6.監聽固定的IP地址而不是0.0.0.0;
7.如果必須使用口令認證機制,則需要使用足夠複雜的密碼;
~]# tr -dc A-Za-z0-9 < /dev/urandom | head -c 30 | xargs
~]# openssl rand -base64 30 | head -c 30 | xargs
8.建議最好使用基於密鑰的認證機制;
9.禁止用戶使用空密碼登錄;
10.禁止root用戶直接進行遠程登錄;
11.限制ssh的密碼失敗頻度和併發數;
12.做好日誌記錄,並經常分析日誌內容;
OpenSSH:
在linux系統上實現ssh協議的應用程序;實施遠程登錄服務器端;
登錄:login,登入
計算機終端設備通過輸入用戶賬戶標識和與之對應的口令的方式,被計算機驗證的過程就是登錄;
終端:Terminal,完整的稱呼是"終端設備",是計算機中的外圍設備,主要用於用戶信息的輸入和計算機計算結果的輸出;
終端的分類:
物理終端:計算機本身的控制檯設備;通常將其標識爲"pty";在現代計算機上,物理終端與早期的計算機上的物理終端的意義不一樣了。在現在的Linux系統上,物理終端設備被映射到/dev/console上,所有內核輸出的信息都輸出到console終端,除此之外,其他用戶進程輸出的信息一般都輸出到虛擬終端或僞終端上;
虛擬終端:在現代的計算機中,通常將鍵盤+顯示器組合稱作"虛擬終端"或者"虛擬控制檯",即一個虛擬的終端設備;通常將其標識爲"tty";
串行終端:如果服務器上沒有裝配顯卡設備,就可以使用串行終端設備連接計算機,通常將其標識爲"ttyS";
模擬終端:僞終端,通過網絡客戶端工具或圖形終端下開啓的命令行終端,都稱爲僞終端;通常將其標識爲"pts"
遠程登錄:
Telnet:
C/S結構,默認不允許管理員直接實施遠程登錄;
Client:telnet
Server:telnet-server
Socket:23/TCP
安裝telnet-server, telnet程序包,本地光盤yum倉庫中;
CentOS 5,6:
關閉防火牆和SELinux;
service iptables stop
setenforce 0
啓動telnet服務:
chkconfig telnet on
service xinetd restart|reload
檢測服務是否啓動:
ss -tnl | grep :23
CentOS 7:
關閉防火牆和SELinux;
systemctl disable firewalld.service
systemctl stop firewalld.service
iptables -F
setenforce 0
啓動telnet服務:
systemctl start telnet.socket
檢測服務是否啓動:
ss -tnl | grep :23
注意:telnet服務出於安全考慮,默認不允許root用戶直接登錄;但可以使用普通用戶登錄之後,利用su命令切換至root用戶登錄;
SSH:Secure SHell;
其目的旨在取代較早的非常不安全的telnet協議,實現安全的遠程登錄;
C/S結構;
Client:Xshell,OpenSSH(ssh,scp,sftp),SecureCRT,sshsecureshellclient,putty;
Server:OpenSSH(sshd),dropbear
Socket:22/TCP
SSH提供的認證方式:
基於口令的認證:
使用遠程服務器上的有效用戶賬戶和該用戶的口令,進行身份認證;
需要在網絡中傳遞被加密的用戶名和口令信息;有被攔截和破解的風險;
基於密鑰的認證:
用戶在客戶端提供一對密鑰,私鑰保存在客戶端,公鑰保存在遠程服務器的某個用戶的家目錄下;
使用私鑰加密一段數據,如果服務器可以使用對應的公鑰進行解密,則說明認證成功,可以繼續後續通信;
在整個過程中不涉及用戶名和密碼等敏感信息的傳遞;
SSH協議:
v1:不安全,禁用;
v2:當前流行的安全應用協議;
Openssh
openssh應用程序的組成:
服務器端:
應用程序
sshd
配置文件
/etc/ssh/sshd_config
客戶端:
應用程序:
ssh, scp, sftp
配置文件:
/etc/ssh/ssh_config
客戶端程序:
ssh命令:
ssh - OpenSSH SSH client (remote login program)
ssh [options...] [user@]hostname [command]
常用選項:
-l login_name:指定此次使用哪個用戶進行遠程登錄;如果使用了該選項,則hostname前面就不能再使用"user@";
注意:如果既沒有指定此選項,有沒有在hostname前面指定"user@"用戶名前綴,SSH協議的客戶端程序會默認使用客戶端本地登錄的用戶賬戶作爲此次遠程登錄的用戶名;
-p port:指明訪問服務器的哪個具體的服務端口;省略該選項,默認是22;
-b bind_address:指明此次訪問服務器時的源IP地址;省略該選項,則從當前客戶端所有有效的IP地址中,選擇一個;
-X:支持X11轉發功能,當客戶端使用SSH協議遠程連接到服務器時,可以在客戶端打開圖形界面的配置窗口;
-Y:支持受信任的X11轉發;功能與-X相似;
-o option=value:
在實施遠程連接時,引入特定的功能或以特定的方式對服務器進行訪問;
注意:-o選項所能夠使用的配置內容非常複雜,通常會將常用的此類功能選項直接寫到ssh客戶端的配置文件中(/etc/ssh/ssh_config);
格式爲:
HOST pattern
OPTION1 value1
OPTION2 value2
...
基於密鑰的認證機制:
1.創建密鑰對兒:
ssh-keygen命令:
ssh-keygen — authentication key generation, management and conversion
格式:
ssh-keygen [-q] [-b bits] [-t type] [-P passphrase] [-f output_keyfile]
常用選項:
-q:安靜模式;
-b bits:指定創建的密鑰的長度;
RSA:最少768bits,默認是2048bits;
DSA:顯式給出1024bits;
ECDSA:256bits, 384bits, 521bits;
ED25519:只是使用固定長度的密鑰而忽略-b選項指定內容;
-t type:指明公鑰加密算法的類型;
在SSHv2協議中可以使用上述四種算法;
-P passphrase:指定加密私鑰文件的口令;
-f output_keyfile:生成的密鑰文件保存的路徑;
示例:
~]# ssh-keygen -t rsa -P '123456' -f .ssh/id_rsa
2.將上一步驟中生成的公鑰複製到目標服務器指定用戶的家目錄中:
ssh-copy-id命令:
示例:
~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
3.登錄測試:
在客戶端執行下列命令:
~]# ssh -l USER hostname
~]# ssh USER@hostname
scp命令:基於ssh協議的cp命令;安全複製命令;
scp - secure copy (remote file copy program)
兩種使用情形:
推送:PUSH
scp [option...] /PATH/FROM/LOCAL_FILE [user@]hostname:/PATH/TO/DESTINATION_REMOTE_FILE
拉取:PULL
scp [option...] [user@]hostname:/PATH/FROM/REMOTE_FILE /PATH/TO/LOCAL_FILE
常用選項:
-r:遞歸複製,可以複製目錄;
-p:保留源文件中的權限信息;
-q:安靜模式;
-P port:指定遠程主機的sshd進程監聽的服務端口;
sftp:
FTP over ssh
FTP over ssl(ftps)
C/S架構:
S:sftp-server, 由sshd進程管理的一個子服務項目,是sshd的一個子系統;在CentOS中默認是開啓的;
C:sftp命令
sftp [user@]HOSTNAME
sftp> help
sftp> get
sftp> put
...
sshd程序:
配置文件:/etc/ssh/sshd_config
配置指令的格式:
指令 值
常用的指令:
Port 22:指明sshd服務進程要監聽的端口號;建議改爲非22號端口;
ListenAddress 0.0.0.0:指明sshd服務進程監聽的IP地址,建議某個固定的IP地址;0.0.0.0表示當前主機上所有的可用IP地址;
Protocol 2:ssh協議的版本;
LoginGraceTime 2m:登錄時,輸入密碼操作的最大時長;
PermitRootLogin yes:是否運行root用戶直接進行遠程登錄;在生產環境中,強烈建議禁用此功能;
PasswordAuthentication yes:是否開啓口令認證機制;
UseDNS no:是否允許使用DNS反向解析主機名;建議關閉此功能;
AllowUsers user1 user2 ...:設置登錄用戶的白名單;
AllowGroups group1 group2 ...:設置組的白名單;
DenyUsers user1 user2 ...:設置登錄用戶的黑名單;
DenyGroups group1 group2 ...:設置組的黑名單;
如果對此配置文件中的指令進行了修改,那必須要讓sshd進程重新讀取配置文件的內容才能使新配置生效;
CentOS 5、6:
~]# service sshd reload
CentOS 7:
~]# systemctl reload sshd