SSH遠程訪問及控制
SSH(secure shell)是一種安全的通道協議,主要用來實現字符界面的遠程登錄、遠程復制等功能。SSH協議對通信雙方的數據傳輸進行了加密處理,其中包括用戶登錄時輸入的用戶口令,與早期的TELNET、RSH、RCP等應用相比,SSH協議提供了更好的安全性
配置OpenSSH服務端
在RHEL系統中,OpenSSH服務器的openssh等軟件包默認已經安裝,並已添加為系統服務,只需配置並啟動sshd服務,大部分用戶(擁有合法的登錄shell)都可以遠程登錄系統。sshd的配置文件位於/etc/ssh/sshd_config目錄下,正確調整相關配置項,有助於提高sshd遠程登錄的安全性
[root@localhost ~]# vim /etc/ssh/sshd_config Port 22 //默認端口號22,必要時可修改 ListenAddress 192.168.1.1 //監聽地址 Protocol 2 //使用SSH v2協議,比v1更安全 UseDNS no //禁用DNS反向解析,提高服務器響應速度 LoginGraceTime 2m //登錄驗證時間為2分鐘 PermitRootLogin yes //禁止root用戶登錄,用普通用戶登錄後,su切換為root更加安全 MaxAuthTries 6 //最大重試次數為6 PermitEmptyPasswords no //禁止空密碼用戶登錄 AllowUsers ysf [email protected] //當只允許某些用戶登錄時 DenyUsers yangshufan //當只禁止某些用戶登錄時,註意兩者不要同時使用 PasswordAuthentication yes //啟用密碼驗證 PubkeyAuthentication yes //啟用密鑰對驗證 AuthorizedKeysFile .ssh/authorized_keys //指定公鑰庫數據文件 [root@localhost ~]# service sshd reload //配置完後,需要更新服務 重新載入 sshd: [確定]
當密碼驗證、密鑰對驗證都啟用時,服務器將優先使用密鑰對驗證。對於安全性較高的服務器,建議禁止密碼驗證方式,只允許密鑰對驗證方式;若沒有特殊要求,則兩種都可以啟用
使用SSH客戶端程序
在Linux系統中,SSH客戶端默認已安裝,其中包括ssh、scp、sftp等命令。實際上,任何支持SSH協議的客戶端程序都可以與OpenSSH服務器進行通信,如Windows平臺中的Xshell、SecureCRT、Putty等圖形工具。
(1)ssh遠程登錄
通過ssh命令,可以遠程登錄sshd服務,為用戶提供一個安全的shell環境,以便對服務器進行管理和維護
[root@localhost ~]# ssh [email protected] //如果不是默認端口,需要使用"-p 端口號" Are you sure you want to continue connecting (yes/no)? yes //第一次連接,必須輸入yes [email protected]'s password: //輸入密碼 Last login: Thu Dec 28 05:01:52 2017 from 192.168.1.2 [ysf@localhost ~]$
(2)scp遠程復制
通過scp命令可以利用SSH安全連接與遠程主機互相復制文件
[root@localhost ~]# scp /etc/passwd [email protected]:/root/passwd.txt //將本地文件復制到遠程主機 [email protected]'s password: passwd 100% 1915 1.9KB/s 00:00 [root@localhost ~]# scp -r [email protected]:/home/ /opt //將遠程主機的home目錄復制到本地 [email protected]'s password: .bash_profile 100% 176 0.2KB/s 00:00 .bash_logout 100% 18 0.0KB/s 00:00 [root@localhost ~]#
(3)sftp安全FTP
通過sftp命令可以利用SSH安全連接與遠程主機上傳、下載文件,采用了與FTP類似的登陸過程和交互式環境,便於管理資源
[root@localhost ~]# sftp [email protected] Connecting to 192.168.1.1... [email protected]'s password: sftp> help sftp> bye [root@localhost ~]#
使用密鑰對驗證SSH的方式
密鑰對驗證方式可以為遠程登錄提供更好的安全性,下面將介紹在Linux服務器、客戶機中構建密鑰對驗證SSH體系的基本過程,如下圖所示:
1. 在客戶機創建密鑰對
[yang@localhost ~]$ ssh-keygen -t rsa //ssh-keygen工具為當前用戶創建密鑰對文件,rsa為加密算法,也可以為dsa加密算法 Generating public/private rsa key pair. Enter file in which to save the key (/home/yang/.ssh/id_rsa): //指定私鑰位置,按Enter鍵確定 Created directory '/home/yang/.ssh'. Enter passphrase (empty for no passphrase): //設置私鑰密碼,也可以設置為空,實現無密碼登錄,但使用密碼更加安全 Enter same passphrase again: //確認密碼 Your identification has been saved in /home/yang/.ssh/id_rsa. [yang@localhost ~]$ ls -lh ~/.ssh/id_rsa* //確認生成的密鑰文件 -rw-------. 1 yang yang 1.8K 12月 29 08:47 /home/yang/.ssh/id_rsa //私鑰文件,不能泄露 -rw-r--r--. 1 yang yang 408 12月 29 08:47 /home/yang/.ssh/id_rsa.pub //公鑰文件,用來提供給服務器
2. 將公鑰上傳至服務器
3. 在服務器中導入公鑰文本
上面兩個步驟有兩種方式完成導入:
方式一:命令格式如下
ssh-copy-id -i 公鑰文件 目標主機用戶@目標主機
[yang@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected] [email protected]'s password: //輸入ysf的密碼 Now try logging into the machine, with "ssh '[email protected]'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. [ysf@localhost ~]# //驗證密碼後,會將公鑰自動添加到宿主目錄下的.ssh/authorized_keys
方式二:使用FTP、scp等方式上傳到服務器,在將文件導入到目標用戶的公鑰數據庫
[yang@localhost ~]$ scp .ssh/id_rsa.pub [email protected]:/tmp //使用scp命令上傳到服務器 [email protected]'s password: //輸入服務器root的密碼 Could not chdir to home directory /home/ysf: No such file or directory id_rsa.pub 100% 408 0.4KB/s 00:00 [yang@localhost ~]$ ssh [email protected] //遠程登錄到服務器 [email protected]'s password: [root@localhost ~]# mkdir /home/ysf/.ssh //將公鑰導入到公鑰數據庫 [root@localhost ~]# cat /tmp/id_rsa.pub >> /home/ysf/.ssh/authorized_keys [root@localhost ~]# ls -l /home/ysf/.ssh/authorized_keys //註意:公鑰庫文件的權限必須是root用戶或宿主用戶 -rw-rw-r--. 1 ysf ysf 408 12月 29 10:01 .ssh/authorized_keys
4. 在客戶端上使用密鑰對驗證
[yang@localhost ~]$ ssh [email protected] Enter passphrase for key '/home/yang/.ssh/id_rsa': //輸入私鑰密碼,如未設置密碼,則直接登錄服務器 Last login: Fri Dec 29 10:57:12 2017 from 192.168.1.2 [ysf@localhost ~]$
TCP Wrappers訪問控制
TCP Wrappers將其他TCP服務程序包裹起來,增加了一個安全檢測過程,外來的連接請求必須先通過這層安全檢測,獲得許可後才能訪問真正的服務程序。對於大多數Linux發行版,TCP Wrappers是默認提供的功能。
1. 策略的配置格式
TCP Wrappers機制的保護對象為各種網絡服務程序,針對訪問服務程序的客戶機地址進行訪問控制。對應的策略文件為/etc/hosts.allow和/etc/hosts.deny,分別提供允許和拒絕的要求
配置格式如下:
服務程序列表:客戶機地址列表
其中,
(1)服務程序列表分為以下幾類:
ALL:代表所有服務
單個服務程序:如“sshd”
多個服務程序組成的列表:如“httpd,sshd”,以逗號分隔
(2)客戶機地址列表分為以下幾類:
ALL:代表任何客戶機服務
LOCAL:代表本機地址
單個IP地址:如“192.168.1.1”
網絡段地址:如“192.168.1.0/255.255.255.0”或者“192.168.1.”
域名:如“.ysf.com”匹配ysf.com域中的所有主機
通配符*、?:前者代表任意長度字符,後者僅代表一個字符
多個客戶機地址組成的列表:如“192.168.1.1,172.16.10.,.ysf.com”
2. 訪問控制的基本原則
(1)先檢查hosts.allow,找到匹配則允許訪問
(2)否則再檢查hosts.deny,找到則拒絕訪問
(3)若兩個文件中均無匹配策略,則默認允許訪問
實際使用TCP Wrappers機制時,較為寬松的策略可以是“允許所有,拒絕個別”,較為嚴格的可以是“允許個別,拒絕所有”。前者只需在hosts.deny文件中添加相應的策略;而後者需要在hosts.allow中添加允許策略外,還要在hosts.deny文件中添加“ALL:ALL”的拒絕策略
例如:
1)僅允許從主機61.63.65.67,網段192.168.2.0/24 地址訪問sshd服務 ,禁止其他所有地址訪問受保護的服務
2)拒絕192.168.2.2訪問httpd服務
[root@localhost ~]# vim /etc/hosts.allow sshd:61.63.65.67,192.168.2.* [root@localhost ~]# vim /etc/hosts.deny sshd:ALL httpd:192.168.2.2
SSH遠程訪問及控制