=====
FTP(file transfer protocol)
=====
網絡文件共享的幾種方式
HTTP NFS(unix like) SAMBA FTP
vsftpd (Very Secure FTP)
ftp需要兩個端口
21:命令端口
20:數據端口
是一種跨平臺的文件傳輸工具。
ftp有兩種傳輸模式
1、主動模式
服務器的端口:21,20
2、被動模式
服務器的端口:21,隨機端口
ftp主動模式和被動模式的區別:
主動模式:
主動模式的過程:
任何端口到FTP服務器的21端口(客戶端初始化的連接 S<-C)
FTP服務器的21端口到大於1023的端口(服務器響應客戶端的控制端口S->C)
FTP服務器的20端口到大於1023的端口(服務器端初始化數據連接到客戶端的數據端口 S->C)
大於1023端口到FTP服務器的20端口(客戶端發送ACK響應到服務器的數據端口 S<-C)
當用戶登錄到ftp服務器的時候,匿名用戶進入到/var/ftp,系統帳戶進入到自己的家目錄
ftp的被動模式
從任何端口到服務器的21端口(客戶端初始化的連接 S<-C)
服務器的21端口到任何大於1023的端口(服務器響應到客戶端的控制端口的連接 S->C)
從任何端口到服務器的大於1023端口(入;客戶端初始化數據連接到服務器指定的任意端口 S<-C)
服務器的大於1023端口到遠程的大於1023的端口(出;服務器發送 ACK響應和數據到客戶端的數據端口 S->C)
軟件安裝:
#yum install vsftpd -y
服務啓動:
#servicevsftpd start
#/etc/init.d/vsftpdstart
#chkconfigvsftpd on
# netstat -antulp | grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 28997/vsftpd
配置文件的位置:
/etc/vsftpd/vsftpd.conf
在編輯配置文件之前,最好備份一份,以防萬一
ftp配置的目標:
1、搞定匿名帳戶的訪問
2、本地帳戶
3、虛擬帳戶
匿名用戶訪問:
#vi /etc/vsftpd/vsftpd.conf
12anonymous_enable=YES //允許匿名用戶登錄
//匿名用戶指的是: ftpanonymous
28anon_upload_enable=YES //匿名用戶可以上傳
#cd /
# touch a
# ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,50,241)
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Oct 13 13:29 pub
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (127,0,0,1,191,136)
150 Here comes the directory listing.
226 Directory send OK.
ftp> put a
local: a remote: a
227 Entering Passive Mode (127,0,0,1,192,96)
553 Could not create file.
ftp> quit
221 Goodbye.
允許匿名用戶上傳但是爲什麼上傳不了文件呢?
還必須看目錄有沒有可寫權限。
# chmod 777 /var/ftp/pub
# ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,200,175)
150 Here comes the directory listing.
drwxrwxrwx 2 0 0 4096 Oct 13 13:29 pub
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> put a
local: a remote: a
227 Entering Passive Mode (127,0,0,1,168,25)
150 Ok to send data.
226 File receive OK.
ftp> quit
221 Goodbye.
----------------------------------------------
本地帳戶
指的就是服務器本身的擁有的帳號
vim/etc/vsftpd/vsftpd.conf
anonymouns_enable=NO
#anon_upload_enable=YES
15 local_enable=YES
//本地帳戶認證方式啓動
18 write_enable=YES
//表示開啓寫權限
22 local_umask=022
//表示上傳文件的權限掩碼
/etc/init.d/vsftpdrestart
ftplocalhost
ftp>cd /etc
ftp>pwd
/etc
那麼這個時候,就可以下載u1擁有權限的任意文件。用戶u1可以隨意切換所在目錄
解決用戶瞎溜達的問題?
vim/etc/vsftpd/vsftpd.conf
96 chroot_list_enable=YES
98 chroot_list_file=/etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list
u1
u2
//表示這是一個關於chroot的黑名單,凡是在chroot_list中出現的用戶名
//都會實現chroot的限制
限制所有的本地用戶:
vim/etc/vsftpd/vsftpd.conf
chroot_local_user=YES
限制用戶chroot的白名單設置:
vim/etc/vsftpd/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
//chroot_list文件中,列出不進行chroot限制的用戶列表
ftp
虛擬帳戶
具體實現:
1.通過創建本地數據庫實現虛擬用戶
#yum install db4-utils -y
創建一個用於映射虛擬用戶的真實用戶:
#useradd -d /var/ftp/vuserdir -s /sbin/nlogin vuser
2.修改配置文件:
#vim/etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
3.生成虛擬用戶文件
#vim/etc/vsftpd/vftpuser.txt
neo
123
mike
456
4.生成虛擬用戶數據文件
#db_load -T -t hash -f /etc/vsftpd/vftpuser.txt/etc/vsftpd/vftpuser.db
#chmod600 /etc/vsftpd/vftpuser.db
5.創建一個新的pam認證程序
vim/etc/pam.d/vsftpd1
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser
#vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd1
/etc/init.d/vsftpdrestart
登錄之後,出現這樣的問題:
226Transfer done (but failed to open directory).
修改配置文件:
vim/etc/vsftpd/vsftpd.conf
anon_world_readable_only=NO
額外的ftp配置:
vim/etc/vsftpd/vsftpd.conf
ftpd_banner=Welcometo uplooking ftp service
anon_max_rate=100 (單位是字節)
max_clients=1
deny_file={*.ext,*.dll}
關於用戶訪問控制的兩個文件:
user_list
ftpusers
綜合練習:
在一臺主機上創建三個基於域名的虛擬主機,每個主機的磁盤配額爲80M,90M,100M,使用ftp分別管理三個虛擬主機,每個虛擬主機的管理員,只能管理自己的虛擬主機。要求,每個網站的磁盤具有高性能,高可靠性,並且可以磁盤擴展。
附錄:
vsftpd.conf的參數:Anonymous_enable=yes 允許匿名登陸
Dirmessage_enable=yes 切換目錄時,顯示目錄下.message的內容
Local_umask=022 FTP上本地的文件權限,默認是077
Connect_form_port_20=yes 啓用FTP數據端口的數據連接*
Xferlog_enable=yes 激活上傳和下傳的日誌
Xferlog_std_format=yes 使用標準的日誌格式
Ftpd_banner=XXXXX 歡迎信息
Pam_service_name=vsftpd 驗證方式*
Listen=yes 獨立的VSFTPD服務器*
Anon_upload_enable=yes 開放上傳權限
Anon_mkdir_write_enable=yes 可創建目錄的同時可以在此目錄中上傳文件
Write_enable=yes 開放本地用戶寫的權限
Anon_other_write_enable=yes 匿名帳號可以有刪除的權限
Anon_world_readable_only=no 放開匿名用戶瀏覽權限
Ascii_upload_enable=yes 啓用上傳的ASCII傳輸方式
Ascii_download_enable=yes 啓用下載的ASCII傳輸方式
Banner_file=/var/vsftpd_banner_file 用戶連接後歡迎信息使用的是此文件中的相關信息
Idle_session_timeout=600(秒) 用戶會話空閒後10分鐘
Data_connection_timeout=120(秒)將數據連接空閒2分鐘斷
Accept_timeout=60(秒)將客戶端空閒1分鐘後斷
Connect_timeout=60(秒)中斷1分鐘後又重新連接
Local_max_rate=50000(bite)本地用戶傳輸率50K
Anon_max_rate=30000(bite)匿名用戶傳輸率30K
Pasv_min_port=50000 將客戶端的數據連接端口改在
Pasv_max_port=60000 50000—60000之間
Max_clients=200 FTP的最大連接數
Max_per_ip=4 每IP的最大連接數
Listen_port=5555 從5555端口進行數據連接
Local_enble=yes 本地帳戶能夠登陸
Write_enable=no 本地帳戶登陸後無權刪除和修改文件
下面這是一組
Chroot_local_user=yes 本地所有帳戶都只能在自家目錄
Chroot_list_enable=yes 文件中的名單可以調用
Chroot_list_file=/任意指定的路徑/vsftpd.chroot_list 前提是chroot_local_user=no
這又是一組
Userlist_enable=yes 在指定的文件中的用戶不可以訪問
Userlist_deny=yes
Userlist_file=/指定的路徑/vsftpd.user_list
又開始單的了
Banner_fail=/路徑/文件名連接失敗時顯示文件中的內容
Ls_recurse_enable=no
Async_abor_enable=yes
one_process_model=yes
Listen_address=10.2.2.2 將虛擬服務綁定到某端口
Guest_enable=yes 虛擬用戶可以登陸
Guest_username=所設的用戶名將虛擬用戶映射爲本地用戶
User_config_dir=/任意指定的路徑/爲用戶策略自己所建的文件夾指定不同虛擬用戶配置文件的路徑
又是一組
Chown_uploads=yes 改變上傳文件的所有者爲root
Chown_username=root
又是一組
Deny_email_enable=yes 是否允許禁止匿名用戶使用某些郵件地址
Banned_email_file=//任意指定的路徑/xx/
又是單的
Pasv_enable=yes 服務器端用被動模式
User_config_dir=/任意指定的路徑//任意文件目錄指定虛擬用戶存放配置文件的路徑