首頁 > 軟體

CentOS 7.4中的遠端存取控制

2020-06-16 16:29:15

一、SSH遠端管理

SSH是一種安全通道協定,主要用來實現字元介面的遠端登入、遠端複製等功能。SSH協定對通訊雙方的資料傳輸進行了加密處理,其中包括使用者登入時輸入的使用者口令。與早期的Telent、RSH、RCP、等應用相比,SSH協定提供了更好的安全性。

1、設定OpenSSH伺服器端

CentOS 7.4系統中,OpenSSH伺服器由openssh、openssh-server等軟體包提供(預設已安裝),並已將sshd新增為標準的系統服務。執行“systemctl start sshd”命令即可啟動sshd服務,包括root在內的大部分使用者都可以遠端登入系統。sshd服務的組態檔預設位於/etc/ssh/sshd_config目錄下,正確調整相關設定項,可以進一步提高sshd遠端登入的安全性。

1)服務監聽選項

sshd服務使用的預設埠號為22,必要時建議修改此埠號,並指定監聽服務的具體IP地址,以提高在網路中的隱蔽性。V2版本要比V1版本的安全性要更好,禁用DNS反向解析可以提高伺服器的響應速度。

[root@centos01 ~]# vim /etc/ssh/sshd_config   <!--編輯sshd主組態檔-->
17 Port 22         <!--監聽埠為22-->
19 ListenAddress 192.168.100.10    <!--監聽地址為192.168.100.10-->
21 Protocol 2        <!--使用SSH V2協定-->
118 UseDNS no    <!--禁用DNS反向解析-->
......             <!--此處省略部分內容-->
[root@centos01 ~]# systemctl restart sshd    <!--重新啟動sshd服務-->

2)使用者登入控制

sshd服務預設允許root使用者登入,但在Internet中使用時是非常不安全的。關於sshd服務的使用者登入控制,通常應禁止root使用者或密碼為空的使用者登入。另外,可以限制登入驗證的時間(預設為2分鐘)及最大重試次數,若超過限制後仍未能登入則斷開連線。

[root@centos01 ~]# vim /etc/ssh/sshd_config      <!--編輯sshd主組態檔-->
 37 LoginGraceTime 2m       <!--登入驗證時間為2分鐘-->
 38 PermitRootLogin yes      <!--禁止root使用者登入-->
 40 MaxAuthTries 6               <!--最大重試次數為6-->
 67 PermitEmptyPasswords no       <!--禁止空密碼使用者登入-->
 ......             <!--此處省略部分內容-->
[root@centos01 ~]# systemctl restart sshd           <!--重新啟動sshd服務-->

2、登入驗證方式

對於伺服器的遠端管理,除了使用者賬戶的安全控制以外,登入驗證的方式也非常重要。sshd服務支援兩種驗證方式——密碼驗證、金鑰對驗證,可以設定只使用其中一種方式,也可以兩種方式都啟用。

  • 密碼驗證:對伺服器中本地系統使用者的登入名稱、密碼進行驗證。這種方式使用最為簡便,但從用戶端角度來看,正在連線的伺服器有可能被假冒;從伺服器角度來看,當遭遇密碼窮舉第三者時防禦能力比較弱。
  • 金鑰對驗證:要求提供相匹配的金鑰資訊才能通過驗證。通常先在用戶端中建立一對金鑰檔案(公鑰、私鑰),然後將公鑰檔案放到伺服器中的指定位置。遠端登入時,系統將使用公鑰,私鑰進行加密/解密關聯驗證,大大增強了遠端管理的安全性。該方式不易被假冒,且可以免互動登入,在Shell中被廣泛使用。

當密碼驗證,金鑰對驗證都啟用時,伺服器將優先使用金鑰對驗證。對於安全性要求較高的伺服器,建議將密碼驗證方式禁用,只允許啟用金鑰對驗證方式;若沒有特殊要求,則兩種方式都可以啟用。

[root@centos01 ~]# vim /etc/ssh/sshd_config <!--編輯sshd主組態檔-->
 43 PubkeyAuthentication yes         <!--啟用金鑰對驗證-->
 47 AuthorizedKeysFile      .ssh/authorized_keys <!--指定公鑰庫檔案-->
 66 PasswordAuthentication yes        <!--啟用密碼驗證-->
