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必須和客戶端建立一個新的連接用來傳送數據。
Passive模式
建立控制通道和Standard模式類似,但建立連接后發送Pasv命令。服務器收到Pasv命令后,打開一個臨時端口(端口號大於1023小於65535)並且通知客戶端在這個端口上傳送數據的請求,客戶端連接FTP服務器此端口,然后FTP服務器將通過這個端口傳送數據。
很多防火牆在設置的時候都是不允許接受外部發起的連接的,所以許多位於防火牆后或內網的FTP服務器不支持PASV模式,因為客戶端無法穿過防火牆打開FTP服務器的高端端口;而許多內網的客戶端不能用PORT模式登陸FTP服務器,因為從服務器的TCP 20無法和內部網絡的客戶端建立一個新的連接,造成無法工作。
總結:ftp 是做文件上傳下載的。。。而且還比較陳舊
安裝:apt-get install vsftpd
安裝完成后查看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