Linux遠程訪問及控制
一、SSH遠程管理
1. SSH遠程管理概述
SSH(Secure Shell)是一種安全通道協議,主要用來實現字符界面的遠程登錄、遠程復制等功能。
SSH協議對通信雙方的數據傳輸進行了加密處理,其中包括用戶登錄時輸入的用戶口令。因此SSH協議具有很好的安全性。
SSH客戶端通過網絡與SSH服務端建立連接,其具有以下兩個特點:
1.數據傳輸是加密的,可以防止信息泄露
2.數據傳輸是壓縮的,可以提高傳輸速度
常用的SSH客戶端工具有Putty、Xshell、Secure CRT等
SSH服務端工具為OpenSSH
2. OpenSSH概述
OpenSSH是實現SSH協議的開源軟件項目,適用於各種UNIX、Linux操作系統。
CentOS 7系統默認已安裝openssh相關軟件包,並已將sshd服務添加為開機自啟動。
執行“systemctl start sshd”命令即可啟動sshd服務
sshd服務使用的默認端口號為22
sshd服務的默認配置文件位於/etc/ssh/目錄下,ssh_config和sshd_config都是ssh服務器的配置文件,二者的區別在於前者是針對客戶端的配置文件,后者是針對服務端的配置文件。
3. 配置OpenSSH服務端
sshd_config配置文件的常用選項設置
vim /etc/ssh/sshd_config
Port 22 #監聽端口默認為22,可對其進行修改,增強服務器安全性
ListenAddress 0.0.0.0 #監聽地址為任意網段,也可以指定OpenSSH服務器的具體IP
LoginGraceTime 2m #登錄驗證時間為2分鍾
PermitRootLogin no #禁止root用戶登錄,禁止該選項可避免root用戶被暴力破解導致的安全隱患
MaxAuthTries 6 #最大重試次數為6
PermitEmptyPasswords no #禁止空密碼用戶登錄
UseDNS no #禁用DNS反向解析,可提高服務器的響應速度
AllowUsers aa bb cc@192.168.88.88 #只允許aa、bb、cc用戶登錄,並且wangwu用戶僅能夠從IP地址為192.168.88.88的主機遠程登錄,多個用戶以空格分隔
DenyUsers dd #禁止dd用戶登錄,用法與AllowUsers類似
注:AllowUsers與DenyUsers不要同時對同一用戶使用
4. sshd服務的驗證方式
sshd服務支持兩種驗證方式:
- 密碼驗證
對服務器中本地系統用戶的登錄名稱、密碼進行驗證。
使用簡便,同時也容易被暴力破解,生產環境中常常關閉該功能以確保服務器的登錄安全。 - 密鑰對驗證
要求提供相匹配的密鑰信息才能通過驗證。
通常先在客戶端中創建一對密鑰文件(公鑰、私鑰),然后將公鑰文件放到服務器中的指定為誒之。遠程登錄時,系統將使用公鑰、私鑰進行加密/解密關聯驗證。
可以有效的增強安全性,且可以通過設置進行免交互登錄。
可在sshd_config文件中對驗證方式進行設置
vim /etc/ssh/sshd_config
PasswordAuthentication yes #啟用密碼驗證
PubkeyAuthentication yes #啟用密鑰對驗證
AuthorizedKeysFile ./ssh/suthorized_keys #指定公鑰庫文件位置
注:當密碼驗證、密鑰對驗證都啟用時,服務器將優先使用密鑰對驗證。
5. 使用SSH客戶端程序
(1)ssh遠程登錄
格式為:ssh [選項] 用戶名@主機ip
例如:ssh -p 1234 aa@192.168.88.88 #使用aa用戶通過端口號1234遠程登錄主機192.168.88.88
當用戶第一次登錄SSH服務器時,必須接受服務器發來的SCDSA密鑰(根據提示輸入“yes”)后才能繼續驗證。接收的密鑰信息將保存到 ~/.ssh/known_hosts 文件中。密碼驗證成功后即可登錄目標服務器的命令行環境中了。
常用選項 | 說明 | 示例 |
---|---|---|
-p | 指定端口,若不指定則默認為22 | ssh -p 1234 aa@192.168.88.88 |
-l | 指定用戶名 | ssh -l aa 192.168.88.88,同ssh aa@192.168.88.88 |
-b | 指定源IP,通常在客戶端有多IP的情況下使用 | ssh -b 192.168.80.10 aa@192.168.88.88 |
(2)scp遠程復制
scp(secure copy)是linux系統下基於ssh登陸進行安全的遠程文件拷貝命令,是Linux之間復制文件和目錄的常用手段。相較於rcp,scp數據傳輸經過加密,而rcp是不加密的,因此scp可視為rcp的加強版。
命令格式為:scp [選項] 源文件 目標文件
例如:
scp aa@192.168.88.88:/etc/passwd /root/passwd88.txt #下行復制,將遠程主機192.168.88.88的passwd文件復制到本機的/root目錄下,並重命名為passwd88.txt
scp -r /etc/ssh/ aa@192.168.88.88:/root #上行復制,將本機的/etc/ssh目錄復制到遠程主機192.168.88.88
注:命令中的地址需以絕對路徑表示
常用選項 | 說明 |
---|---|
-1 | 使用ssh1協議 |
-2 | 使用ssh2協議 |
-4 | 使用IPv4尋址 |
-6 | 使用IPv6尋址 |
-B | 使用批處理模式,傳輸過程中不詢問傳輸口令或短語 |
-C | 允許壓縮 |
-p | 保留源文件的修改時間,訪問時間以及訪問權限等 |
-r | 遞歸復制整個目錄 |
-v | 顯示詳細輸出 |
-q | 不顯示傳輸進度條 |
-l | 限制傳輸帶寬,單位為Kbit/s |
-P | 指定傳輸端口號 |
(3)sftp
sftp(Secure FTP)由於使用了加密/解密技術,所以傳輸效率比普通FTP要低,但安全性更高,操作語法與ftp類似。
sftp aa@192.168.88.88
aa@192.168.88.88's password: #輸入密碼
Connected to 192.168.88.88.
sftp> get 文件名 #下載文件到ftp目錄
sftp> put 文件名 #上傳文件到ftp目錄
sftp> quit #退出登錄,也可用bye或exit
sftp下可使用命令 | 說明 |
---|---|
bye | 退出sftp |
cd path | 切換到“path”目錄 |
chgrp grp path | 將文件“path”的組更改為“grp” |
chmod mode path | 將文件“path”的權限更改為“mode” |
chown own path | 將文件“path”的所有者更改為“own” |
df [hi] [path] | 顯示當前目錄或包含“path”的文件系統 |
exit | 退出sftp |
get [-afpPrR] remote [local] | 下載文件 |
reget [-fPpRr] remote [local] | 繼續下載文件 |
reput [-fPpRr] [local] remote | 繼續上傳文件 |
help | 幫助 |
lcd path | 切換本地目錄到“path” |
lls [ls-options [path]] | 顯示本地目錄列表 |
lmkdir path | 創建本地目錄 |
ln [-s] oldpath newpath | 建立文件遠程鏈接,-s為軟鏈接 |
lpwd | 顯示本地工作當前目錄 |
ls [-1afhlnrSt] [path] | 顯示遠程目錄列表 |
lumask umask | 將本地掩碼設置為“umask” |
mkdir path | 創建遠程目錄 |
progress | 顯示進度 |
put [-aPpRr] local [remote] | 上傳文件 |
pwd | 顯示遠程工作目錄 |
quit | 退出sftp |
rename oldpath newpath | 重命名遠程文件 |
rm path | 刪除遠程文件 |
rmdir path | 刪除遠程目錄 |
symlink oldpath newpath | 建立遠程文件軟鏈接 |
version | 顯示sftp版本 |
!command | 在本地shell中執行“command” |
! | 回到本地shell |
? | 幫助 |
6. 密鑰對驗證的SSH體系
- 在客戶端創建密鑰對
通過ssh-keygen工具為當前用戶創建密鑰對文件。可用的加密算法為RSA、ECDSA、DSA等(ssh-keygen命令的“-t”選項用於指定算法類型)。
useradd aa
echo "aabbcc" | passwd --stdin aa
su -aa
ssh-keygen -t ecdsa #創建ecdsa密鑰對
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/aa/.ssh/id_ecdsa): #指定私鑰位置,回車將使用默認位置
Create directory '/home/aa/.ssh'. #生成的私鑰、公鑰文件默認放在宿主目錄中的影長目錄.ssh/下
Enter passphrase (Empty for no passphere): #設置私鑰密碼
Enter same passphrase again: #確認輸入
ls -l .ssh/id ecdsa* #id_ecdsa是私鑰文件,權限默認為600,id_ecdsa.pub是公鑰文件,用來提供給SSH服務器
- 將公鑰文件上傳至服務器
方法一:
scp ~/.ssh/id_ecdsa.pub root@192.168.80.10:/opt
方法二:
cd ~/.ssh/
ssh-copy-id -i id_ecdsa.pub root@192.168.80.10
注1:方法一上傳目標目錄需有用戶寫入權限
注2:方法二可直接在服務器的/root/.ssh/目錄中導入公鑰文本
- 在服務器中導入公鑰文本
mkdir /root/.ssh/
cat /opt/id_ecdsa.pub >> /root/.ssh/authorized_keys
- 在客戶端使用密鑰對驗證
ssh root@192.168.80.10
root@192.168.80.10's password: #輸入私鑰密碼
- 在客戶機設置ssh代理功能,實現免交互登錄
ssh-agent bash
ssh-add
Enter passphrase for /home/admin/.ssh/id_ecdsa: #輸入私鑰密碼
二、TCP Wrappers訪問控制
1. TCP Wrappers概述
(1)TCP Wrappers的作用
TCP Wrappers是一個將TCP服務程序“包裹”起來,代為監聽TCP服務程序的端口,增加了一個安全監測過程,外來的連接請求必須先通過這層安全監測,獲得許可后才能訪問真正的服務程序。
大多數Linux發行版,TCP Wrappers都是默認提供的功能,可使用命令"rpm -q tcp_wappers"查看是否已安裝。
(2)TCP Wrappers保護機制的實現方式
- 直接使用tcpd程序對其他服務程序進行保護,需要運行tcpd程序。
- 由其他網絡服務程序調用libwrap.so.*鏈接庫,不需要運行tcpd程序,此方式的應用更加廣泛也更有效率。
使用ldd命令可以查看程序的libweap.so.*鏈接庫
ldd $(which ssh vsftpd)
2. TCP Wrapper訪問策略
(1)TCP Wrappers的策略文件
TCP Wrappers機制的保護對象為各種網絡服務程序,針對訪問服務的客戶端地址進行訪問控制。
對應的兩個策略文件為/etc/osts.allow和/etc/hosts.deny,分別同來設置允許和拒絕的策略,即白名單與黑名單。
(2)策略文件的配置格式
<服務程序列表>:<客戶端地址列表>
-
服務程序列表
ALL:代表所有的服務
單個服務程序:如“vsftpd”
多個服務程序組成的列表:如“vsftpd,sshd” -
客戶端地址列表
ALL:代表任何客戶端地址
LOCAL:代表本機地址
多個地址以逗號想分割
允許使用通配符“*”和“?”,前者代表任意長度字符,后者僅代表一個字符
網段地址,如192.168.88.或者192.168.88.0/255.255.255.0
區域地質,如“.abc.com”匹配abc.com域中的所有主機
(3)TCP Wrappers機制的基本原則
首先檢查/etc/hosts.allow文件,如果找到相匹配的策略,則允許訪問;
否則繼續查看/etc/hosts.deny文件,如果找到相匹配策略,則拒絕訪問;
如果檢查上述兩個文件都找不到相匹配的策略,則允許訪問。
(4)訪問策略設置
訪問需求 | 具體操作 |
---|---|
允許所有,拒絕個別 | 只需在/etc/hosts.deny文件中添加相應的拒絕策略 |
允許個別,拒絕所有 | 除了在/etc/hosts.allow中添加允許策略之外,還需在/etc/hosts.deny文件中設置“ALL:ALL”的拒絕策略 |
例如:
只允許IP地址為12.0.0.1的主機或者位於192.168.88.0/24網段的主機訪問sshd服務,其他地址全部拒絕
vi /etc/hosts.allow
sshd:12.0.0.1,192.168.88.
vi /etc/hosts.deny
sshd:ALL