ftp基本概念數據庫
FTP 是File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱爲「文傳協議」。用於Internet上的控制文件的雙向傳輸,支持FTP協議的服務器就是FTP服務 器;TCP/IP協議中,FTP標準命令TCP端口號爲21,Port方式數據端口爲20。FTP的任務是從一臺計算機將文件傳送到另外一臺計算機,不受操做系統的限制。FTP的傳輸有兩種方式:ASCII、二進制。安全
FTP支持兩種模式:Standard (PORT方式,主動方式),Passive (PASV,被動方式)。服務器
Port模式網絡
FTP 客戶端首先和服務器的TCP 21端口創建鏈接,用來發送命令,客戶端須要接收數據的時候在這個通道上發送PORT命令。PORT命令包含了客戶端用什麼端口接收數據。在傳送數據的時候,服務器端經過本身的TCP 20端口鏈接至客戶端的指定端口發送數據。FTP server必須和客戶端創建一個新的鏈接用來傳送數據。session
Passive模式app
創建控制通道和Standard模式相似,但創建鏈接後發送Pasv命令。服務器收到Pasv命令後,打開一個臨時端口(端口號大於1023小於65535)而且通知客戶端在這個端口上傳送數據的請求,客戶端鏈接FTP服務器此端口,而後FTP服務器將經過這個端口傳送數據。異步
不少防火牆在設置的時候都是不容許接受外部發起的鏈接的,因此許多位於防火牆後或內網的FTP服務器不支持PASV模式,由於客戶端沒法穿過防火牆打開FTP服務器的高端端口;而許多內網的客戶端不能用PORT模式登錄FTP服務器,由於從服務器的TCP 20沒法和內部網絡的客戶端創建一個新的鏈接,形成沒法工做。socket
總結:ftp 是作文件上傳下載的。。。並且還比較陳舊async
安裝:apt-get install vsftpdtcp
安裝完成後查看vsftpd各文件位置:dpkg –L vsftpd
基本配置信息
listen=YES #設定該Vsftpd服務工做在StandAlone模式下。 #所謂StandAlone模式就是該服務擁有本身的守護進程支持,在ps -A命令下咱們將可用看到vsftpd的守護進程名。 #若是不想工做在StandAlone模式下,則能夠選擇SuperDaemon模式,在該模式下 vsftpd將沒有本身的守護進程, #而是由超級守護進程Xinetd全權代理,與此同時,Vsftp服務的許多功能將得不到實現。
#listen_ipv6=YES # This directive enables listening on IPv6 sockets. By default, listening # on the IPv6 "any" address (::) will accept connections from both IPv6 # and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6 # sockets. If you want that (perhaps because you want to listen on specific # addresses) then you must run two copies of vsftpd with two configuration # files.
anonymous_enable=NO #設定不容許匿名訪 anon_upload_enable=NO #禁止匿名用戶上傳。 anon_mkdir_write_enable=NO #禁止匿名用戶創建目錄。 #chown_uploads=YES #chown_username=whoever # If you want, you can arrange for uploaded anonymous files to be owned by # a different user. Note! Using "root" for uploaded files is not # recommended! 仍是針對匿名用戶
local_enable=YES #設定本地用戶能夠訪問,和容許匿名用戶訪問 兩個選項必須開啓一個 否則ftp就自閉了 #虛擬宿主用戶,若是該項設定爲NO那麼全部虛擬用戶將沒法訪問。 write_enable=YES #設定能夠進行寫操做 local_umask=022 #設定上傳後文件的權限掩碼。注意(umask決定目錄和文件被建立時獲得的初始權限 777-022=755 ) use_localtime=YES # If enabled, vsftpd will display directory listings with the time # in your local time zone. The default is to display GMT. The # times returned by the MDTM FTP command are also affected by this # option.
xferlog_enable=YES #設定開啓日誌記錄功能 上傳/下載 #xferlog_file=/var/log/vsftpd.log # You may override where the log file goes if you like. The default is shown # below. 能夠自行設置日誌記錄地址 以上是默認地址
#idle_session_timeout=600 # You may change the default value for timing out an idle session. #設定空閒鏈接超時時間,這裏使用默認。將具體數值留給每一個具體用戶具體指定,固然若是不指定的話,仍是使用這裏的默認值600,單位秒 #data_connection_timeout=120 # You may change the default value for timing out a data connection. #設定單次最大連續傳輸時間,這裏使用默認。將具體數值留給每一個具體用戶具體指定,固然若是不指定的話,仍是使用這裏的默認值120,單位秒
#nopriv_user=ftpsecure # It is recommended that you define on your system a unique user which the # ftp server can use as a totally isolated and unprivileged user. #設定支撐Vsftpd服務的宿主用戶爲手動創建的Vsftpd用戶。注意,一旦作出更改宿主用戶後,必須注意一塊兒與該服務相關的讀寫文件的讀寫賦權問題。好比日誌文件就必須給與 該用戶寫入權限等。就是 ftp服務的操做 以該設置的用戶來進行 安全限制
#async_abor_enable=YES #設定支持異步傳輸功能。 ascii_upload_enable=YES ascii_download_enable=YES #設定支持ASCII模式的上傳和下載功能
connect_from_port_20=YES #設定端口20進行數據鏈接 port模式 主動模式 #pasv_enable=YES #被動模式設置
#chroot_local_user=YES #chroot_list_enable=YES # (default follows) #chroot_list_file=/etc/vsftpd.chroot_list # 這個控制用戶切換到主目錄外的其餘目錄 chroot_list_enable該指令控制chroot_list_file的有效性,chroot_list_file指定一個文件,記錄用戶名 #chroot_local_user爲YES表示全部用戶都*能*切換到主目錄以外其餘目錄,可是除了chroot_list_file配置的文件列出的用戶。chroot_local_user爲NO表示全部用戶都*不能*切換到主目錄以外其餘目錄,可是除了chroot_list_file配置的文件列出的用戶。也能夠理解爲,chroot_list_file列出的「例外狀況」的用戶
#userlist_deny=NO #userlist_enable=NO #userlist_file=/etc/vsftpd.user_list #userlist_enable 控制userlist_file 的有效性,userlist_enable爲YES userlist_deny配置纔有用,userlist_deny=NO 則userlist_file 配置中用戶可訪問 其餘用戶不可訪問;userlist_deny=YES 則userlist_file 配置中用戶不可訪問 其餘用戶可訪問
ls_recurse_enable=NO #禁止用戶登錄FTP後使用"ls -R"的命令。該命令會對服務器性能形成巨大開銷。若是該項被容許,那麼擋多用戶同時使用該命令時將會對該服務器形成威脅
pam_service_name=vsftpd #設定PAM服務下Vsftpd的驗證配置文件名。所以,PAM驗證將參考/etc/pam.d/下的vsftpd文件配置。
tcp_wrappers=YES #設定支持TCP Wrappers
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO # This option specifies the location of the RSA certificate to use for SSL # encrypted connections.
# Uncomment this to indicate that vsftpd use a utf8 filesystem. #utf8_filesystem=YES
|
以上配置基本能夠保證一個基本的ftp服務走系統用戶 如下是虛擬用戶的配置方式
nopriv_user=ftpsecure
*能夠檢查下以上配置中設置的文件存不存在以及相關權限設置,好比當指定了nopriv_user
那麼 該用戶就須要對 日誌等ftp服務會操做的目錄以及文件有讀寫權限
接下來要說的就是虛擬用戶的設置(該操做能夠根據不一樣虛擬用戶設置不一樣配置)
準備
1.以上配置須要額外添加
guest_enable=YES
#設定啓用虛擬用戶功能。
guest_username=**
#指定虛擬用戶的宿主用戶。 這個就是限制虛擬用戶的權限
virtual_use_local_privs=YES
#設定虛擬用戶的權限符合他們的宿主用戶。
user_config_dir=/etc/vsftpd/vconf
#設定虛擬用戶我的Vsftp的配置文件存放路徑。也就是說,這個被指定的目錄裏,將#存放每一個Vsftp虛擬用戶個性的配置文件,一個須要注意的地方就是這些配置文件名#必須和虛擬用戶名相同。
2.添加虛擬用戶
習慣性 在 /etc/vsftpd/ 下建立一個 virtualusers 文件保存虛擬用戶信息,一行用戶名 一行密碼的形式
這裏須要用到 db-util 用來將上面的用戶文件轉換成 數據庫文件 以供pam 驗證 安裝:apt-get install db-util
生成db 指令:db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
3.設置虛擬用戶的驗證方式
主配置中已經指定了pam校驗設置vsftpd cat /etc/pam.d/vsftpd 再該文件 加上
auth sufficient pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient pam_userdb.so db=/etc/vsftpd/virtusers
這裏的auth是指對用戶的用戶名口令進行驗證。這裏的accout是指對用戶的賬戶有哪些權限哪些限制進行驗證。其後的sufficient表示充分條件,也就是說,一旦在這裏經過了驗 證,那麼也就不用通過下面剩下的驗證步驟了
4.設置虛擬用戶的ftp配置信息
能夠看到和上面設置的虛擬用戶的名稱一致
szy的配置
zzr的配置
能夠看到這裏針對不一樣的虛擬用戶 作了不一樣的設置
注意:1.這裏的關鍵項是local_root這個配置,用來指定這個虛擬用戶的FTP主路徑。
2.更改虛擬用戶的主目錄的屬主爲虛擬宿主用戶:也就是說虛擬用戶的宿主用戶須要對這個設置的loacl_root目錄有操做權限
基本到這 vsftpd 的基本配置就差很少了
其餘 vsftpd的一些指令
service vsftpd start/stop/stauts/restart
後續可能要考慮的就是網絡問題。。。網絡訪問權限。。。編碼問題
開發中遇到的問題:
- 根據絕對路徑切換工做目錄 ftpClient.changeWorkingDirectory 始終返回false
調整chroot_local_user相關配置確保當前ftp用戶能夠切換到主目錄之外的目錄
奇怪的是以相對路徑來切換 能夠正常切換 該方法返回true
Over