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/