ftp是檔案傳輸協定,基于c/s模式,即伺服器與客戶器的模式。
ftp采用雙tcp連接配接方式:
控制連接配接:用于在ftp用戶端和ftp伺服器之間傳輸ftp控制指令及指令執行資訊,控制連接配接在整個ftp會話期間一直保持打開,端口号21
資料連接配接:用于傳輸資料
,包括資料的上傳,下載下傳,檔案清單發送等。資料傳輸結束後資料連接配接終止,端口号20
ftp采用兩種資料傳輸方式:
主動方式:相對伺服器而言,
被動方式:選擇是由用戶端決定
ftp有兩種檔案傳輸模式:
ascii模式:将本地檔案傳化成ascii在傳輸,适合文本傳輸。html和文本檔案
二進制模式:檔案按照比特流的方式進行傳輸,适用于傳送程式檔案,它不轉換,速度比較快,可傳送可執行檔案,壓縮檔案和圖檔檔案。
ftp使用者的類型:
匿名使用者:anonymous,ftp 家目錄在/var/ftp
本地使用者:使用者和密碼儲存在passwd和shadow中
相當于直接登陸到系統
虛拟使用者:有自己獨立的賬戶和密碼
yum install vsftp安裝ftp
service vsftpd start啟動服務
在用戶端登陸:ftp ip位址
pwd檢視登陸的位置
在linux上:ftp ip位址
lftp -u ftptest ip位址
!ls本機的
put 上傳
上傳是要注意使用者的權限和目錄的權限
vim /etc/vsftpd/vsftpd.conf 配置檔案
anonymous_enable=yes是否允許匿名登陸
local_enable=yes是否允許本地使用者登陸
write_enable=yes本地是否有寫權限
local_umask=022對檔案的權限自動掩碼
anon_mkdir_write_enable=yes是否允許匿名建立目錄
dirmessage_enable=yes切換目錄的資訊
xferlog_enable=yes日志
xferlog_file=/var/log/vsftp日志檔案的位置
connect_from_port_20=yes确定傳輸是20端口
idel_session_timeout=600将在使用者會話空閑10分鐘後被中斷
data_connection_timeout=120将在資料連接配接空閑2分鐘後被中斷
#ascii_upload_enable=yes是否啟用ascii傳輸,預設是關閉的
如果希望使用者登陸後不能切換到自家目錄之外的目錄,可以設定chroot選項
chroot_local_user=yes本地使用者執行chroot
若設定指定的使用者執行chroot,需要如下設定:
chroot_local_user=no
chroot_list_enable=yes
chroot_list_file=/etc/vsftpd.chroot_list
這樣隻有/etc/vsftpd.chroot_list檔案中指定的使用者才能執行chroot指令
限制指定的本地使用者不能通路,而其他本地使用者可以通路,如下設定
userlist_enable=yes
userlist_deny=yes
userlist_file=/etc/vsftpd.user_list
是檔案/etc/vsftpd.user_list中指定的本地使用者不能通路ftp伺服器,而其他本地使用者可通路ftp伺服器
若userlist_deny=no則是限定指定的本地使用者可以通路,而其他本地使用者不可以通路ftp伺服器
安全方面:
setenforce 1 開啟selinux
若開啟selinux會有限制
getsebool -a | grep ftp 檢視權限
setsebool -p allow_ftpd_anon_write on允許寫權限,可以根據需要進行不同的設定
tcpdump是個捕獲工具
tcpdump -d顯示本地網絡接口
tcpdump -i eth0 -a dst host 192.168.0.11隻要有通路192.168.0.11的資料包通過eth0就進行捕獲
ftp傳輸是明文的,我們要使用ssl會話加密,證書加密
cd /etc/pki/ca
mkdir certs newcerts crl
touch index.txt serial
echo 01> seria
openssl genrsa 1024>private/cakey.pem
chmod 600 private/cakey.pem
openssl req -new -x509 -key private/cakey.pem
然後填一些資訊,自簽證書完成
在用戶端 cd /etc/vsftpd/
mkdir ssl
openssl genrsa 1024 >ftp.key生成私鑰
openssl req -new -key vsftpd.key -out ftp.csr
在/etc/vsftpd/vsftpd.conf
ssl_enale=yes是否開啟ssl
ssl_tlsv1=yes版本
ssl_tlsv2=yse
ssl_tlsv3=yes
allow_anon_ssl=no是否允許匿名使用者使用ssl
force_local_data_ssl=yes本地資料是否強行加密
force_local_logins_ssl=yes本地登入是否強行加密
rsa_cert_file=/etc/vsftp/ssl/vsftpd_cert.pem
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd_key.pem
建構基于虛拟使用者的vsftpd伺服器
1建立虛拟使用者的賬号和密碼,并儲存在資料庫中
vim /etc/vsftpd/vusers_listvusers
zhou
123
yum install db4-utils
cd /etc/vsftpd/
db_load -t -t hash -f vusers.list vusersdb通過hash算法傳化成資料庫檔案
file vusers.db
chown 600 /etc/vsftpd/vusers.*
2建立ftp根目錄及虛拟使用者映射的系統使用者
mkdir /var/ftproot
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod 755 /var/ftproot
3建立支援虛拟使用者的pam認證
vim /etc/pam.d/vsftpd.vu
#%pam-1.0
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so.db=/etc/vsftpd/vusers
auth 檢查賬号密碼
account 檢查賬号是否過期,是否有權
登入
required要求必須通過,否側結束退出
requisite隻要通過一項即可
後面上資料庫檔案的位置
4在vsftpd.conf檔案中添加支援配置
vim /etc/vsftpd/csftpd.conf
anonymous_enable=no
local_enable=yes
write_enable=yes
anon_umask=022
guest_enable=yes
guest_username=virtual
pam_service_name=vsftpd.vu
5.為個别虛拟使用者建立獨立的配置檔案
在vsftpd.conf檔案中添加使用者配置目錄支援
user_config_dir=/etc/vsftpd/vusers_dir
為使用者mike、john建立獨立的配置目錄及檔案
配置檔案名與使用者名同名
mkdir /etc/vsftpd/vusers_dir/
cd /etc/vsftpd/vusers_dir/
touch mike
vim john
anon_upload_enable=yes
anon_mkdir_write_enable=yes
6.重新加載vsftpd配置
service vsftpd reload
7.使用虛拟ftp賬戶通路測試
分别用mike、john使用者登入ftp伺服器進行下載下傳、上傳測試
mike使用者可以登入,并可以浏覽、下載下傳檔案,但無法上傳
john使用者可以登入,并可以浏覽、下載下傳檔案,也可以上傳
匿名使用者或其他系統使用者将不能登入
ftp的典型消息
在用于ftp客戶程式與ftp伺服器進行通信時,經常會看到一些由ftp伺服器發送消息,這些消息是ftp協定所定義的。下面列出典型的ftp消息:
消息号
125:資料連接配接打開,傳輸開始
200:指令ok
226:資料傳輸完畢
331:使用者名ok
425:不能打開資料連接配接
426:資料連接配接被關閉,傳輸被中斷
452:錯誤寫檔案
500:文法錯誤,不可識别的指令