文件傳輸協議FTP
一、File Transfer Protocol 早期的三個應用級協議之一
二、基於C/S結構
三、雙通道協議:
數據和命令鏈接
數據鏈接則是從命令決定傳輸數據開始到數據傳輸結束,這個鏈接則關閉了
客戶端發起請求服務端響應、雙方正式創建鏈接。而結束,這是命令鏈接的正常工做邏輯
數據鏈接是臨時根據命令需求創建的、根本目的是爲了客戶端上傳數據給服務端
數據鏈接誰給打開
數據鏈接若是是爲服務器端主動去鏈接客戶端的稱爲主動模式
由客戶端發請求、服務端響應、稱爲被動模式
FTP多數都是工做在被動模式下,由客戶端發請求來鏈接服務器
四、數據傳輸格式:
二進制(默認)和文本
五、兩種模式:服務器角度
主動(PORT style):服務器主動鏈接
命令(控制):客戶端:隨機port --- 服務器:tcp21
數據:客戶端:隨機port ---服務器:tcp20
被動(PASV style):客戶端主動鏈接
命令(控制):客戶端:隨機port --- 服務器:tcp21
數據:客戶端:隨機port --- 服務器:隨機port
六、服務器被動模式數據端口示例:
227 Entering Passive Mode (172,16,0,1,224,59)
服務器數據端口爲:224*256+59
FTP軟件介紹:
FTP服務器:
Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
vsftpd:Very Secure FTP Daemon,CentOS默認FTP服務器
高速,穩定,下載速度是WU-FTP的兩倍
ftp.redhat.com數據:單機最多可支持15000個併發
客戶端軟件:
ftp,lftp,lftpget,wget,curl
ftp -A ftpserver port -A主動模式 –p 被動模式
lftp –u username ftpserver
lftp username@ftpserver
lftpget ftp://ftpserver/pub/file
gftp:GUI centos5 最新版2.0.19 (11/30/2008)
filezilla,CuteFtp,FlashFXP,LeapFtp
IE ftp://username:password@ftpserver
FTP服務
狀態碼:
1XX: 信息 125:數據鏈接打開
2XX: 成功類狀態 200:命令OK 230:登陸成功
3XX: 補充類 331:用戶名OK
4XX: 客戶端錯誤 425:不能打開數據鏈接
5XX: 服務器錯誤 530:不能登陸
用戶認證:
匿名用戶:ftp,anonymous,對應Linux用戶ftp
系統用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow
虛擬用戶:特定服務的專用用戶,獨立的用戶/密碼文件
nsswitch:network service switch名稱解析框架
pam:pluggable authentication module 用戶認證
/lib64/security /etc/pam.d/ /etc/pam.conf
vsftpd服務
一、由vsftpd包提供
二、再也不由xinetd管理
三、用戶認證配置文件:
/etc/pam.d/vsftpd
四、服務腳本:
/usr/lib/systemd/system/vsftpd.service
/etc/rc.d/init.d/vsftpd
五、配置文件:
/etc/vsftpd/vsftpd.conf
man 5 vsftpd.conf
格式:option=value
注意:= 先後不要有空格
六、匿名用戶(映射爲系統用戶ftp )共享文件位置:
/var/ftp
七、系統用戶共享文件位置:
用戶家目錄
八、虛擬用戶共享文件位置:
爲其映射的系統用戶的家目錄
九、命令端口
listen_port=21
十、主動模式端口
connect_from_port_20=YES 主動模式端口爲20
ftp_data_port=20 (默認) 指定主動模式的端口
十一、被動模式端口範圍
linux 客戶端默認使用被動模式
windows 客戶端默認使用主動模式
pasv_min_port=6000 0爲隨機分配
pasv_max_port=6010
十二、使用當地時間
use_localtime=YES 使用當地時間(默認爲NO,使用GMT)
1三、匿名用戶
anonymous_enable=YES 支持匿名用戶
no_anon_password=YES(默認NO) 匿名用戶略過口令檢查
anon_world_readable_only (默認YES) 只能下載所有讀的文件
anon_upload_enable=YES 匿名上傳,注意:文件系統權限
anon_mkdir_write_enable=YES 匿名建目錄
anon_umask=0333 指定匿名上傳文件的umask,默認077
anon_other_write_enable=YES 可刪除和修改上傳的文件
chown_uploads=YES(默認NO) 指定上傳文件的默認的全部者和權限
chown_username=wang
chown_upload_mode=0644
1四、Linux系統用戶
local_enable=YES 是否容許linux用戶登陸
write_enable=YES 容許linux用戶上傳文件
local_umask=022 指定系統用戶上傳文件的默認權限
guest_enable=YES 全部系統用戶都映射成guest用戶
guest_username=ftp 配合上面選項才生效,指定guest用戶
local_root=/ftproot guest用戶登陸所在目錄
1五、禁錮全部系統用戶在家目錄中
chroot_local_user=YES(默認NO,不由錮)禁錮系統用戶
1六、禁錮或不由錮特定的系統用戶在家目錄中,與上面設置功能相反
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
當chroot_local_user=YES時,則chroot_list中用戶不由錮
當chroot_local_user=NO時,則chroot_list中用戶禁錮
1七、wu-ftp日誌:
默認啓用
xferlog_enable=YES (默認)啓用記錄上傳下載日誌
xferlog_std_format=YES (默認) 使用wu-ftp日誌格式
xferlog_file=/var/log/xferlog (默認)可自動生成
vsftpd日誌:
默認不啓用
dual_log_enable=YES 使用vsftpd日誌格式,默認不啓用
vsftpd_log_file=/var/log/vsftpd.log(默認)可自動生成
1八、登陸提示信息
ftpd_banner="welcome to mage ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt 優先上面項生效
目錄訪問提示信息
dirmessage_enable=YES (默認)
message_file=.message(默認)
信息存放在指定目錄下.message
1九、使用pam(Pluggable Authentication Modules)完成用戶認證
pam_service_name=vsftpd
pam配置文件:/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers 默認文件中用戶拒絕登陸
正常狀況下,任何一個文件經過網絡服務訪問時,他應該受控於兩個維度
1、受控於軟件自己定義的訪問控制規則
2、受控於文件系統
20、是否啓用控制用戶登陸的列表文件
userlist_enable=YES 默認有此設置
userlist_deny=YES(默認值) 黑名單,不提示口令,NO爲白名單
userlist_file=/etc/vsftpd/users_list 此爲默認值
vsftpd服務指定用戶身份運行
nopriv_user=nobody (默認值)
鏈接數限制
max_clients=0 最大併發鏈接數
max_per_ip=0 每一個IP同時發起的最大鏈接數
傳輸速率:字節/秒
anon_max_rate=0 匿名用戶的最大傳輸速率
local_max_rate=0 本地用戶的最大傳輸速率
鏈接時間:秒爲單位
connect_timeout=60 主動模式數據鏈接超時時長
accept_timeout=60 被動模式數據鏈接超時時長
data_connection_timeout=300 數據鏈接無數據輸超時時長
idle_session_timeout=60 無命令操做超時時長
優先以文本方式傳輸
ascii_upload_enable=YES
ascii_download_enable=YES
vsftpd匿名用戶配置示例
簡單示例:只要安裝好以後啓動服務就能夠正常使用ftp
1、安裝vsftpd軟件
[root@node6 ~]#yum -y install vsftpd
2、啓動vsftpd服務
[root@node6 ~]#systemctl start vsftpd
3、經過客戶端來訪問作個簡單測試
[root@node7 ~]#lftp 192.168.137.56
lftp 192.168.137.56:~> ls
drwxr-xr-x 2 0 0 6 Aug 03 2017 pub
lftp 192.168.137.56:/> cd pub
lftp 192.168.137.56:/pub> ls
lftp 192.168.137.56:/pub> ls
-rw-r--r-- 1 0 0 23 Oct 22 12:26 issue
lftp 192.168.137.56:/pub> lcd /tmp
lcd ok, local cwd=/tmp
lftp 192.168.137.56:/pub> mget issue
23 bytes transferred
lftp 192.168.137.56:/pub> bye
[root@node7 ~]#ls /tmp/
issue
四、把服務端共享的文件權限改爲600
[root@node6 /var/ftp/pub]#chmod 600 issue
[root@node6 /var/ftp/pub]#ll
total 4
-rw------- 1 root root 23 Oct 22 20:26 issue
五、再次經過客戶端鏈接而後下載此文件
[root@node7 ~]#lftp 192.168.137.56
lftp 192.168.137.56:/> cd pub/
lftp 192.168.137.56:/pub> ls
-rw------- 1 0 0 23 Oct 22 12:26 issue
lftp 192.168.137.56:/pub> mget issue
mget: Access failed: 550 Failed to open file. (issue)
lftp 192.168.137.56:/pub>
配置匿名用戶上傳、下載、等功能:
修改配置文件,打開容許匿名用戶上傳功能
[root@node6 /etc/vsftpd]#vim vsftpd.conf
#anon_upload_enable=YES
anon_upload_enable=YES
經過客戶端驗證
[root@node7 ~]#lftp 192.168.137.56
lftp 192.168.137.56:~> lcd /etc/
lcd ok, local cwd=/etc
lftp 192.168.137.56:~> put fstab
put: Access failed: 553 Could not create file. (fstab)
lftp 192.168.137.56:/>
正常狀況下,ftp的用戶anonymous被映射爲ftp用戶,而默認共享的pub目錄屬主屬組默認爲root,而ftp用戶被映射爲其它用戶是沒有寫權限,因此致使沒法上傳,建議不要修改pub的權限,最好新建一個目錄用來上傳
解決方法:在pub同級目錄下新建一個目錄專門用來上傳,修改目錄的所屬組和屬主權限爲ftp
[root@node6 /var/ftp]#mkdir upload
[root@node6 /var/ftp]#ls
pub upload
[root@node6 /var/ftp]#ll
total 0
drwxr-xr-x 2 root root 19 Oct 22 20:26 pub
drwxr-xr-x 2 root root 6 Oct 22 20:52 upload
[root@node6 /var/ftp]#chown -R ftp.ftp upload/
[root@node6 /var/ftp]#ll -ld upload/
drwxr-xr-x 2 ftp ftp 6 Oct 22 20:52 upload/
再次驗證客戶端
[root@node7 ~]#lftp 192.168.137.56/upload
cd ok, cwd=/upload
lftp 192.168.137.56:/upload> lcd /etc
lcd ok, local cwd=/etc
lftp 192.168.137.56:/upload> put fstab
595 bytes transferred
lftp 192.168.137.56:/upload>
切換到服務器上查看文件
[root@node6 /var/ftp]#cd upload/
[root@node6 /var/ftp]#ls -l upload/
total 4
-rw------- 1 ftp ftp 595 Oct 22 20:55 fstab
把上傳的文件屬主改爲別的用戶、並修改文件權限:
編輯配置文件
[root@node6 /etc/vsftpd]#vim vsftpd.conf
#chown_uploads=YES
#chown_username=whoever
改成
chown_uploads=YES
chown_username=cobbler
chown_upload_mode=0644
建立cobbler用戶
[root@node6 /etc/vsftpd]#useradd cobbler
重啓vsftpd服務
[root@node6 /etc/vsftpd]#systemctl restart vsftpd
經過客戶端驗證此舉設置是否成功
[root@node7 ~]#lftp 192.168.137.56/upload
cd ok, cwd=/upload
lftp 192.168.137.56:/upload> lcd /etc
lcd ok, local cwd=/etc
lftp 192.168.137.56:/upload> put passwd
1199 bytes transferred
lftp 192.168.137.56:/upload> ls
從服務器端查看文件屬性
[root@node6 /var/ftp]#cd upload/
[root@node6 /var/ftp/upload]#ll
total 8
-rw------- 1 ftp ftp 595 Oct 22 20:55 fstab
-rw-r--r-- 1 cobbler ftp 1199 Oct 22 21:04 passwd
在客戶端鏈接到服務器嘗試可否創建目錄
lftp 192.168.137.56:/upload> mkdir test
mkdir: Access failed: 550 Permission denied. (test)
lftp 192.168.137.56:/upload> rm fstab
rm: Access failed: 550 Permission denied. (fstab)
lftp 192.168.137.56:/upload> rm passwd
rm: Access failed: 550 Permission denied. (passwd)
lftp 192.168.137.56:/upload>
須要容許匿名用戶建立刪除文件或者目錄須要在服務器的配置文件裏面開啓以下兩項
[root@node6 /etc/vsftpd]#vim vsftpd.conf
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
修改完以後重啓服務
[root@node6 /etc/vsftpd]#systemctl restart vsftpd
在客戶端上驗證
[root@node7 ~]#lftp 192.168.137.56/upload
cd ok, cwd=/upload
lftp 192.168.137.56:/upload> mkdir test
mkdir ok, 'test' created
lftp 192.168.137.56:/upload> ls
-rw------- 1 14 50 595 Oct 22 12:55 fstab
-rw-r--r-- 1 1000 50 1199 Oct 22 13:04 passwd
drwx------ 2 14 50 6 Oct 22 13:10 test
lftp 192.168.137.56:/upload> rm fstab
rm ok, 'fstab' removed
lftp 192.168.137.56:/upload> rm passwd
rm ok, 'passwd' removed
lftp 192.168.137.56:/upload> rmdir test
rmdir ok, 'test' removed
lftp 192.168.137.56:/upload> ls
lftp 192.168.137.56:/upload>
vsftpd匿名用戶配置示例
建立一個系統用戶,並修改密碼
[root@node6 /etc/vsftpd]#useradd ilinux
[root@node6 /etc/vsftpd]#echo 123456|passwd --stdin ilinux
Changing password for user ilinux.
passwd: all authentication tokens updated successfully.
客戶端登陸剛剛在服務器端建立的系統用戶,登陸上來以後顯示的是系統用戶的名稱,而匿名用戶沒有
[root@node7 ~]#lftp -u ilinux 192.168.137.56
Password:
lftp ilinux@192.168.137.56:~> ls
lftp ilinux@192.168.137.56:~> lcd /etc/
lcd ok, local cwd=/etc
lftp ilinux@192.168.137.56:~> put issue
23 bytes transferred
lftp ilinux@192.168.137.56:~> ls
-rw-r--r-- 1 1001 1001 23 Oct 22 13:19 issue
lftp ilinux@192.168.137.56:~>
在服務器端ilinux的家目錄裏面查看從客戶端上傳上來的文件
每一個用戶登陸ftp以後訪問的都是用戶的家目錄
爲何匿名用戶訪問的是/var/ftp目錄,匿名用戶訪問的也是家目錄,是ftp的家目錄
[root@node6 /var/ftp/upload]#grep "^ftp" /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@node6 /var/ftp/upload]#ls /home/ilinux/
issue
系統用戶和匿名用戶受控方式是不同的,就算禁止匿名用戶上傳下載,系統用戶不受影響、正常能上傳和下載
把系統用戶映射爲來賓賬號guest
先建立來賓用戶和來賓的目錄,而後須要把建立的目錄去掉寫權限要否則經過客戶端驗證會報錯誤提示
[root@node6 /var/ftp/upload]#useradd -d /data/ftproot vsguest
[root@node6 /var/ftp/upload]#chmod -w /data/ftproot/
[root@node6 /var/ftp/upload]#ls -ld /data/ftproot/
dr-x------ 2 vsguest vsguest 62 Oct 22 21:56 /data/ftproot/
[root@node6 /var/ftp/upload]#chmod +rx !$
chmod +rx /data/ftproot/
[root@node6 /var/ftp/upload]#ls -ld /data/ftproot/
dr-xr-xr-x 2 vsguest vsguest 62 Oct 22 21:56 /data/ftproot/
[root@node6 /var/ftp/upload]#
編輯配置文件增長兩項選項
[root@node6 /etc/vsftpd]#vim vsftpd.conf
#guest user
guest_enable=YES
guest_username=vsguest
重啓服務
[root@node6 /etc/vsftpd]#systemctl restart vsftpd
複製測試文件到來賓目錄下,能區分開來是在此目錄下
[root@node6 /etc/vsftpd]#cp /etc/vsftpd/vsftpd.conf /data/ftproot/
在客戶端上測試:這裏上面說過要把來賓的目錄寫權限去掉要否則會提示500的錯誤提示
[root@node7 ~]#lftp -u ilinux 192.168.137.56
Password:
lftp ilinux@192.168.137.56:~> pwd
ftp://ilinux@192.168.137.56
lftp ilinux@192.168.137.56:~> ls
ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
lftp ilinux@192.168.137.56:~> ls
ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
lftp ilinux@192.168.137.56:~> ls
lftp ilinux@192.168.137.56:/> ls
-rw------- 1 0 0 5129 Oct 22 14:00 vsftpd.conf
lftp ilinux@192.168.137.56:/>
在服務器上把剛纔映射爲來賓賬號的那兩項註釋掉而後再經過客戶端測試看是否是回到了它本身的家目錄裏面
[root@node6 /etc/vsftpd]#vim vsftpd.conf
#guest_enable=YES
#guest_username=vsguest
重啓服務
[root@node6 /etc/vsftpd]#systemctl restart vsftpd
而後在home下的ilinux目錄下查看裏面的文件,再經過客戶端查看裏面的是否和這裏的看到的是同樣的文件
[root@node6 /var/ftp/upload]#ls /home/ilinux/
issue
測試客戶端上:
[root@node7 ~]#lftp -u ilinux 192.168.137.56
Password:
lftp ilinux@192.168.137.56:~> ls
-rw-r--r-- 1 1001 1001 23 Oct 22 13:19 issue
lftp ilinux@192.168.137.56:~>
lftp ilinux@192.168.137.56:~> cd /etc/
一旦容許系統用戶登陸之後有個悲劇性的問題,它能夠隨意遊蕩在整個系統之上,不光是本身的家目錄,若是服務器上有敏感信息,這樣一來用戶登陸上去以後直接能夠下載形成信息泄露,建議最好用戶登陸上來以後只能呆在本身的家目錄裏面,別的目錄不讓它隨意切換
禁錮系統用戶在家目錄中示例:
要禁錮哪一個用戶確保這個用戶的家目錄沒有寫權限,要否則會報錯,不讓使用
不過禁錮用戶不經常使用
修改配置文件裏面的參數
[root@node6 /etc/vsftpd]#vim vsftpd.conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
新建一個用戶
[root@node6 /etc/vsftpd]#useradd ik8s
[root@node6 /etc/vsftpd]#echo 123456|passwd --stdin ik8s
Changing password for user ik8s.
passwd: all authentication tokens updated successfully.
把用戶家目錄的寫權限去掉
[root@node6 /etc/vsftpd]#chmod -w /home/ik8s/
建立要禁錮的用戶列表
[root@node6 /etc/vsftpd]#vim /etc/vsftpd/chroot_list
ik8s
重啓服務
[root@node6 /etc/vsftpd]#systemctl restart vsftpd
客戶端測試:
[root@node7 ~]#lftp -u ilinux,123456 192.168.137.56
lftp ilinux@192.168.137.56:~> cd /etc/
lftp ilinux@192.168.137.56:/etc> exit
[root@node7 ~]#lftp -u ik8s,123456 192.168.137.56
lftp ik8s@192.168.137.56:~> cd /etc
cd: Access failed: 550 Failed to change directory. (/etc)
lftp ik8s@192.168.137.56:/> ls
lftp ik8s@192.168.137.56:/>
白名單示例:
編輯配置文件:
[root@node6 /etc/vsftpd]#vim vsftpd.conf
userlist_enable=YES
userlist_deny=NO
修改user_list文件添加容許訪問的用戶
[root@node6 /etc/vsftpd]#vim user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
#
#
# for users that are denied.
ilinux
ftp
重啓服務
[root@node6 /etc/vsftpd]#systemctl restart vsftpd
客戶端測試:
用一個沒有添加到白名單裏面的用戶登陸
[root@node7 ~]#lftp -u ik8s,123456 192.168.137.56
lftp ik8s@192.168.137.56:~> ls
ls: Login failed: 530 Permission denied.
在白名單列表裏面的用戶登陸測試
[root@node7 ~]#lftp -u ilinux,123456 192.168.137.56
lftp ilinux@192.168.137.56:~> ls
-rw-r--r-- 1 1001 1001 23 Oct 22 13:19 issue
lftp ilinux@192.168.137.56:~>
vsftpd虛擬用戶
虛擬用戶:
全部虛擬用戶會統一映射爲一個指定的系統賬號:訪問共享位置,即爲此係統賬號的家目錄
各虛擬用戶可被賦予不一樣的訪問權限,經過匿名用戶的權限控制參數進行指定
虛擬用戶賬號的存儲方式:
文件:
編輯文本文件,此文件須要被編碼爲hash格式
奇數行爲用戶名,偶數行爲密碼
db_load -T -t hash -f vusers.txt vusers.db
關係型數據庫中的表中:
實時查詢數據庫完成用戶認證
mysql庫:
pam要依賴於pam-mysql
/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README
基於文件驗證的vsftp虛擬用戶示例
建立虛擬用戶列表:
[root@node6 /etc/vsftpd]#vim vsguests.txt
tom
123456
jerry
123456
trump
123456
把用戶列表的文件轉換成vsftp的db格式
[root@node6 /etc/vsftpd]#db_load -T -t hash -f vsguests.txt vsguests.db
建立目錄和映射虛擬用戶的用戶
[root@node6 /var/ftp/upload]#useradd -d /data/ftproot vsguest
[root@node6 /etc/vsftpd]#mkdir /data/ftproot/{upload,pub}
修改upload的所屬組
[root@node6 /data/ftproot]#chown vsguest.vsguest upload/
建立Pam的認證配置文件
[root@node6 /etc/pam.d]#vim vsftpd.virt
auth required pam_userdb.so db=/etc/vsftpd/vsguests
account required pam_userdb.so db=/etc/vsftpd/vsguests
修改vsftpd.conf配置文件
[root@node6 /etc/vsftpd]#vim vsftpd.conf
guest_enable=YES
guest_username=vsguest
local_enable=YES
write_enable=YES
pam_service_name=vsftpd.virt # 自定義的pam認證配置文件
#把以前設置容許匿名用戶上傳、建立等權限給註釋掉
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
#anon_upload_enable=YES
給每一個虛擬用戶建立獨立的配置文件
在主配置文件裏定義每一個虛擬用戶的存放路徑
[root@node6 /etc/vsftpd]#vim vsftpd.conf
user_config_dir=/etc/vsftpd/vsguests
建立出相對應的目錄
[root@node6 /etc/vsftpd]#mkdir /etc/vsftpd/vsguests
重啓服務
[root@node6 /etc/vsftpd]#systemctl restart vsftpd
在沒有給每一個虛擬用戶帳號給定權限前測試用戶可否能夠上傳
[root@node7 ~]#lftp -u tom,123456 192.168.137.56
lftp tom@192.168.137.56:~> ls
drwxr-xr-x 2 0 0 6 Oct 23 02:12 pub
drwxr-xr-x 2 1002 1002 6 Oct 23 02:12 upload
-rw------- 1 0 0 5129 Oct 22 14:00 vsftpd.conf
lftp tom@192.168.137.56:/> cd upload/
lftp tom@192.168.137.56:/upload> lcd /etc/
lcd ok, local cwd=/etc
lftp tom@192.168.137.56:/upload> put issue
put: Access failed: 550 Permission denied. (issue)
lftp tom@192.168.137.56:/upload>
配置每一個虛擬用戶的權限
給tom用戶定義權限
[root@node6 /etc/vsftpd/vsguests]#vim tom
anon_upload_enable=YES
給Jerry用戶定義權限
[root@node6 /etc/vsftpd/vsguests]#vim jerry
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
重啓服務:
[root@node6 /etc/vsftpd/vsguests]#systemctl restart vsftpd
客戶端測試
一、先測試Jerry用戶
[root@node7 ~]#lftp -u jerry,123456 192.168.137.56
lftp jerry@192.168.137.56:/> lcd /etc/
lcd ok, local cwd=/etc
lftp jerry@192.168.137.56:/> cd upload/
lftp jerry@192.168.137.56:/upload> put issue
23 bytes transferred
lftp jerry@192.168.137.56:/upload> ls
-rw-r--r-- 1 1000 1002 23 Oct 23 02:33 issue
lftp jerry@192.168.137.56:/upload> rm issue
rm ok, `issue' removed
lftp jerry@192.168.137.56:/upload> ls
lftp jerry@192.168.137.56:/upload>
二、測試Tom用戶
[root@node7 ~]#lftp -u tom,123456 192.168.137.56
lftp tom@192.168.137.56:~> lcd /etc
lcd ok, local cwd=/etc
lftp tom@192.168.137.56:~> cd upload/
lftp tom@192.168.137.56:/upload> ls
lftp tom@192.168.137.56:/upload> put issue
23 bytes transferred
lftp tom@192.168.137.56:/upload> rm issue
rm: Access failed: 550 Permission denied. (issue)
lftp tom@192.168.137.56:/upload> mkdir test
mkdir: Access failed: 550 Permission denied. (test)
lftp tom@192.168.137.56:/upload>
基於MYSQL驗證的vsftpd虛擬用戶
安裝數據庫軟件
[root@node6 ~]#yum -y install mariadb-server
在mariadb配置文件裏面添加一條禁止反解域名的選項
[root@node6 ~]#vim /etc/my.cnf
[mysqld]
skip_name_resolve=on
啓動數據庫服務
[root@node6 ~]#systemctl start mariadb
編譯pam、mysql的模塊
先安裝編譯環境
[root@node6 ~]#yum -y groupinstall "Development tools"
[root@node6 ~]#yum -y install mariadb-devel pam-devel
[root@node6 ~]#tar xf pam_mysql-0.7RC1.tar.gz
[root@node6 ~]#cd pam_mysql-0.7RC1
[root@node6 ~/pam_mysql-0.7RC1]#./configure \
--with-pam-mods-dir=/lib64/security \
--with-mysql=/usr --with-pam=/usr
[root@node6 ~/pam_mysql-0.7RC1]#make -j 2 && make install
查看是否有mysql模塊
[root@node6 ~/pam_mysql-0.7RC1]#ls /lib64/security/
pam_access.so pam_filter pam_mail.so pam_rootok.so pam_timestamp.so
pam_cap.so pam_filter.so pam_mkhomedir.so pam_securetty.so pam_tty_audit.so
pam_chroot.so pam_fprintd.so pam_motd.so pam_selinux_permit.so pam_umask.so
pam_console.so pam_ftp.so pam_mysql.la pam_selinux.so pam_unix_acct.so
pam_cracklib.so pam_group.so pam_mysql.so
建立基於mysql認證的pam配置文件
[root@node6 ~vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftp passwd=magedu host=localhost db=vsftpd table=users u
sercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftp passwd=magedu host=localhost db=vsftpd table=user
s usercolumn=name passwdcolumn=password crypt=2
在數據庫裏面建立庫和表而且受權
MariaDB [(none)]> create database vsftpd;
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> use vsftpd
Database changed
MariaDB [vsftpd]> create table users(name varchar(100) not null primary key, password char(48) not null);
MariaDB [vsftpd]> grant all on vsftpd.* to 'vsftp'@'localhost' identified by 'magedu';
Query OK, 0 rows affected (0.00 sec)
MariaDB [vsftpd]> grant all on vsftpd.* to 'vsftp'@'127.0.0.1' identified by 'magedu';
Query OK, 0 rows affected (0.00 sec)
MariaDB [vsftpd]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
插入3個虛擬用戶信息
MariaDB [vsftpd]> insert into users values('tom',password('123456')),('jerry',password(123456)),('turmp',password('123456'));
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
修改vsftpd的主配置文件
把這項改了以前實驗是從文件中查找用戶,此次改爲從數據庫中找
[root@node6 ~]#vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.mysql
重啓服務
[root@node6 ~]#systemctl restart vsftpd
客戶端測試:
tom用戶
[root@node7 ~]#lftp -u tom,123456 192.168.137.56
lftp tom@192.168.137.56:/> cd upload/
lftp tom@192.168.137.56:/upload> lcd /etc/
lcd ok, local cwd=/etc
lftp tom@192.168.137.56:/upload> put passwd
1257 bytes transferred
lftp tom@192.168.137.56:/upload> ls
-rw-r--r-- 1 1000 1002 23 Oct 23 02:34 issue
-rw-r--r-- 1 1000 1002 1257 Oct 23 03:15 passwd
lftp tom@192.168.137.56:/upload> rm issue
rm: Access failed: 550 Permission denied. (issue)
lftp tom@192.168.137.56:/upload>
jerry用戶
[root@node7 ~]#lftp -u jerry,123456 192.168.137.56
lftp jerry@192.168.137.56:~> cd upload/
lftp jerry@192.168.137.56:/upload> ls
-rw-r--r-- 1 1000 1002 23 Oct 23 02:34 issue
-rw-r--r-- 1 1000 1002 1257 Oct 23 03:15 passwd
lftp jerry@192.168.137.56:/upload> rm issue
rm ok, 'issue' removed
lftp jerry@192.168.137.56:/upload> rm passwd
rm ok, 'passwd' removed
lftp jerry@192.168.137.56:/upload> ls
lftp jerry@192.168.137.56:/upload>