Linux遠程訪問及控制


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服務支持兩種驗證方式:

  1. 密碼驗證
    對服務器中本地系統用戶的登錄名稱、密碼進行驗證。
    使用簡便,同時也容易被暴力破解,生產環境中常常關閉該功能以確保服務器的登錄安全。
  2. 密鑰對驗證
    要求提供相匹配的密鑰信息才能通過驗證。
    通常先在客戶端中創建一對密鑰文件(公鑰、私鑰),然后將公鑰文件放到服務器中的指定為誒之。遠程登錄時,系統將使用公鑰、私鑰進行加密/解密關聯驗證。
    可以有效的增強安全性,且可以通過設置進行免交互登錄。

可在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體系

  1. 在客戶端創建密鑰對
    通過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服務器
  1. 將公鑰文件上傳至服務器
方法一:
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/目錄中導入公鑰文本

  1. 在服務器中導入公鑰文本
mkdir /root/.ssh/
cat /opt/id_ecdsa.pub >> /root/.ssh/authorized_keys
  1. 在客戶端使用密鑰對驗證
ssh root@192.168.80.10
root@192.168.80.10's password:       #輸入私鑰密碼
  1. 在客戶機設置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保護機制的實現方式

  1. 直接使用tcpd程序對其他服務程序進行保護,需要運行tcpd程序。
  2. 由其他網絡服務程序調用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)策略文件的配置格式

<服務程序列表>:<客戶端地址列表>

  1. 服務程序列表
    ALL:代表所有的服務
    單個服務程序:如“vsftpd”
    多個服務程序組成的列表:如“vsftpd,sshd”

  2. 客戶端地址列表
    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文件,如果找到相匹配策略,則拒絕訪問;
如果檢查上述兩個文件都找不到相匹配的策略,則允許訪問。

graph TD A(客戶端請求) -->B(TCP Wrappers訪問控制) B --> C(檢查/etc/hosts.allow) C -->|有| D(允許訪問) C -->|無| E(檢查/etc/hosts.deny) E -->|有| F(拒絕訪問) E -->|無| D(允許訪問) G[TCP Wrappers]

(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM