LINUX: ftp,sftp,scp網絡傳輸命令配置及使用


ftp

ftp是linux比較經典的命令之一,是由File Transfer Protocol協議縮寫而來,ftp用作下載文件在因特網上使用廣泛,大多數瀏覽器都支持ftp命令,URI:ftp:// .即能夠讓用戶在互聯網中上傳、下載文件的文件協議.FTP服務器就是支持FTP傳輸協議的主機,要想完成文件傳輸則需要FTP服務端和FTP客戶端的配合才行。

ftp並不安全,因爲它以明文的方式傳送賬戶名和密碼。匿名ftp服務器允許任何人使用annoymous登錄名以及其無意義的密碼登錄

FTP協議佔用兩個端口號:
21端口:命令控制,用於接收客戶端執行的FTP命令。
20端口:數據傳輸,用於上傳、下載文件數據。

常用命令:

命令 含義
ftp fileserver 啓動ftp程序建立與服務器filesever 的連接
annoymous 登錄名
cd path 打開
ls 列出遠程系統上的目錄列表
lcd Descltop 登錄到本地系統的~/Descltop 目錄下
get file 下載file文件到本地
bye/exit/quit 註銷/退出

安裝

這裏以redhat7 爲例,安裝vsftpd服務程序。

yum install vsftpd  //直接安裝就可以,這是服務器端

這裏寫圖片描述

yum search all ftp  //查詢客戶端並安裝
yum install ftp.x86_64   //這是我查詢出來的,可以不安裝客戶端,因爲只需要在服務器上安裝vsftpd就可以,但是這樣方便測試

這裏寫圖片描述

安裝完成後,用ststemctl start vsftpd啓動,就可以用此客戶端來進行連接了,這裏用匿名方式
這裏寫圖片描述
FTP匿名訪問模式是比較不安全的服務模式,尤其在真實的工作環境中千萬不要存放敏感的數據,以免露。vsftpd程序默認已經允許匿名訪問模式,配置文件/etc/vsftpd/vsftpd.conf

配置

默認的配置。由於默認的配置文件有很多註釋行,所以我們去掉這些註釋看一下默認的配置。

mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak   //移動一下
grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf //去掉#號
(默認的配置)參數 作用
anonymous_enable=YES 是否允許匿名用戶訪問
local_enable=YES 是否允許本地用戶登錄
write_enable=YES 是否可寫
local_umask=022 本地默認的umask值。
anon_mkdir_write_enable=YES 是否允許匿名用戶創建目錄。
dirmessage_enable=YES 用戶進入一個目次後,是否給出靜態提示
xferlog_enable=YES 表明FTP服務器記錄上傳下載的情況
connect_from_port_20=YES 當主動模式開啓的時候 是否啓用默認的20端口監聽
xferlog_std_format=YES 表明FTP服務器記錄情況的格式化輸出
listen=NO 是否以獨立運行的方式監聽服務。
pam_service_name=vsftpd 指定pam文件
userlist_enable=YES 允許“禁止登陸名單”,名單文件爲ftpusers與user_list。
tcp_wrappers=YES 支持tcp_wrappers,限制訪問(/etc/hosts.allow,/etc/hosts.deny)

更多配置
vsftpd程序配置文件參數的作用:

參數 作用
listen=[YES|NO] 是否以獨立運行的方式監聽服務。
listen_address=IP地址 設置要監聽的IP地址。
listen_port=21 設置FTP服務的監聽端口。
download_enable=[YES|NO] 是否允許下載文件。
userlist_enable=[YES|NO]
userlist_deny=[YES|NO] 是否啓用“禁止登陸用戶名單”。
max_clients=0 最大客戶端連接數,0爲不限制。
max_per_ip=0 同一IP地址最大連接數,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] 是否允許匿名用戶創建目錄。
anon_other_write_enable=[YES|NO] 是否開放匿名用戶其他寫入權限。
anon_max_rate=0 匿名用戶最大傳輸速率(字節),0爲不限制。
local_enable=[YES|NO] 是否允許本地用戶登陸FTP。
local_umask=022 本地用戶上傳文件的umask值。
local_root=/var/ftp 本地用戶的FTP根目錄。
anon_root=/var/anonftp 匿名用戶的ftp根目錄
chroot_local_user=[YES|NO] 是否將用戶權限禁錮在FTP目錄,更加的安全。
local_max_rate=0 本地用戶最大傳輸速率(字節),0爲不限制。

驗證方式

vsftpd程序提供的FTP服務可選認證方式,分別爲匿名訪問、本地用戶和虛擬用戶:

匿名訪問:任何人無需驗證口令即可登入FTP服務端,即上面的例子,annoymous登錄(不安全)。
本地用戶:使用FTP服務器中的用戶、密碼信息(安全性一般)。
虛擬用戶:創建獨立的FTP帳號資料(最安全的方式,若配置ftp服務器,強烈建議使用這種方式)。


匿名訪問模式時的一些設置參數信息,在生產上的時候,應直接禁止匿名訪問方式,以確保安全性。

參數 作用
anonymous_enable=YES 允許匿名訪問模式。
anon_umask=022 匿名用戶上傳文件的umask值。
anon_upload_enable=YES 允許匿名用戶上傳文件
anon_mkdir_write_enable=YES 允許匿名用戶創建目錄
anon_other_write_enable=YES 允許匿名用戶修改目錄名或刪除目錄

由於默認啓用了userlist_enable=YES 允許禁止登錄名單,所以這也可以認爲是一個安全的設置,對於這兩個名單文件,也和配置文件在同一個目錄下

這裏寫圖片描述

由於SELinux 對 ftp模式做了限制 所以我們在這裏先查看一下,再將限制放開

getsebool -a | grep ftp

這裏寫圖片描述

setsebool -P ftpd_full_access=on   

由於root用戶在“禁止登錄名單中,所以需要其他的用戶來進行操作,若不希望某用戶可以進行操作,可將起添加到進制登錄用戶名單中,文件和ftp的配置文件在一個目錄下”

虛擬用戶模式(參考網絡部分)

    爲虛擬用戶模式的帳號口令都不是真實系統中存在的,具體流程如下:
        第1步:建立虛擬FTP用戶數據庫文件。
        第2步:創建FTP根目錄及虛擬用戶映射的系統用戶。
        第3步:建立支持虛擬用戶的PAM認證文件。
        第4步:在vsftpd.conf文件中添加支持配置。
        第5步:爲虛擬用戶設置不同的權限。
  • 在 /etc/vsftpd/ 目錄下創建用於生成FTP用戶數據庫的原始帳號和密碼文件
vim vuser.list   //創建文件

這裏寫圖片描述

  • 這裏說一下db_load命令

db_load主要是用來生成db數據庫使用的 。
比如:在Vsftpd的虛擬用戶設置 中先新建一個文件users.txt 把用戶名密碼放入其中
接着

參數 意義
-T 允許應用程序能夠將文本文件轉譯載入進數據庫。由於我們之後是將虛擬用戶的信息以文件方式存儲在文件裏的,如果指定了選項-T,那麼一定要追跟子選項-t
-t 子選項-t,追加在在-T選項後,用來指定轉譯載入的數據庫類型。擴展介紹下,-t可以指定的數據類型有Btree、Hash、Queue和Recon數據庫。
-f 參數後面接包含用戶名和密碼的文本文件,文件的內容是:奇數行用戶名、偶數行密碼
db_load -T -t hash -f   /etc/vsftpd/users.txt    /etc/vsftpd/users.db    //命令的執行

這樣就生成了一個users.db文件(hash碼型的數據庫文件)
這裏寫圖片描述

所以:使用db_load命令用HASH算法生成FTP用戶數據庫文件vuser.db

db_load -T -t hash -f vuser.list vuser.db    //生成數據庫文件vuser.db
rm -rf vuser.list   //刪除之前的文件,由於已經生成了數據庫文件了,這個文件沒用了,也可以不刪除,每次新增用戶後,再次生成就可以
  • 創建虛擬用戶

    創建用戶ftproot並設置爲不允許登陸系統並定義該用戶的家目錄:

useradd -d /home/ftproot -s /sbin/nologin ftproot   //創建用戶
chmod -R 755 /home/ftproot/    //賦予大一點的權限,即允許其他的用戶讀寫
  • 建立支持虛擬用戶的PAM認證文件:

在目錄 /etc/pam.d 下存放的是PAM認證文件,進入這個目錄,可以看到有一個vsftpd文件,這個文件就是,當然也可以創建一個單獨的vsftpd 的PAM配置文件。

這裏寫圖片描述

查看一下這個文件的信息
vim vsftpd   //查看一下

這裏寫圖片描述

這裏根據這個格式重新創建一個文件

vim /etc/pam.d/vsftpd.vu   //新創建的文件

根據上面的信息,在這個文件裏面新增兩行

//參數db用於指向剛剛生成的vuser.db文件,但不要寫後綴。
auth       required     pam_userdb.so db=/etc/vsftpd/vuser
account    required     pam_userdb.so db=/etc/vsftpd/vuser
  • 在vsftpd.conf文件中添加支持配置

即關閉匿名訪問模式,開啓本地和虛擬用戶訪問模式

 vim /etc/vsftpd/vsftpd.conf