......              <!--此處省略部分內容-->
[root@centos01 ~]# systemctl restart sshd         <!--重新啟動sshd服務-->

其中,公鑰檔案用來儲存多個用戶端上傳的公鑰文字,以便與用戶端原生的私鑰檔案進行匹配。

二、使用SSH用戶端程式

在Centos 7.4系統中,OpenSSH用戶端由openssh-clients軟體包提供(預設已安裝),其中包括ssh遠端登入命令,以及scp、sftp遠端複製和檔案傳輸命令等。

1、命令程式ssh遠端登入

通過ssh命令可以遠端登入sshd服務,為使用者提供一個安全的Shell環境,以便對伺服器進行管理和維護。使用時應指定登入使用者、目標主機地址作為引數。範例如下:

[root@centos02 ~]# ssh root@192.168.100.10
root@192.168.100.10's password: 
Last login: Mon Nov 11 19:02:50 2019 from 192.168.100.254
[root@centos01 ~]# 
[root@centos01 ~]# 
[root@centos01 ~]# ssh root@192.168.100.10
The authenticity of host '192.168.100.10 (192.168.100.10)' can't be established.
ECDSA key fingerprint is SHA256:PUueT9fU9QbsyNB5NC5hbSXzaWxxQavBxXmfoknXl4I.
ECDSA key fingerprint is MD5:6d:f7:95:0e:51:1a:d8:9e:7b:b6:3f:58:51:51:4b:3b.
Are you sure you want to continue connecting (yes/no)? yes   <!--接受金鑰-->
Warning: Permanently added '192.168.100.10' (ECDSA) to the list of known hosts.
root@192.168.100.10's password:     <!--輸入密碼-->
Last login: Mon Nov 11 19:03:08 2019 from 192.168.100.20
[root@centos01 ~]# who         <!--確認當前使用者-->
root     pts/1        2019-11-11 19:03 (192.168.100.20)
root     pts/2        2019-11-11 19:04 (192.168.100.10)

如果sshd伺服器使用了非預設的埠(如2222),則在登入時必須通過“-p”選項指定埠號。範例如下:

[root@centos01 ~]# vim /etc/ssh/sshd_config<!--修改ssh主組態檔-->
Port 2222          <!--修改監聽埠號為2222-->
[root@centos01 ~]# systemctl restart sshd   <!--重新啟動sshd服務-->
[root@centos02 ~]# ssh -p 2222 root@192.168.100.10     <!--用戶端登入ssh-->
root@192.168.100.10's password:          <!--輸入密碼-->
Last login: Mon Nov 11 19:20:28 2019 from 192.168.100.10
[root@centos01 ~]#           <!--成功登入-->

2、scp遠端複製

通過scp命令可以利用SSH安全連線與遠端主機相互複製檔案,使用scp命令時,除了必須指定複製源、目標之外,還應指定目標主機地址、登入使用者,執行後根據提示輸入驗證口令即可。範例如下:

[root@centos02 ~]# scp
root@192.168.100.10:/etc/ssh/sshd_config ./  
         <!--將遠端主機資料複製到本地資料,儲存在當前位置-->
root@192.168.100.10's password:      <!--輸入密碼-->
sshd_config                   100% 3910     3.6MB/s   00:00    
[root@centos02 ~]# scp -r ./sshd_config
root@192.168.100.10:/opt     
          <!--將本地資料上傳到遠端主機目錄的opt中-->
root@192.168.100.10's password:      <!--輸入密碼-->
sshd_config                   100% 3910     1.2MB/s   00:00    

3、sftp安裝FTP

通過sftp命令可以利用SSH安全連線與遠端主機上傳、下載檔案,採用了與FTP類似的登入過程和互動環境,便於目錄資源管理。範例如下:

[root@centos01 ~]# cd /opt/       <!--進入opt目錄-->
[root@centos01 opt]# sftp root@192.168.100.20    <!--登入sftp-->
root@192.168.100.20's password:      <!--輸入密碼-->
Connected to 192.168.100.20.
sftp> pwd        <!--檢視用戶端登入sftp的位置預設在宿主目錄-->
Remote working directory: /root
sftp> put sshd_config       <!--上傳資料到遠端主機-->
Uploading sshd_config to /root/sshd_config
sshd_config                   100% 3910     6.4MB/s   00:00    
sftp> get sshd_config         <!--下載資料到本地-->
Fetching /root/sshd_config to sshd_config
/root/sshd_config             100% 3910     3.6MB/s   00:00    
sftp> exit                  <!--退出登入-->

