SSL
(
Secure Sockets Layer
安全套接字協議),及其繼任者傳輸層安全(
Transport Layer Security
,
TLS
)是為網路通訊提供安全及資料完整性的一種安全協議。
TLS
與
SSL
在傳輸層與應用層之間對網路連線進行加密。
Linux安全之SSL基礎
1。 SSH 協議
**ssh**是secure shell的首字母縮寫,預設工作在TCP的22埠之上,安全的遠端登入的一種協議。
**OpenSSH**就是ssh協議的開源實現,用於取代傳統的不加密工作在TCP的23號埠上的telnet工具的,同時取代了其他遠端複製等工具的實現。dropbear是ssh協議的另一個開源實現,適用於較小的網路中。
SSH 協議版本
v1
版本:基於
CRC-32
做
MAC
很不安全,很容易受中間人攻擊(
man-in-middle
)
v2
版本:雙方主機協議選擇安全的
MAC
方式基於
DH
演算法做金鑰交換,基於
RSA
或
DSA
演算法實現身份認證
兩種認證機制
基於使用者名稱和密碼連線之後客戶端傳送使用者名稱和密碼進行登入
基於公私鑰的
免密碼登入
客戶端生成一對公私鑰,將公鑰放到遠端伺服器家目錄的
。ssh
目錄檔案下。當客戶端連線伺服器的時候,伺服器傳送一串用公鑰加密的資料讓客戶端解密,如果成功則身份透過認證。此處的公鑰不能夠公開,否則不安全。
dropbear
ssh
協議的另一個實現的開源方式
用在嵌入式系統上
資源佔用率更少
# 建立Key,使用2048或者預設長度[root@localhost ~]# dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048[root@localhost ~]# dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key# 啟動dropbear的ssh服務[root@localhost ~]# dropbear -p [ip:]port -F -E[root@localhost ~]# dropbear -p :2222 # 後臺執行[root@localhost ~]# dropbear -p :2222 -F -E # 前臺執行# 客戶端訪問,可以用系統的ssh,也可以用dropbear的客戶端dbclient[root@localhost ~]# ssh -p 2222 root@127。0。0。1[root@localhost ~]# dbclient -p 2222 root@127。0。0。1
2。 OpenSSH
2。1 OpenSSH 基礎
**OpenSSH**也是一個基於C/S架構的用具,同時還能夠實現很多如ssh、scp、sftp等的功能。客戶端工具眾多,如商業的xshell以及securecrt,開源的putty,伺服器端的多為Linux下的sshd。
客戶端元件
ssh
配置檔案:
/etc/ssh/ssh_config
伺服器端元件
sshd
配置檔案:
/etc/ssh/sshd_config
連線過程
Linux安全之SSL基礎
2。2 SSH 命令的基本使用
格式
ssh [user@]host [COMMAND]
ssh [-l user] host [COMMAND]
選項
-p port
遠端伺服器監聽的埠因為很多伺服器因為安全的關係導致不會使用預設的
22
號埠號
-X
支援
x11
轉發支援之後就是可以開啟遠端主機的圖形化介面程式,如
xclock
程式同時本地系統也需要啟動
x11
才可以開啟圖形化介面程式
-Y
支援信任的
x11
轉發支援之後就是可以開啟遠端主機的圖形化介面程式,如
xclock
程式同時本地系統也需要啟動
x11
才可以開啟圖形化介面程式
例項展示
# 使用@登入遠端主機[root@localhost ~]# ssh root@172。16。242。181# 使用-l登入遠端主機[root@localhost ~]# ssh -l root 172。16。242。181# 不登入遠端主機,只是執行一條命令[root@localhost ~]# ssh root@172。16。242。181 ‘hostname’
# 一次完整的SSH的使用者名稱、密碼登入# 會在家目錄下生成一個。ssh的隱藏資料夾,其中有一個known_hosts用來儲存我們連線過的主機以及認證秘鑰[root@localhost ~]# ssh root@172。16。242。181The authenticity of host ‘172。16。242。181 (172。16。242。181)’ can‘t be established。RSA key fingerprint is 2a:83:14:68:16:84:e0:0c:4a:2a:81:cd:9f:ae:ce:0a。Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added ’172。16。242。181‘ (RSA) to the list of known hosts。root@172。16。242。181’s password:Last login: Fri Jun 24 15:10:14 2016 from 172。16。242。1[root@localhost ~]# cat 。ssh/known_hosts172。16。242。181 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArpD/NWo1g0xtUfEQH1vkG2aHYenkTJpiNGj1e/1rY3kQQpocL75EVIROVNSlqtbUiUkoy7fsxs0lfm+maDoGbMeuUQQBV/HSeBGuq3Jjfh+7ymR8iiSNNZLmqQmBpfG7/QG0WU1gXWeO1V3CJNjlbWQr/Px6zilypSeYaM+rS8SkekOzZpWgFDSUg3dFBmN5HhY3+fyWWvJlk1aJRxJW5T4dnecz+LLNnwWu6s880HBUY+f0ahdknGq8yKz0eeaTTUqf5qhSALiU0L3+ApocSINaZcuB+1X1IE+NRqpaJRBrXuwFjTQ99pBoPkRbdSGTkW0j5eC7U8bfzSydrmlCDQ==
2。3 基於金鑰的認證方式
格式
(1) 在客戶端生成金鑰對
ssh-keygen -t rsa [-P ‘’] [-f “~/。ssh/id_rsa”]-P
:指明使用公私鑰的密碼
-f
:指明秘鑰檔案路徑,這裡需要寫明為
絕對路徑
(2) 把公鑰傳輸至遠端伺服器對應使用者的家目錄
ssh-copy-id [-i [identity_file]] [user@]machine-i
:指明需要傳給伺服器的本地公鑰檔案位置預設會在服務端的
。ssh
目錄下生成一個
authorized_keys
的檔案用來放置客戶端的公鑰資訊的如果沒有就建立並將客戶端的公鑰資訊放在這裡,也可以達到同樣的效果,需要注意
authorized_keys
的許可權為
600
,切記
(3) 測試
ssh root@172。16。242。181
例項展示
# id_rsa為私鑰,id_rsa。pub為公鑰[root@localhost ~]# ssh-keygen -t rsaGenerating public/private rsa key pair。Enter file in which to save the key (/root/。ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /root/。ssh/id_rsa。Your public key has been saved in /root/。ssh/id_rsa。pub。The key fingerprint is:f3:4c:0d:41:78:e5:50:a6:00:c6:bf:1d:ad:3f:0f:bd root@localhost。localdomainThe key‘s randomart image is:+——[ RSA 2048]——+| 。o。。o+o+ || 。。 。。。* || 。 。o。。 || 。 。o。 || So。o。 || 。=o 。 || o。。 。 || o。 。 || oE |+————————-+[root@localhost ~]# cd 。ssh/[root@localhost 。ssh]# lsid_rsa id_rsa。pub known_hosts
# 同時,也可以使用選項生成公私鑰對[root@localhost 。ssh]# ssh-keygen -t rsa -P ’‘ -f ’/root/。ssh/‘Generating public/private rsa key pair。/root/。ssh/ already exists。Overwrite (y/n)? yopen /root/。ssh/ failed: Is a directory。Saving the key failed: /root/。ssh/。
# 把公鑰傳輸至遠端伺服器對應使用者的家目錄# 輸入使用者名稱以及密碼即可完成[root@localhost 。ssh]# ssh-copy-id -i 。ssh/id_rsa。pub root@172。16。242。100
2。4 scp 命令的基本使用
格式
scp [options] SRC... DEST/
兩種情形
PULL(伺服器==>客戶端,下載
)
scp [options] [user@]host:/PATH/FROM/SOMEFILE /PATH/TO/SOMEWHERE/PATH/FROM/SOMEFILE
表示伺服器端需要下載的檔案
/PATH/TO/SOMEWHERE
表示下載到本地的那個目錄下
PUSH(伺服器<==客戶端,上傳
)
scp [options] /PATH/FROM/SOMEFILE [user@]host:/PATH/TO/SOMEWHERE/PATH/FROM/SOMEFILE
表示本地上傳檔案
/PATH/TO/SOMEWHERE
表示伺服器端的檔案目錄
常用選項
-r
遞迴複製複製目錄的時候必須使用
-p
保持原檔案的屬性資訊
-q
靜默模式
-P PORT
指明遠端伺服器的監聽的埠
sftp命令
sftp
命令依賴於
ssh
工作的,所以是加密的,並且能夠簡化我們的上傳和下載操作
[root@localhost ~]# sftp root@172。16。242。181Connected to 172。16。242。181。sftp> helpAvailable commands:bye Quit sftp。。。
例項展示
# 下載[root@localhost ~]# scp root@172。16。242。100:/etc/fstab /tmp/fstab。txtfstab 100% 779 0。8KB/s 00:00# 上傳[root@localhost ~]# scp /etc/fstab root@172。16。242。181:/tmp/fstab
2。5 rsync 命令的基本使用
基於 ssh 實現高效率的遠端系統之間複製檔案,使用安全的 shell 連線做為傳輸方式,比 scp 更快。
選項
-n
:模擬複製過程
-v
:顯示詳細過程
-r
:遞迴複製目錄樹
-p
:保留許可權
-t
:保留時間戳
-g
:保留組資訊
-o
:保留所有者資訊
-l
:將軟連結檔案本身進行復制(預設)
-L
:將軟連結檔案指向的檔案複製
-a
:存檔,相當於–rlptgoD,但不保留 ACL 和 SELinux 屬性
例項演示
# 複製目錄和目錄下檔案rsync –av /etc server1:/tmp# 只複製目錄下檔案rsync –av /etc/ server1:/tmp
3。 SSH 服務的最佳實踐
(1)不要使用預設埠
(2)禁止使用
protocol version 1
(3)限制可登入使用者
(4)設定空閒會話超時時長
(5)利用防火牆設定
ssh
訪問策略
(6)僅監聽特定的
IP
地址
(7)基於口令認證時,使用強密碼策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
(8)使用基於金鑰的認證
(9)禁止使用空密碼
(10)禁止
root
使用者直接登入
(11)限制
ssh
的訪問頻度和併發線上數
(12)做好日誌,經常分析
(13)如果在測試的時候不成功,注意關閉
selinux
和
iptables
4。 SSH 服務的配置檔案
4。1 客戶器端配置檔案
註釋的都為啟用預設配置
Host
表示指定的主機,
*
表示全部主機
MACs
表示訊息摘要碼
Port
表示如果伺服器埠改變之後不用每次都指定埠號
Protocol
表示啟動的 ssh 協議版本
StrictHostKeyChecking
表示當連線新主機會提示資訊
[root@localhost ~]# cat /etc/ssh/ssh_config。。。Host * - GSSAPIAuthentication yes - ForwardX11Trusted yes - SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES - SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT - SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE - SendEnv XMODIFIERS
4。2 伺服器端配置檔案
#
開頭的表示註釋
配置的時候不能攜帶多餘的字元
Port
表示監聽埠,通常需要改動
ListenAddress
表示監聽的地址,因為一個機器可能有多個地址,通常監聽內網地址而不監聽外網地址
AddressFamily
表示使用
IPv4
還是
IPv6
,
any
表示全部都監聽
AllowGroups
表示可以訪問的使用者組
AllowUsers username
表示可以訪問的使用者名稱,
username
表示具體的使用者名稱
HostKey
表示主機秘鑰支援的演算法
KeyRegenerationInterval
表示主機秘鑰過期時間
ServerKeyBits
表示主機秘鑰長度
SyslogFacility
表示日誌儲存方式,儲存在
/var/log/secure
內
LoginGraceTime
表示連線登入等待時間
PermitRootLogin
表示是否允許
root
使用者直接登入
PasswordAuthentication
表示是否允許基於口令認證,即使用者名稱和密碼登入
X11Forwarding
表示是否允許
X11
轉發,支援之後就是可以開啟遠端主機的圖形化介面程式
Subsystem sftp
表示啟動子系統
sftp
,所以才能使用
sftp
命令
UseDNS
表示解析
DNS
,建議關閉否則可以出現客戶端登入用時長的問題
5。 telnet 命令的基本使用
telnet 是基於 S/C 架構的工具,伺服器端 telnet-server,客戶端為 telnet,用到的時候需要自己獨立安裝。
# 服務端安裝telnet程式[root@localhost ~]# yum install -y telnet-server已安裝: telnet-server。x86_64 1:0。17-48。el6作為依賴被安裝: xinetd。x86_64 2:2。3。14-40。el6完畢!
# 服務端啟動telnet,因為telnet是工作的超級守護程序中的瞬時守護程序,所以啟動方式不同[root@localhost ~]# chkconfig telnet on[root@localhost ~]# service xinetd restartStopping xinetd: [FAILED]Starting xinetd: [ OK ][root@localhost ~]# ss -tunl | grep :23tcp LISTEN 0 64 :::23 :::*
# 在CentOS6中,xinetd為超級守護程序,telnet是執行在xinetd之內的# 超級守護程序xinetd就是為了那些可能長時間不需要使用的服務監聽,一旦有需求才啟動對應的服務進行通訊。# 瞬時守護程序就是為了那些可能長時間不需要使用,如果單獨分一個程序跑太浪費效能了,所以使用超級守護程序xinetd進行統一管理# 獨立守護程序就是那些自己管理自己的程式,sshd就是一個獨立守護程序[root@localhost ~]# chkconfig ——list。。。xinetd - 0:關閉 - 1:關閉 - 2:關閉 - 3:啟用 - 4:啟用 - 5:啟用 - 6:關閉基於 xinetd 的服務: - rsync: - 關閉 - telnet: - 啟用 - time-dgram: - 關閉 - time-stream: - 關閉。。。
# 確保在客戶端安裝了telnet的客戶端程式,並且確保服務端iptables中沒有過濾23號埠的請求# telnet不允許root使用者直接登入,需要使用普通使用者登入[root@localhost ~]# yum install -y telnet[root@localhost ~]# telnet 172。16。242。181Trying 172。16。242。181。。。Connected to 172。16。242。181。Escape character is ’^]‘。CentOS release 6。7 (Final)Kernel 2。6。32-573。26。1。el6。x86_64 on an x86_64login:
文章作者:
Escape
文章連結:
https://www。escapelife。site/posts/c5aea51c。html