參數 作用
anonymous_enable=NO 禁止匿名開放模式。
local_enable=YES 允許本地用戶模式。
guest_enable=YES 開啓虛擬用戶模式。
guest_username=ftproot 指定虛擬用戶帳號,即上面所新增的用戶
pam_service_name=vsftpd.vu 指定pam文件,默認的是vsftpd,即那個默認的文件
allow_writeable_chroot=YES 允許禁錮的FTP根目錄可寫而不拒絕用戶登入請求。

- 爲虛擬用戶設置不同的權限

無論是哪個用戶,默認不能上傳、創建、修改文件,如果希望用戶blackshield能夠完全的管理FTP內的資料,就需要讓FTP程序支持獨立的用戶權限配置文件了:

vim /etc/vsftpd/vsftpd.conf   //新增 user_config_dir=/etc/vsftpd/vusers_dir,指定用戶獨立的權限配置文件存放的目錄
mkdir /etc/vsftpd/vusers_dir/   //創建該目錄
cd /etc/vsftpd/vusers_dir/    //進入該目錄,創建在db_load時生成的三個用戶信息
vim  ftp1   vim  ftp2   vim  ftp3  //創建三個用戶的信息,這裏給哪個文件下面的配置,那麼哪個用戶就有權限
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
systemctl restart vsftpd//重啓
setsebool -P ftpd_full_access=on //開啓selinux對ftp 的策略

這樣,就把生成的用戶文件(hash) 與ftp的配置信息聯繫起來了


sftp

OpenSSH 軟件包含了兩個使用SSH加密隧道進行網絡間文件複製的程序,即scp(secure copy)和sftp.顧名思義,它是ftp的安全版本,sftp與我們之前使用的ftp程序功能極爲相似。相比ftp而言,並不需要主機上運行ftp服務器,僅僅需要ssh服務器,這就意味着任何與SSH客戶端連接的遠程機器都可以當作FTP服務器使用。

sftp user@host //這種方式連接後,會直接要求輸入密碼
sftp host //連接後,會要求輸入賬號和密碼
常用命令 意義
help 顯示幫助信息,輸入此命令即可查看大多數命令的使用說明,可以看看sftp支持哪些命令。
pwd和lpwd pwd是看遠端服務器的目錄, 即sftp服務器默認的當前目錄。 lpwd是看linux本地目錄
ls和lls ls是看sftp服務器下當前目錄下的東東, lls是看linux當前目錄下的。
put a.txt 這個是把linux當前目錄下的a.txt文件上傳到sftp服務器的當前目錄下
get b.txt 這個是把sftp服務器當前目錄下的b.txt文件下載到linux當前目錄下。
!command 這個是指在linux上執行command這個命令, 比如!ls是列舉linux當前目錄下的文件, !rm a.txt是刪除linux當前目錄下的a.txt文件。這個命令非常非常有用, 因爲在sftp> 後輸入命令, 默認值針對sftp服務器的, 所以執行rm a.txt刪除的是sftp服務器上的a.txt文件, 而非本地的linux上的a.txt文件。
exit和quit 退出

scp

(secure copy 安全傳輸):遠程安全傳輸命令,類似的有rcp,不過傳輸不加密。
linux 的 scp 命令 可以 在 linux 之間複製 文件 和 目錄;
從 本地 複製到 遠程 :

    命令格式: 
            scp local_file remote_username@remote_ip:remote_folder
            或者 
            scp local_file remote_username@remote_ip:remote_file
            或者 
            scp local_file remote_ip:remote_folder
            或者 
            scp local_file remote_ip:remote_file

第1,2個指定了用戶名,命令執行後需要再輸入密碼,第1個僅指定了遠程的目錄,文件名字不變,第2個指定了文件名; 
第3,4個沒有指定用戶名,命令執行後需要輸入用戶名和密碼,第3個僅指定了遠程的目錄,文件名字不變,第4個指定了文件名; 
    * 例子: 
            scp /home/space/music/1.mp3 [email protected]:/home/root/others/music 
            scp /home/space/music/1.mp3 [email protected]:/home/root/others/music/001.mp3 
            scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music 
            scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music/001.mp3 

若是複製目錄的話,只需要加上參數 -r 就可以.若加上用戶名的話,則需要輸入密碼,若不加,則需要輸入用戶名和密碼來驗證。

常用參數 意義
-v 和大多數 linux 命令中的 -v 意思一樣 , 用來顯示進度 . 可以用來查看連接 , 認證 , 或是配置錯誤 .
-r 傳送文件夾時請加此參數
-P 選擇端口 . 注意 -p 已經被 rcp 使用 .
-4 強行使用 IPV4 地址 .
-6 強行使用 IPV6 地址 .

反過來若需要從遠程主機下載到本地,只需要將參數順序顛倒就可以。當然若下載的話也可以用wget來實現下載。

例如:

    scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3 
    scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/

發佈了33 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章