在Linux中,用於實現文件傳輸和共享的服務比較多,VSFTP就是其中被使用較多的一個文件服務,而說到VSFTP就不得不說一個話題,那就是FTP。
FTP即File Transfer Procotol的首字母縮寫,是一個用於控制Internet上文件傳輸的協議,FTP協議一般採用明文進行數據傳輸,雖然較之安全性不如HTTPS,設置HTTP,但是其建立連接的過程比較簡單,所以其傳輸速率就更快。
FTP在完成數據傳輸之前就需要建立連接,而傳輸數據的時候又要建立專門的數據傳輸連接,由此可把FTP連接分爲兩種,一種叫命令連接,一種叫數據連接,命令連接開始於數據連接之前,負責把用戶登錄後輸入的相關命令發送到服務器端,實現於服務器端交互;而數據連接則發生於當建立命令連接後客戶端開始請求相關文件時,客戶端每請求一個文件就會新建立一個數據連接,而當請求的文件傳輸完成後,該數據連接就會被拆除。而從數據連接請求發出方的角度來看,又可把FTP的連接分爲主動連接和被動連接。其區別如下:
連接類型 | 發起方 | 發起端口 | 響應方 | 響應端口 |
主動連接(命令連接) | Client | tcp/5000 | Server | tcp/21 |
主動連接(數據連接) | Server | tcp/20 | Client | tcp/5000+1 |
被動連接(命令連接) | Client | tcp/5000 | Server | tcp/21 |
被動連接(數據連接) | Client | tcp/5000+1 | Server | 隨機 |
在Linux中實現FTP文件傳輸功能的軟件以VSFTP最常見,接下來就將通過實驗的方式對VSFTP進行介紹。
例1:配置vsftp讓匿名用戶具有上傳和下載權限。
安裝vsftp
[root@localhost ~]# yum install vsftpd -y
編輯vsftp主配置文件/etc/vsftpd.conf
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
listen=YES#以獨立守護進程監聽在21號端口
write_enable=YES#設置可寫
anonymous_enable=YES#設置啓用匿名用戶
anon_mkdir_write_enable=YES#設置匿名用戶可以新建目錄
anon_other_write_enable=YES#設置匿名用戶新建的文件或目錄其他用戶有權限
anon_upload_enable=YES#設置匿名用戶可上傳文件
新建匿名用戶上傳文件專用目錄,並更改屬主爲ftp
[root@localhost ~]# mkdir /var/ftp/upload
[root@localhost ~]# chown ftp:ftp /var/ftp/upload/
重啓服務並測試
[root@localhost ~]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[root@localhost ~]# service iptables stop#關閉防火牆,也可以設置規則方形ftp
登錄進入ftp並切換至upload目錄
新建空目錄
成功!
例2:設置允許本地用戶登錄,並禁錮其只能在其家目錄內
編輯配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
把配置文件內容更改爲如下所示
listen=YES
anonymous_enable=NO#設置禁止匿名用戶登錄
write_enable=YES#設置可寫
local_enable=YES#:設置允許本地用戶登錄
chroot_local_user=YES#:設置把本地用戶禁錮在家目錄裏
userlist_enable=YES#設置啓用控制用戶登錄的列表文件
userlist_file=/etc/vsftpd/userlist#和上一項同用,定位列表文件位置
userlist_deny=YES#設置使用登錄列表爲拒絕用戶的名單
pam_service_name=vsftpd#設置使用可插入式認證模塊的服務名爲vsftpd
添加用戶用於測試
新建userlist文件並設置禁止root用戶登錄ftp服務
[root@localhost test]# echo "root">>/etc/vsftpd/userlist
重啓測試
使用root用戶登錄測試
到此可以看出當使用root登錄時直接會拒絕,而當使用test用戶登錄時則一切正常,且被禁錮於test用戶的家目錄/home/test目錄下。
例3:把虛擬用戶的賬號信息保存於單獨的服務器的MariaDB數據庫上
1、實驗規劃:
主機 | IP | 安裝服務 |
A | 192.168.252.11 | VSFTPD |
B | 192.168.252.10 | MariaDB |
2、配置主機B
安裝MariaDB就不再贅述,在此直接配置MariaDB
首先創建保存賬號信息的數據庫,並授權給遠程主機A能通過ftp用戶登錄
MariaDB [ftp]> CREATE DATABASE ftp;#創建數據庫
MariaDB [ftp]> GRANT ALL ON ftp.* TO 'ftp'@'192.168.252.11' IDENTIFIED BY "test";#授權
MariaDB [ftp]> FLUSH PRIVILEGES;#通知MariaDB重讀授權信息
MariaDB [ftp]> CREATE TABLE users (
-> id int AUTO_INCREMENT NOT NULL,
-> name char(20) binary NOT NULL,
-> password char(48) binary NOT NULL,
-> primary key(id)
-> );#創建users表,
在數據庫裏插入兩條用戶信息
創建完成後不要忘記使用主機A進行測試
如上所示則成功
3、配置主機A
安裝pam_mysql模塊
[root@localhost ~]# yum install pam_mysql -y
提供pam.mysql文件並編輯,內容如下
[root@localhost ~]# vim /etc/pam.d/vsftpd.mysql
auth required /lib/security/pam_mysql.so user=ftp passwd=test host=192.168.252.10 db=ftp table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib/security/pam_mysql.so user=ftp passwd=test host=192.168.252.10 db=ftp table=users usercolumn=name passwdcolumn=password crypt=2
新建虛擬用戶映射的系統用戶及相應目錄
[root@localhost ~]# useradd -s /sbin/nologin -d /var/ftproot/ vuser
[root@localhost ~]# chmod go+rx /var/ftproot/
修改vsftpd配置文件,其內容如下
listen=YES
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.mysql
重啓測試
~
成功
例4、設置vsftpd相關歡迎和提示信息,以及日誌功能
編輯配置文件,使其內容如下所示
listen=YES
anonymous_enable=NO
write_enable=YES
local_enable=YES
chroot_local_user=YES
userlist_enable=YES
userlist_file=/etc/vsftpd/userlist
userlist_deny=YES
pam_service_name=vsftpd
dirmessage_enable=YES
ftpd_banner=Hello Welcome to login my FTP server.
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/vsftpd_log
在此使用test用戶測試,切換目錄到/home/test下,新建ftp目錄,並在目錄下添加.message文件
[root@localhost ~]# mkdir /home/test/ftp
[root@localhost ftp]# echo "Hello this is ftp dirctory" >.messages
重啓服務測試
查看日誌
到此vsftp服務介紹完畢
~