Linux系列教程(13)- 使用 ssh 服务管理远程主机
使用 ssh 服務(wù)管理遠(yuǎn)程主機(jī)
配置 sshd 服務(wù)
SSH(Secure Shell)是一種能夠以安全的方式提供遠(yuǎn)程登錄的協(xié)議,也是目前遠(yuǎn)程管理
Linux 系統(tǒng)的首選方式。在此之前,一般使用 FTP 或 Telnet 來進(jìn)行遠(yuǎn)程登錄。但是因?yàn)樗鼈?br /> 以明文的形式在網(wǎng)絡(luò)中傳輸賬戶密碼和數(shù)據(jù)信息,因此很不安全。
想要使用 SSH 協(xié)議來遠(yuǎn)程管理 Linux 系統(tǒng),則需要部署配置 sshd 服務(wù)程序。sshd 是基于 SSH
協(xié)議開發(fā)的一款遠(yuǎn)程管理服務(wù)程序,不僅使用起來方便快捷,而且能夠提供兩種安全驗(yàn)證的方法:
? 基于口令的驗(yàn)證 — 用賬戶和密碼來驗(yàn)證登錄;
? 基于密鑰的驗(yàn)證 — 需要在本地生成密鑰對,然后把密鑰對中的公鑰上傳至服務(wù)器,
并與服務(wù)器中的公鑰進(jìn)行比較;該方式相較來說更安全。
配置
Port 22 默認(rèn)的 sshd 服務(wù)端口
ListenAddress 0.0.0.0 設(shè)定 sshd 服務(wù)器監(jiān)聽的 IP 地址
Protocol 2 SSH 協(xié)議的版本號
HostKey /etc/ssh/ssh_host_key SSH 協(xié)議版本為 1 時,DES 私鑰存放的位置
HostKey /etc/ssh/ssh_host_rsa_key SSH 協(xié)議版本為 2 時,RSA 私鑰存放的位置
HostKey /etc/ssh/ssh_host_dsa_key SSH 協(xié)議版本為 2 時,DSA 私鑰存放的位置
PermitRootLogin yes 設(shè)定是否允許 root 管理員直接登錄
StrictModes yes 當(dāng)遠(yuǎn)程用戶的私鑰改變時直接拒絕連接
MaxAuthTries 6 最大密碼嘗試次數(shù)
MaxSessions 10 最大終端數(shù)
PasswordAuthentication yes 是否允許密碼驗(yàn)證
PermitEmptyPasswords no 是否允許空密碼登錄(很不安全)
sshd 服務(wù)的配置信息保存在/etc/ssh/sshd_config 文件中。
# cat /etc/ssh/sshd_config密碼登錄
在 RHEL 7 系統(tǒng)中,已經(jīng)默認(rèn)安裝并啟用了 sshd 服務(wù)程序。接下來使用 ssh 命令進(jìn)行遠(yuǎn)
程連接,其格式為“ssh [參數(shù)] 主機(jī) IP 地址”。要退出登錄則執(zhí)行 exit 命令。
命令
狀態(tài) # systemctl status sshd 重啟 # systemctl restart sshd 開機(jī)啟動 # systemctl enable sshd公鑰密鑰登錄
可以實(shí)現(xiàn)免輸入密碼進(jìn)行登錄。
在客戶端主機(jī)中生成“密鑰對”,在.ssh目錄。
# ssh-keygen 一直回車把客戶端主機(jī)中生成的公鑰文件傳送至遠(yuǎn)程主機(jī)。
ssh-copy-id -p port user@remotr
# ssh-copy-id 192.168.10.10 Are you sure you want to continue connecting (yes/no)? yes root@192.168.10.10's password:輸入遠(yuǎn)程服務(wù)器密碼在客戶端嘗試登錄到服務(wù)器,此時無須輸入密碼也可成功登錄。
遠(yuǎn)程傳輸命令
scp(secure copy)是一個基于 SSH 協(xié)議在網(wǎng)絡(luò)之間進(jìn)行安全傳輸?shù)拿?#xff0c;其格式為“scp
[參數(shù)] 本地文件 遠(yuǎn)程帳戶@遠(yuǎn)程 IP 地址:遠(yuǎn)程目錄”。
由于 scp 命令是基于 SSH 協(xié)議進(jìn)行文件傳送的,上節(jié)又設(shè)置好了密鑰驗(yàn)證,因
此當(dāng)前在傳輸文件時,并不需要賬戶和密碼。
此外,還可以使用 scp 命令把遠(yuǎn)程主機(jī)上的文件下載到本地主機(jī),其命令格式為“scp [參
數(shù)] 遠(yuǎn)程用戶@遠(yuǎn)程 IP 地址:遠(yuǎn)程文件 本地目錄”。例如,可以把遠(yuǎn)程主機(jī)的系統(tǒng)版本信息文
件下載過來,這樣就無須先登錄遠(yuǎn)程主機(jī),再進(jìn)行文件傳送了,也就省去了很多周折。
遠(yuǎn)程登錄客戶端
Linux 系統(tǒng)中是通過 ssh 服務(wù)實(shí)現(xiàn)的遠(yuǎn)程登錄功能,默認(rèn) ssh 服務(wù)端口號為 22。
Window 系統(tǒng)上 Linux 遠(yuǎn)程登錄客戶端有Xshell ,SecureCRT, Putty, SSH Secure Shell 等
xshell上使用公鑰登陸Linux服務(wù)器
1.設(shè)置連接
設(shè)置協(xié)議=SSH、IP、端口
2.設(shè)置用戶身份驗(yàn)證
方法=public key 用戶名=root
3.生成公鑰
點(diǎn)擊瀏覽生成,一直下一步,輸入密碼123456
最后保存成文件如:id_rsa_2048.pub,然后填寫生成公鑰過程中輸入的密碼 ,文件內(nèi)容如下
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAn6gjMhvBsm5lghzmWNlQlrL0DByMtslErHbzrmp4l8qCdOgRMhJH8zI3IoBPqnFv+9Vf5+qGlMdG+DfW17HEiz8tnqvhjdjviGK0ZVBANNIjVaTst5GsMVfOdR9pBdudMQa6bffV6wV7UiJ0XLQYD3GSEjBDH+ZTt7cU/zTV5ph8n4evaK301IwGcBU90pQmoMSmkYqu+wnkS8OApyX9OEsoTe4H7l8EImVdzw5nCrnSKBgPMd1JGqo1wpBrK+3ZwdDhc/Q/TNX1TpNd/nbB2JJGdOzBdugVZyW/8hoVAaWt6uVRStq4jWoSRUagmuA1Anrs2lPyIQVEmX/GxUZ9GQ==4.上傳公鑰文件到linux服務(wù)器的~/.ssh/目錄
5.執(zhí)行命令cat id_rsa_2048.pub >> authorized_keys,如果沒有authorized_keys,則自己創(chuàng)建一個
6.修改權(quán)限chmod 600 authorized_keys
7.打開之前設(shè)置的連接就可以使用公鑰連上服務(wù)器了
sftp 服務(wù)程序
sftp采用的是ssh加密隧道,安全性方面比ftp強(qiáng),而且依賴的是系統(tǒng)自帶的ssh服務(wù),不像ftp還需要額外的進(jìn)行安裝,默認(rèn)已經(jīng)安裝,可以
# ssh -V # sftp 127.0.0.1 Connected to 127.0.0.1. sftp> ls眾所周知sftp賬號是基于ssh賬號的,所以在默認(rèn)情況下訪問服務(wù)器的權(quán)限是非常大的,進(jìn)行sftp用戶權(quán)限設(shè)置
你的openssh-server版本至少得失4.8p1。
1、創(chuàng)建sftp用戶組
groupadd sftp2、創(chuàng)建ftp用戶
useradd -g sftp -s /sbin/nologin -M sftpuser passwd sftpuser3、創(chuàng)建家目錄并指定權(quán)限
注釋:給家目錄更改屬主并授權(quán)家目錄屬主必須是root,權(quán)限可以是755或者750
mkdir -p /opt/data usermod -d /opt/data sftpuserchown root:root /opt/data chmod 755 /opt/data4、創(chuàng)建可寫目錄
mkdir /opt/data/file -p chown sftpuser:sftp /opt/data/file5、編輯配置文件/etc/ssh/sshd_config
注釋掉X11Forwarding yes 這句話,大概在101行 注釋掉Subsystem sftp /usr/libexec/openssh/sftp-server 這句話,大概在132行并在文件末尾添加如下語句: Subsystem sftp internal-sftp Match User sftpuser ChrootDirectory /opt/data ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no# systemctl restart sshd6、驗(yàn)證
# sftp sftpuser@127.0.0.1注釋:文件只能刪除至/opt/data/file目錄下,可以上傳和刪除。默認(rèn)端口22
使用 vsftpd 服務(wù)傳輸文件
文件傳輸協(xié)議
今天的互聯(lián)網(wǎng)是由幾千萬臺個人計算機(jī)、工作站、服務(wù)器、小型機(jī)、大型
機(jī)、巨型機(jī)等具有不同型號、不同架構(gòu)的物理設(shè)備共同組成的,而且即便是個人計算機(jī),也
可能會裝有 Windows、Linux、UNIX、Mac 等不同的操作系統(tǒng)。為了能夠在如此復(fù)雜多樣的
設(shè)備之間解決問題解決文件傳輸問題,文件傳輸協(xié)議(FTP)應(yīng)運(yùn)而生。
FTP 是一種在互聯(lián)網(wǎng)中進(jìn)行文件傳輸?shù)膮f(xié)議,基于客戶端/服務(wù)器模式,默認(rèn)使用 20、21
號端口,其中端口 20(數(shù)據(jù)端口)用于進(jìn)行數(shù)據(jù)傳輸,端口 21(命令端口)用于接受客戶端
發(fā)出的相關(guān) FTP 命令與參數(shù)。
FTP 協(xié)議有下面兩種工作模式。
? 主動模式:FTP 服務(wù)器主動向客戶端發(fā)起連接請求。
? 被動模式:FTP 服務(wù)器等待客戶端發(fā)起連接請求(FTP 的默認(rèn)工作模式)。
防火墻一般是用于過濾從外網(wǎng)進(jìn)入內(nèi)網(wǎng)的流量,因此有些時候需要將 FTP 的工作模式設(shè)置為
主動模式,才可以傳輸數(shù)據(jù)。
vsftpd(very secure ftp daemon,非常安全的 FTP 守護(hù)進(jìn)程)是一款運(yùn)行在 Linux 操作系
統(tǒng)上的 FTP 服務(wù)程序,不僅完全開源而且免費(fèi),此外,還具有很高的安全性、傳輸速度,以
及支持虛擬用戶驗(yàn)證等其他 FTP 服務(wù)程序不具備的特點(diǎn)。
vsftpd 服務(wù)程序的主配置文件(/etc/vsftpd/vsftpd.conf)
[root@linuxprobe ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak [root@linuxprobe ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf [root@linuxprobe ~]# cat /etc/vsftpd/vsftpd.confdirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=YES listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES配置參數(shù)說明:
listen=[YES|NO] 是否以獨(dú)立運(yùn)行的方式監(jiān)聽服務(wù) listen_address=IP 地址 設(shè)置要監(jiān)聽的 IP 地址 listen_port=21 設(shè)置 FTP 服務(wù)的監(jiān)聽端口 download_enable=[YES|NO] 是否允許下載文件 userlist_enable=[YES|NO] userlist_deny=[YES|NO] 設(shè)置用戶列表為“允許”還是“禁止”操作 max_clients=0 最大客戶端連接數(shù),0 為不限制 max_per_ip=0 同一 IP 地址的最大連接數(shù),0 為不限制 anonymous_enable=[YES|NO] 是否允許匿名用戶訪問 anon_upload_enable=[YES|NO] 是否允許匿名用戶上傳文件 anon_umask=022 匿名用戶上傳文件的 umask 值 anon_root=/var/ftp 匿名用戶的 FTP 根目錄 anon_mkdir_write_enable=[YES|NO] 是否允許匿名用戶創(chuàng)建目錄 anon_other_write_enable=[YES|NO] 是否開放匿名用戶的其他寫入權(quán)限(包括重命名、刪 除等操作權(quán)限) anon_max_rate=0 匿名用戶的最大傳輸速率(字節(jié)/秒),0 為不限制 local_enable=[YES|NO] 是否允許本地用戶登錄 FTP local_umask=022 本地用戶上傳文件的 umask 值 local_root=/var/ftp 本地用戶的 FTP 根目錄 chroot_local_user=[YES|NO] 是否將用戶權(quán)限禁錮在 FTP 目錄,以確保安全 local_max_rate=0 本地用戶最大傳輸速率(字節(jié)/秒),0 為不限制vsftpd 服務(wù)程序
vsftpd 作為更加安全的文件傳輸?shù)姆?wù)程序,允許用戶以三種認(rèn)證模式登錄到 FTP 服務(wù)
器上。
? 匿名開發(fā)模式 :是一種最不安全的認(rèn)證模式,任何人都可以無需密碼驗(yàn)證而直接登錄
到 FTP 服務(wù)器。
?本地用戶模式 :是通過 Linux 系統(tǒng)本地的賬戶密碼信息進(jìn)行認(rèn)證的模式,相較于匿名
開放模式更安全,而且配置起來也很簡單。但是如果被黑客破解了賬戶的信息,就可
以暢通無阻地登錄 FTP 服務(wù)器,從而完全控制整臺服務(wù)器。
? 虛擬用戶模式:是這三種模式中最安全的一種認(rèn)證模式,它需要為 FTP 服務(wù)單獨(dú)
建立用戶數(shù)據(jù)庫文件,虛擬出用來進(jìn)行口令驗(yàn)證的賬戶信息,而這些賬戶信息在
服務(wù)器系統(tǒng)中實(shí)際上是不存在的,僅供 FTP 服務(wù)程序進(jìn)行認(rèn)證使用。這樣,即使
黑客破解了賬戶信息也無法登錄服務(wù)器,從而有效降低了破壞范圍和影響。
ftp 是 Linux 系統(tǒng)中以命令行界面的方式來管理 FTP 傳輸服務(wù)的客戶端工具。
匿名開放模式
無需密碼驗(yàn)證而直接登錄到 FTP 服務(wù)器。這種模式一般用來訪問不重要的公開文件。
vsftpd 服務(wù)程序默認(rèn)開啟了匿名開放模式,我們需要做的就是開放匿名用戶的上傳、下
載文件的權(quán)限,以及讓匿名用戶創(chuàng)建、刪除、更名文件的權(quán)限。添加配置
現(xiàn)在就可以在客戶端執(zhí)行 ftp 命令連接到遠(yuǎn)程的 FTP 服務(wù)器了。在 vsftpd 服務(wù)程序的匿
名開放認(rèn)證模式下,其賬戶統(tǒng)一為 anonymous,密碼為空。而且在連接到 FTP 服務(wù)器后,默
認(rèn)訪問的是/var/ftp 目錄。我們可以切換到該目錄下的 pub 目錄中,然后嘗試創(chuàng)建一個新的目
錄文件,以檢驗(yàn)是否擁有寫入權(quán)限
下面將目錄的所有者身份改成系統(tǒng)賬戶 ftp 即可
[root@linuxprobe ~]# ls -ld /var/ftp/pub drwxr-xr-x. 3 root root 16 Jul 13 14:38 /var/ftp/pub [root@linuxprobe ~]# chown -Rf ftp /var/ftp/pub [root@linuxprobe ~]# ls -ld /var/ftp/pub drwxr-xr-x. 3 ftp root 16 Jul 13 14:38 /var/ftp/pub本地用戶模式
相較于匿名開放模式,本地用戶模式要更安全,而且配置起來也很簡單。
anonymous_enable=NO 禁止匿名訪問模式
local_enable=YES 允許本地用戶模式
write_enable=YES 設(shè)置可寫權(quán)限
local_umask=022 本地用戶模式創(chuàng)建文件的 umask 值
userlist_enable=YES 啟用“禁止用戶名單”,名單文件為 ftpusers 和 user_list
userlist_deny=YES 開啟用戶作用名單文件功能
vsftpd 服務(wù)程序所在的目錄中默認(rèn)存放著兩個名為“用戶名單”的文件(ftpusers 和 user_list)。
在采用本地用戶模式登錄 FTP 服務(wù)器后,默認(rèn)訪問的是該用戶的家目錄。而且該目錄的默認(rèn)所有者、所屬組都是該用戶自己,因此不存在寫入權(quán)限不足的情況??梢圆捎萌缦聦傩孕薷哪J(rèn)更目錄。
local_root=/var/ftp 本地用戶的 FTP 根目錄虛擬用戶模式
虛擬用戶模式是這三種模式中最安全的一種認(rèn)證模式
數(shù)據(jù)庫文件創(chuàng)建
創(chuàng)建用于進(jìn)行 FTP 認(rèn)證的用戶數(shù)據(jù)庫文件,其中奇數(shù)行為賬戶名,偶數(shù)行為密
碼。例如,我們分別創(chuàng)建出 ftpuser1和 ftpuser2兩個用戶,密碼均為 ftpuser2
但是,明文信息既不安全,也不符合讓 vsftpd 服務(wù)程序直接加載的格式,因此需要使
用 db_load 命令用哈希(hash)算法將原始的明文信息文件轉(zhuǎn)換成數(shù)據(jù)庫文件,并且降低
數(shù)據(jù)庫文件的權(quán)限(避免其他人看到數(shù)據(jù)庫文件的內(nèi)容),然后再把原始的明文信息文件
刪除。
建立linux用戶
創(chuàng)建 vsftpd 服務(wù)程序用于存儲文件的根目錄以及虛擬用戶映射的系統(tǒng)本地
用戶。FTP 服務(wù)用于存儲文件的根目錄指的是,當(dāng)虛擬用戶登錄后所訪問的默認(rèn)位置。
由于 Linux 系統(tǒng)中的每一個文件都有所有者、所屬組屬性,例如使用虛擬賬戶“張三”
新建了一個文件,但是系統(tǒng)中找不到賬戶“張三”,就會導(dǎo)致這個文件的權(quán)限出現(xiàn)錯誤。為此,
需要再創(chuàng)建一個可以映射到虛擬用戶的系統(tǒng)本地用戶。簡單來說,就是讓虛擬用戶默認(rèn)登錄
到與之有映射關(guān)系的這個系統(tǒng)本地用戶的家目錄中,虛擬用戶創(chuàng)建的文件的屬性也都?xì)w屬于
這個系統(tǒng)本地用戶,從而避免 Linux 系統(tǒng)無法處理虛擬用戶所創(chuàng)建文件的屬性權(quán)限。
為了方便管理 FTP 服務(wù)器上的數(shù)據(jù),可以把這個系統(tǒng)本地用戶的家目錄設(shè)置為/var 目錄
(該目錄用來存放經(jīng)常發(fā)生改變的數(shù)據(jù))。并且為了安全起見,我們將這個系統(tǒng)本地用戶設(shè)置
為不允許登錄 FTP 服務(wù)器,這不會影響虛擬用戶登錄,而且還可以避免黑客通過這個系統(tǒng)本
地用戶進(jìn)行登錄。
建立用于支持虛擬用戶的 PAM 文件。
PAM(可插拔認(rèn)證模塊)是一種認(rèn)證機(jī)制,通過一些動態(tài)鏈接庫和統(tǒng)一的 API 把系統(tǒng)提
供的服務(wù)與認(rèn)證方式分開,使得系統(tǒng)管理員可以根據(jù)需求靈活調(diào)整服務(wù)程序的不同認(rèn)證方式。
通俗來講,PAM 是一組安全機(jī)制的模塊,系統(tǒng)管理員可以用來輕易地調(diào)整服務(wù)程序的認(rèn)
證方式,而不必對應(yīng)用程序進(jìn)行任何修改。PAM 采取了分層設(shè)計(應(yīng)用程序?qū)?、?yīng)用接口層、
鑒別模塊層)的思想。
新建一個用于虛擬用戶認(rèn)證的 PAM 文件 vsftpd.vu,其中 PAM 文件內(nèi)的“db=”參數(shù)為
使用 db_load 命令生成的賬戶密碼數(shù)據(jù)庫文件的路徑,但不用寫數(shù)據(jù)庫文件的后綴:
配置PAM認(rèn)證
在 vsftpd 服務(wù)程序的主配置文件中通過 pam_service_name 參數(shù)將 PAM 認(rèn)證
文件的名稱修改為 vsftpd.vu,PAM 作為應(yīng)用程序?qū)优c鑒別模塊層的連接紐帶,可以讓應(yīng)用程
序根據(jù)需求靈活地在自身插入所需的鑒別功能模塊。當(dāng)應(yīng)用程序需要 PAM 認(rèn)證時,則需要在
應(yīng)用程序中定義負(fù)責(zé)認(rèn)證的 PAM 配置文件,實(shí)現(xiàn)所需的認(rèn)證功能。
例如,在 vsftpd 服務(wù)程序的主配置文件中默認(rèn)就帶有參數(shù) pam_service_name=vsftpd,表
示登錄 FTP 服務(wù)器時是根據(jù)/etc/pam.d/vsftpd 文件進(jìn)行安全認(rèn)證的?,F(xiàn)在我們要做的就是把
vsftpd 主配置文件中原有的 PAM 認(rèn)證文件 vsftpd 修改為新建的 vsftpd.vu 文件即可。該操作中
用到的參數(shù)以及作用如表 11-4 所示。
anonymous_enable=NO 禁止匿名開放模式
local_enable=YES 允許本地用戶模式
guest_enable=YES 開啟虛擬用戶模式
guest_username=virtual 指定虛擬用戶賬戶
pam_service_name=vsftpd.vu 指定 PAM 文件
allow_writeable_chroot=YES允許對禁錮的FTP 根目錄執(zhí)行寫入操作,而且不拒絕用戶的登錄請求
為虛擬用戶設(shè)置不同的權(quán)限
為虛擬用戶設(shè)置不同的權(quán)限。雖然賬戶 ftpuser1和 ftpuser1 都是用于 vsftpd 服務(wù)程
序認(rèn)證的虛擬賬戶,但是我們依然想對這兩人進(jìn)行區(qū)別對待。比如,允許ftpuser1上傳、創(chuàng)建、修
改、查看、刪除文件,只允許ftpuser2查看文件。這可以通過 vsftpd 服務(wù)程序來實(shí)現(xiàn)。只需新建
一個目錄,在里面分別創(chuàng)建兩個以 ftpuser1和 ftpuser2命名的文件,其中在名為 ftpuser1的文件
中寫入允許的相關(guān)權(quán)限(使用匿名用戶的參數(shù)):
也可以分別設(shè)置需求用戶登錄后看到不同的目錄,要設(shè)置權(quán)限
# cd /etc/vsftpd/vusers_dir/ # vi ftpuser1 local_root=/var/ftproot/ftpuser1# mkdir -p /var/ftproot/ftpuser1/ # chown -R virtual:virtual /var/ftproot/ftpuser1/然后再次修改 vsftpd 主配置文件,通過添加 user_config_dir 參數(shù)來定義這兩個虛擬用戶
不同權(quán)限的配置文件所存放的路徑。
測試
[root@linuxprobe ~]# ftp 192.168.10.10 ftpuser1/ftpuser2 ftp> mkdir files 257 "/files" created ftp> rename files database 350 Ready for RNTO. 250 Rename successful. ftp> rmdir database 250 Remove directory operation successful. ftp> exit 221 Goodbye.附錄:vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/xferlog xferlog_std_format=YES listen=YES pam_service_name=vsftpd.vu userlist_enable=YES tcp_wrappers=YES dual_log_enable=YES vsftpd_log_file=/var/log/vsftpd.log guest_enable=YES guest_username=virtual allow_writeable_chroot=YES user_config_dir=/etc/vsftpd/vusers_dir總結(jié)
以上是生活随笔為你收集整理的Linux系列教程(13)- 使用 ssh 服务管理远程主机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue使用speak-tts插件实现后台
- 下一篇: Xorm使用