在實際生產(chǎn)環(huán)境中,不可能一直在服務(wù)器本地對服務(wù)器進(jìn)行相應(yīng)的管理,大多數(shù)企業(yè)服務(wù)器都是通過遠(yuǎn)程登錄的方式進(jìn)行管理的。當(dāng)需要從一個工作站管理數(shù)以百計的服務(wù)器主機時,遠(yuǎn)程維護(hù)的方式將更占優(yōu)勢。
SSH 簡介
SSH(Secure Shell)是一種安全通道協(xié)議,主要用來實現(xiàn)字符界面的遠(yuǎn)程登錄、遠(yuǎn)程復(fù)制等功能。SSH協(xié)議對通信雙方的數(shù)據(jù)傳輸進(jìn)行加密處理,其中包括用戶登錄時輸入的用戶口令。比以往的Telnet(遠(yuǎn)程登錄)、RSH(遠(yuǎn)程執(zhí)行命令)等傳統(tǒng)的方式相比,SSH協(xié)議提供了更好的安全性。
一、配置OpenSSH服務(wù)端
OpenSSH是實現(xiàn)SSH協(xié)議的開源軟件項目。在CentOS 7.3系統(tǒng)中。OpenSSH服務(wù)器由openssh、openssh-server等軟件包提供(默認(rèn)已安裝),并已將sshd添加為標(biāo)準(zhǔn)的系統(tǒng)服務(wù)。
1.服務(wù)監(jiān)聽選項
sshd服務(wù)使用的默認(rèn)端口號為22,必要時建議修改此端口號,并指定監(jiān)聽服務(wù)的具體IP地址,以提高在網(wǎng)絡(luò)中的隱蔽性。除此之外,SSH協(xié)議的版本選用v2比v1的安全性要更好,禁用DNS反向解析可以提高服務(wù)器的響應(yīng)速度。
[root@localhost ~]# vim /etc/ssh/sshd_config //修改sshd服務(wù)的主配置文件 ………… //省略部分內(nèi)容 Port 22 //監(jiān)聽端口為22 ListenAddress 0.0.0.0 //監(jiān)聽地址為0.0.0.0,表示全部監(jiān)聽 Protocol 2 //使用SSH v2的版本 UseDNS no //禁用DNS反向解析,提高響應(yīng)速度 ………… //省略部分內(nèi)容 [root@localhost ~]# systemctl restart sshd //重新啟動sshd服務(wù)
2.用戶登錄控制
sshd服務(wù)默認(rèn)允許root用戶登錄,但在網(wǎng)絡(luò)中是很大的安全隱患,普遍的做法是普通用戶,然后切換到root用戶。
[root@localhost ~]# vim /etc/ssh/sshd_config //修改sshd服務(wù)的主配置文件 ………… //省略部分內(nèi)容 LoginGraceTime 2m //登錄驗證時間為2分鐘 PermitRootLogin no //禁止root用戶登錄 MaxAuthTries 6 //最大重試次數(shù)為6次 PermitEmptyPasswords no //禁止空密碼登錄 ………… //省略部分內(nèi)容 [root@localhost ~]# systemctl restart sshd //重新啟動sshd服務(wù)
當(dāng)希望只允許或禁止某個用戶登錄時,可以使用AllowUsers或DenyUsers配置,兩者用法類似(但是注意不要同時使用)。例如允許xiaoli和xiaozhang用戶登錄,且其中xiaozhang用戶僅能從IP地址為192.168.1.2的地址遠(yuǎn)程登錄。
[root@localhost ~]# vim /etc/ssh/sshd_config //修改sshd服務(wù)的主配置文件 ………… //省略部分內(nèi)容 AllowUsers xiaoli xiaozhang@192.168.1.2 //多個用戶之間用空格進(jìn)行分隔 [root@localhost ~]# systemctl restart sshd //重新啟動sshd服務(wù)
3.登錄驗證方式
sshd服務(wù)支持兩種驗證方式: 1.密碼驗證:對服務(wù)器中的本地系統(tǒng)用戶的登錄名稱、密碼進(jìn)行驗證。這種方式使用最為簡便,但是系統(tǒng)用戶密碼存在可能遭遇密碼窮舉(暴力破解); 2.密鑰對驗證:要求提供相匹配的密鑰信息才能通過驗證。通常先在客戶端中創(chuàng)建一對密鑰,然后將公鑰文件存放到服務(wù)器指定位置。遠(yuǎn)程登錄時,系統(tǒng)將使用公鑰、私鑰進(jìn)行加密/解密驗證,這種方式不易被假冒,且可以免交互登錄,在Shell中被廣泛應(yīng)用。
當(dāng)密碼驗證、密鑰對驗證都啟用時,服務(wù)器將優(yōu)先使用密鑰對驗證!沒有特殊要求,建議兩種方式都啟用!
[root@localhost ~]# vim /etc/ssh/sshd_config //修改sshd服務(wù)的主配置文件 ………… //省略部分內(nèi)容 PasswordAuthentication yes //啟用密碼驗證 PubkeyAuthentication yes //啟用密鑰對驗證 AuthorizedKeysFile .ssh/authorized_keys //指定公鑰庫文件 ………… //省略部分內(nèi)容 [root@localhost ~]# systemctl restart sshd //重新啟動sshd服務(wù)
二、使用SSH客戶端程序
在CentOS 7.3系統(tǒng)中,OpenSSH客戶端由openssh-clients軟件包提供(默認(rèn)已安裝),其中包括ssh遠(yuǎn)程登錄命令,以及scp、sftp遠(yuǎn)程復(fù)制和文件傳輸命令等。
1.命令程序(ssh、scp、sftp)應(yīng)用
1)ssh遠(yuǎn)程登錄
通過ssh命令可以遠(yuǎn)程登錄sshd服務(wù),為用戶提供一個安全的Shell環(huán)境,以便對服務(wù)器進(jìn)行管理和維護(hù)!
[root@kehuduan ~]# ssh xiaozhang@192.168.1.1
如果sshd服務(wù)器使用非默認(rèn)的端口號(比如2222)則需要使用“-p”選項指定端口號。
[root@kehuduan ~]# ssh -p 2222 xiaozhang@192.168.1.1 xiaozhang@192.168.1.1's password: //輸入密碼 [xiaozhang@fuwuduan ~]$ //登錄成功
2)scp遠(yuǎn)程復(fù)制
[root@kehuduan ~]# scp root@192.168.1.1:/etc/passwd /mnt //從服務(wù)器下載文件 root@192.168.1.1's password: passwd 100% 2360 2.3KB/s 00:00 [root@kehuduan ~]# scp 123.txt root@192.168.1.1:/mnt //從客戶端上傳文件 root@192.168.1.1's password: 123.txt 100% 0 0.0KB/s 00:00
如果需要指定端口,使用“-P”選項!
3)sftp安全FTP
通過sftp命令可以利用SSH安全連接與遠(yuǎn)程主機上傳、下載文件,采用了與FTP類似的登錄過程和交互式環(huán)境,便于目錄資源管理。
[root@kehuduan ~]# sftp root@192.168.1.1 root@192.168.1.1's password: Connected to 192.168.1.1. sftp> put 456.txt //上傳文件 Uploading 456.txt to /root/456.txt 456.txt 100% 0 0.0KB/s 00:00 sftp> get /root/789.txt //下載文件 Fetching /root/789.txt to 789.txt sftp> bye
2.圖形化工具
在Windows主機上可以使用一些列圖形化工具Xshell、SecureCRT、Putty等圖形工具,支持Telnet、SSH、SFTP等協(xié)議,方便對Linux主機進(jìn)行遠(yuǎn)程管理。這些圖形化工具都提供了中文界面、功能和操作比較簡單,這里不再做深入介紹。
三、構(gòu)建密鑰對驗證的SSH體系
密鑰對驗證方式可以為遠(yuǎn)程登錄提供提供更好的安全性,流程圖:
1)第一種實現(xiàn)方法:
1.在客戶端創(chuàng)建密鑰對
在LInux客戶端中,通過ssh-keygen工具為當(dāng)前用戶創(chuàng)建密鑰對文件,可用的加密算法為ECDSA或DSA(ssh-keygen命令的“-t”選項用于指定算法類型)
root@kehuduan ~]# su - xiaowang //切換到用戶xioawang [xiaowang@kehuduan ~]$ ssh-keygen -t ecdsa //創(chuàng)建基于ECDSA算法的SSH密鑰對 Generating public/private ecdsa key pair. Enter file in which to save the key (/home/xiaowang/.ssh/id_ecdsa): //指定私鑰存放位置 Created directory '/home/xiaowang/.ssh'. Enter passphrase (empty for no passphrase): //設(shè)置私鑰短語 Enter same passphrase again: //確認(rèn)所設(shè)置的短語 Your identification has been saved in /home/xiaowang/.ssh/id_ecdsa. Your public key has been saved in /home/xiaowang/.ssh/id_ecdsa.pub. The key fingerprint is: 13:c2:03:63:bc:2e:d8:7e:be:f1:1b:1d:95:6b:4c:49 xiaowang@kehuduan The key's randomart image is: +--[ECDSA 256]---+ | .+ E | | ..+ . o | | .+ . = | | . o = . | | o . S + | |. o . . + | | . .. . . | | . .o . | | oo.o. | +-----------------+ [xiaowang@kehuduan ~]$ ls -lh ~/.ssh/id_ecdsa* -rw-------. 1 xiaowang xiaowang 227 8月 8 16:45 /home/xiaowang/.ssh/id_ecdsa -rw-r--r--. 1 xiaowang xiaowang 179 8月 8 16:45 /home/xiaowang/.ssh/id_ecdsa.pub
新生成的密鑰對文件中,id_ecdsa是私鑰文件 ,權(quán)限為600,需妥善保管;id_ecdsa.pub是公鑰文件,用來提供給SSH服務(wù)器。
2.將公鑰文件上傳至服務(wù)器
將剛才生成的公鑰文件上傳到服務(wù)端用戶的公鑰數(shù)據(jù)庫中。
[xiaowang@kehuduan ~]$ scp ~/.ssh/id_ecdsa.pub root@192.168.1.1:/mnt root@192.168.1.1's password: //輸入密碼 id_ecdsa.pub 100% 179 0.2KB/s 00:00 //上傳成功
3.在服務(wù)器中導(dǎo)入公鑰文本
在服務(wù)器中,目標(biāo)用戶(指用阿里遠(yuǎn)程登錄的賬號)的公鑰數(shù)據(jù)庫位于~/.ssh目錄,默認(rèn)的文件名“authorized_keys”,需要自己手動創(chuàng)建!
[root@fuwuduan ~]# mkdir /home/xiaozhang/.ssh [root@fuwuduan ~]# cat /mnt/id_ecdsa.pub >> /home/xiaozhang/.ssh/authorized_keys [root@fuwuduan ~]# cat /home/xiaozhang/.ssh/authorized_keys ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJmtmVbjnjH6NbWBRQcFjbYHoDBILQYclqrIHbVe0oyA15IXd+WBGsOcX3FYX8FYnIPHfL36Auj7aWb2MuVqmac= xiaowang@kehuduan
4.在客戶端使用密鑰對驗證
[xiaowang@kehuduan ~]$ ssh xiaozhang@192.168.1.1
Last login: Thu Aug 8 16:03:33 2019 from 192.168.1.2
//不用輸入密碼,即可連接,實驗完成!
2)第二種實現(xiàn)方法:
[root@kehuduan ~]# ssh-keygen -t ecdsa //以root為例,生成root用戶的密鑰對文件 [root@kehuduan ~]# ssh-copy-id -i ~/.ssh/id_ecdsa.pub root@192.168.1.1 //“-i”用來指定公鑰文件,這一步把剛才第二、三步結(jié)合在一起 /bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /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.1.1's password: //輸入服務(wù)端root用戶密碼 Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.1.1'" and check to make sure that only the key(s) you wanted were added. [root@kehuduan ~]# ssh root@192.168.1.1 Last login: Thu Aug 8 17:03:20 2019 //驗證實驗效果
使用密鑰對驗證的方式登錄時,不需要知道目標(biāo)用戶的面膜,而是驗證客戶端用戶的私鑰短語并檢查私鑰、公鑰是否配對,這樣安全性更好。
四、TCP Wrappers訪問控制
1)TCP Wrappers概述
TCP Wrappers將TCP服務(wù)程序“包裹”起來,代為堅挺TCP服務(wù)程序的端口,增加了一個安全監(jiān)測過程,外聯(lián)的連接請求必須先通過這層安全監(jiān)測,獲得許可證才能訪問真正的服務(wù)程序。如圖:
對于大多數(shù)Linux發(fā)行版,TCP Wrappers是默認(rèn)提供的功能。CentOS 7.3使用的軟件包是tcp_wrappers-7.6-77.el7.x86_64.rpm。
對應(yīng)TCP Wrappers保護(hù)機制的兩種實現(xiàn)方式: 1.直接使用tcpd程序?qū)ζ渌?wù)程序進(jìn)行保護(hù),需要運行tcpd; 2.由其他網(wǎng)絡(luò)服務(wù)程序調(diào)用libwrap.so.*鏈接庫,不需要運行tcpd程序。 通常,鏈接庫方式的應(yīng)用要更為廣泛,也更有效率。
2)TCP Wrappers的訪問策略
TCP Wrappers機制的保護(hù)對象為各種網(wǎng)絡(luò)服務(wù)程序,針對訪問服務(wù)的客戶端地址進(jìn)行訪問控制,對應(yīng)的兩個策略文件為/etc/hosts.allow和/etc/hosts.deny ,分別用阿里設(shè)置允許和拒絕的策略。
1、策略配置格式
服務(wù)列表:客戶機地址列表
服務(wù)器程序列表,客戶端地址列表之間用冒號進(jìn)行分隔,在列表內(nèi)的多個項之間用逗號分隔。
1)服務(wù)程序列表
2)客戶端地址列表
2、策略的應(yīng)用順序
先檢查hosts.allow,找到匹配則允許訪問 否則再檢查hosts.deny,找到則拒絕訪問 若兩個文件中均無匹配策略,則默認(rèn)允許訪問
3、配置實例
要求:希望僅允許192.168.1.0網(wǎng)段的主機訪問sshd服務(wù)
[root@fuwuduan ~]# vim /etc/hosts.allow sshd:192.168.1. [root@fuwuduan ~]# vim /etc/hosts.deny sshd:ALL