在Linux中,用於實現文件傳輸和共享的服務比較多,VSFTP就是其中被使用較多的一個文件服務,而說到VSFTP就不得不說一個話題,那就是FTP。mysql
FTP即File Transfer Procotol的首字母縮寫,是一個用於控制Internet上文件傳輸的協議,FTP協議通常採用明文進行數據傳輸,雖然較之安全性不如HTTPS,設置HTTP,可是其創建鏈接的過程比較簡單,因此其傳輸速率就更快。sql
FTP在完成數據傳輸以前就須要創建鏈接,而傳輸數據的時候又要創建專門的數據傳輸鏈接,由此可把FTP鏈接分爲兩種,一種叫命令鏈接,一種叫數據鏈接,命令鏈接開始於數據鏈接以前,負責把用戶登陸後輸入的相關命令發送到服務器端,實現於服務器端交互;而數據鏈接則發生於當創建命令鏈接後客戶端開始請求相關文件時,客戶端每請求一個文件就會新創建一個數據鏈接,而當請求的文件傳輸完成後,該數據鏈接就會被拆除。而從數據鏈接請求發出方的角度來看,又可把FTP的鏈接分爲主動鏈接和被動鏈接。其區別以下:數據庫
鏈接類型vim |
發起方安全 |
發起端口服務器 |
響應方tcp |
響應端口ide |
主動鏈接(命令鏈接)測試 |
Clientui |
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 |
二、配置主機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進行測試
如上所示則成功
三、配置主機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服務介紹完畢
~