三、構建金鑰對驗證的SSH體系

金鑰對驗證方式可以遠端登入提供更好的安全性。在Linux伺服器、用戶端中構建金鑰對驗證SSH體系的基本過程。如下圖所示,整個過程包括四步,首先要在SSH用戶端以zhangsan使用者身份建立金鑰對,並且要將建立的公鑰檔案上傳至SSH伺服器端,然後要將公鑰資訊匯入伺服器端的目標使用者lisi的公鑰資料庫,最後以伺服器端使用者lisi的身份登入驗證。

1、在用戶端建立金鑰對

在用戶端中,通過ssh-keygen工具為當前使用者建立金鑰對檔案。可用的加密演算法為ECDSA或DSA(ssh-keygen命令的“-t”選項用於指定演算法型別)。範例如下:

[root@centos02 ~]# ssh-keygen -t dsa     <!--建立金鑰對-->
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):   <!--指定私鑰位置-->
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):  <!--設定私鑰短語-->
Enter same passphrase again:        <!--確認所設定的短語-->
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:zv0EdqIuOfwSovN2Dkij08y9wZ0f1+IyhY7LFNKKzkk root@centos02
The key's randomart image is:
+---[DSA 1024]----+
|                 |
|                 |
|                 |
|     .           |
|  o . o S.+ .    |
| * *.+.=.+.=     |
|o E.*o+==.+ o    |
| =o..*Oo++ +     |
|  ++oo+*+o. .    |
+----[SHA256]-----+
[root@centos02 ~]# ls -lh ~/.ssh/id_dsa*  <!--確認生成的金鑰檔案-->
-rw------- 1 root root 668 11月 12 16:11 /root/.ssh/id_dsa
-rw-r--r-- 1 root root 603 11月 12 16:11 /root/.ssh/id_dsa.pub

新生成的金鑰對檔案中,id_das是私鑰檔案,許可權預設為600,對於私鑰檔案必須妥善保管,不能洩露給他人;id_dsa.pub是公鑰檔案,用來提供給ssh伺服器。

2、將公鑰檔案上傳至伺服器

將上一步生成的公鑰檔案上傳至伺服器,並部署到伺服器端使用者的公鑰資料庫中。上傳公鑰檔案時可以選擇SCP、FTP、HTTP甚至傳送E-mail等任何方式。

root@centos02 ~]# ssh-copy-id -i ./.ssh/id_dsa.pub 
root@192.168.100.10 <!--將公鑰檔案上傳至伺服器並匯入公鑰文字-->
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "./.ssh/id_dsa.pub"
The authenticity of host '192.168.100.10 (192.168.100.10)' can't be established.
ECDSA key fingerprint is SHA256:PUueT9fU9QbsyNB5NC5hbSXzaWxxQavBxXmfoknXl4I.
ECDSA key fingerprint is MD5:6d:f7:95:0e:51:1a:d8:9e:7b:b6:3f:58:51:51:4b:3b.
Are you sure you want to continue connecting (yes/no)? yes   <!--輸入yes-->
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.100.10's password:      <!--輸入密碼-->

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.100.10'"
and check to make sure that only the key(s) you wanted were added.

3、在用戶端使用金鑰對驗證

當私鑰檔案(用戶端)、公鑰檔案(伺服器)均部署到位以後,就可以在用戶端中進行測試了。首先確認用戶端中當前的使用者為root,然後通過ssh命令以伺服器端使用者root的身份進行遠端登入。如果金鑰對驗證方式設定成功,則在用戶端將會要求輸入私鑰短語,以便呼叫私鑰檔案進行匹配(若未設定私鑰短語,則直接登入目標伺服器)。

[root@centos02 ~]# ssh root@192.168.100.10      <!--登入ssh伺服器-->
Last login: Tue Nov 12 16:03:56 2019 from 192.168.100.254
[root@centos01 ~]# who   <!--登入成功伺服器,檢視都有哪些使用者-->
root     pts/0        2019-11-12 17:35 (192.168.100.20)
root     pts/2        2019-11-12 16:03 (192.168.100.254)

IT145.com E-mail:sddin#qq.com