ftp服務器之vsftp


一、簡介


文件傳輸協議(FTP,File Transfer Protocol),即能夠讓用戶在互聯網中上傳、下載文件的文件協議,而FTP服務器就是支持FTP傳輸協議的主機,要想完成文件傳輸則需要FTP服務端和FTP客戶端的配合才行。

通常用戶使用FTP客戶端軟件向FTP服務器發起連接併發送FTP指令,服務器收到用戶指令後將執行結果返回客戶端。

wKiom1cta4ej0HPYAAAWqsT-fQM106.png        

FTP協議佔用兩個端口號:

21端口:命令連接,用於接收客戶端執行的FTP命令。

20端口:數據連接,用於上傳、下載文件數據。

FTP數據傳輸的類型:

主動模式:FTP服務端主動向FTP客戶端發起連接請求。

被動模式:FTP服務端等待FTP客戶端的連接請求。


命令連接:傳輸指令,21/tcp
    客戶端發出請求,服務端響應
數據連接:傳輸數據
    注意:數據連接必然是通過某個命令連接發起;

    主動模式(PORT):服務器向客戶端發起數據傳輸請求;
        服務器端口:固定;
    被動模式(PASV):客戶端向服務器端發起數據傳輸請求;
        服務器端口:半隨機  
      



二、Linux下實現方式


Vsftpd即“Very Secure FTP Daemon”是一款運行在類Unix操作系統的FTP服務端程序,Vsftpd主打的是安全性、完全開源及免費、速率高、支持IPv6、虛擬用戶功能等等其他FTP服務端軟件不具備的功能。


清除iptables規則並關閉selinux

[root@bogon ~]# iptables -F
[root@bogon ~]# setenforce 0


安裝vsftpd程序包

[root@bogon ~]# yum install vsftpd -y


Vsftpd的程序與配置文件:

主程序/usr/sbin/vsftpd
用戶禁止登陸列表/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
主配置文件/etc/vsftpd/vsftpd.conf


先來分析下vsftpd程序的主配置文件:

[root@linuxprobe ~]# cat /etc/vsftpd/vsftpd.conf


主配置文件長達123行,但大部分是以#號開始的,這些都是註釋信息,我們可以過濾掉它們。

備份vsftpd的主配置文件:

[root@bogon ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak


去除以#號開頭的註釋行

[root@bogon vsftpd]# grep -v "#" vsftpd.conf.bak > vsftpd.conf
[root@bogon vsftpd]# cat vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES


Vsftpd的驗證方式

vsftpd程序提供的FTP服務可選認證方式,分別爲匿名訪問、本地用戶和虛擬用戶:

匿名訪問:任何人無需驗證口令即可登入FTP服務端。

本地用戶:使用FTP服務器中的用戶、密碼信息。

虛擬用戶:創建獨立的FTP帳號資料。

顧名思義匿名訪問就是所有人均可隨意登入FTP服務,這樣自然會產生安全問題,一般用於存放公開的數據。

而本地用戶與虛擬用戶則需要用戶提供帳號及口令後才能登入FTP服務,更加的安全,而虛擬用戶則是最安全的。


匿名訪問模式

               

FTP匿名訪問模式是比較不安全的服務模式,尤其在真實的工作環境中千萬不要存放敏感的數據,以免泄露。

vsftpd程序默認已經允許匿名訪問模式,我們要做的就是開啓匿名用戶的上傳和寫入權限,添加下面的參數:

[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf
參數作用
anonymous_enable=YES允許匿名訪問模式。
anon_umask=022匿名用戶上傳文件的umask值。
anon_upload_enable=YES允許匿名用戶上傳文件,生效要依賴於write_enable=YES;
anon_mkdir_write_enable=YES允許匿名用戶創建目錄
anon_other_write_enable=YES允許匿名用戶的刪除及重命名操作權限;

確認填寫正確後保存並退出vsftpd.conf文件,然後重啓vsftpd服務程序並設置爲開機自啓動。

用另一臺機器來訪問此ftp

需要用到ftp服務

[root@bogon ~]# yum install ftp -y

[root@bogon ~]# ftp 172.18.1.102
Connected to 172.18.1.102 (172.18.1.102).
220 (vsFTPd 2.2.2)
Name (172.18.1.102:root): anonymous
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 (172,18,1,102,210,123).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Jul 24  2015 pub
226 Directory send OK.
ftp>cd pub
250 Directory successfully changed.
ftp> mkdir files550 Permission denied.


這裏提示拒絕是因爲匿名訪問模式的FTP根目錄爲/var/ftp/pub

匿名用戶的FTP根目錄所有者/組都是root,所以匿名用戶沒有寫入權限,那我們將所有者修改爲ftp就可以了。

[root@bogon ~]# chown ftp /var/ftp/pub


本地用戶模式

既然要使用本地用戶模式,而本地用戶模式確實要比匿名訪問模式更加的安全,所以本實驗中會關閉匿名訪問模式。

vsftpd服務程序默認已經允許本地用戶模式,我們要做的是添加設置本地用戶模式權限的參數:

[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf
參數作用
anonymous_enable=NO禁止匿名訪問模式。
local_enable=YES允許本地用戶模式。
write_enable=YES設置可寫入權限。
local_umask=022本地用戶模式創建文件的umask值。
userlist_deny=YES參數值爲YES即禁止名單中的用戶,參數值爲NO則代表僅允許名單中的用戶。
userlist_enable=YES允許“禁止登陸名單”,名單文件爲ftpusers與user_list。

確認填寫正確後保存並退出vsftpd.conf文件,然後重啓vsftpd服務程序並設置爲開機自啓動。

查看ftpusers或user_list文件中禁止登陸用戶名單

[root@bogon vsftpd]# cat ftpusers 
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

vsftpd服務爲了讓FTP服務更加的安全,默認禁止以root身份登入,那麼創建個普通用戶吧:

[root@bogon vsftpd]# useradd linuxtest
[root@bogon vsftpd]# echo linuxtest | passwd --stdin linuxtest
Changing password for user linuxtest.
passwd: all authentication tokens updated successfully.


在客戶端嘗試登入FTP服務即可。這裏跳過。


虛擬用戶模式

虛擬用戶:
    基於db文件:
        /etc/vsftpd/vusers.txt文件
            奇數行:用戶名
             偶數行:密碼
    基於mysql服務:


因爲虛擬用戶模式的帳號口令都不是真實系統中存在的,所以只要配置妥當虛擬用戶模式會比本地用戶模式更加安全,但是Vsftpd服務配置虛擬用戶模式的操作步驟相對複雜一些,具體流程如下:

第1步:建立虛擬FTP用戶數據庫文件。

第2步:創建FTP根目錄及虛擬用戶映射的系統用戶。

第3步:建立支持虛擬用戶的PAM認證文件。

第4步:在vsftpd.conf文件中添加支持配置。

第5步:爲虛擬用戶設置不同的權限。

第6步:重啓vsftpd服務,驗證實驗效果。


第1步:建立虛擬FTP用戶數據庫文件。

切換至vsftpd程序目錄:

[root@bogon vsftpd]# cd /etc/vsftpd/

創建用於生成FTP用戶數據庫的原始帳號和密碼文件:

[root@bogon vsftpd]# vim vuser.list//單數帳號,雙數密碼。
linuxtest
linuxtest
black
123456

使用db_load命令用HASH算法生成FTP用戶數據庫文件vuser.db:

[root@linuxprobe vsftpd]# db_load -T -t hash -f vuser.list vuser.db

查看數據庫文件的類型:

[root@bogon vsftpd]# file vuser.db 
vuser.db: Berkeley DB (Hash, version 9, native byte-order)

FTP用戶數據庫內容很敏感,所以權限給小一些:

[root@bogon vsftpd]# chmod 600 vuser.db

刪除原始的帳號和密碼文件:

[root@bogon vsftpd]# rm -f vuser.list

第2步:創建FTP根目錄及虛擬用戶映射的系統用戶

創建用戶virtual並設置爲不允許登陸系統並定義該用戶的家目錄:

[root@bogon vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual

查看該用戶的家目錄權限:

[root@bogon vsftpd]# ls -ld /var/ftproot/
drwx------. 3 virtual virtual 74 May  7 14:52 /var/ftproot/

爲保證其他用戶可以訪問,給予rwxr-xr-x權限:

[root@bogon vsftpd]# chmod -Rf 755 /var/ftproot/

第3步:建立支持虛擬用戶的PAM認證文件:

[root@bogon vsftpd]# vim /etc/pam.d/vsftpd.vu//參數db用於指向剛剛生成的vuser.db文件,但不要寫後綴。
auth       required     pam_userdb.so db=/etc/vsftpd/vuser
account    required     pam_userdb.so db=/etc/vsftpd/vuser

第4步:在vsftpd.conf文件中添加支持配置。
既然要使用虛擬用戶模式,而虛擬用戶模式確實要比匿名訪問模式更加的安全,配置的同時也關閉匿名開放模式。

[root@bogon ~]# vim /etc/vsftpd/vsftpd.conf
參數作用
anonymous_enable=NO禁止匿名開放模式。
local_enable=YES允許本地用戶模式。
guest_enable=YES開啓虛擬用戶模式。
guest_username=virtual指定虛擬用戶帳號。
pam_service_name=vsftpd.vu指定pam文件。
allow_writeable_chroot=YES允許禁錮的FTP根目錄可寫而不拒絕用戶登入請求。

第5步:爲虛擬用戶設置不同的權限
現在不論是linuxprobe還是blackshield帳戶,他們的權限都是相同的——默認不能上傳、創建、修改文件,如果希望用戶blackshield能夠完全的管理FTP內的資料,就需要讓FTP程序支持獨立的用戶權限配置文件了:
指定用戶獨立的權限配置文件存放的目錄:

[root@bogon ~]# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir

創建用戶獨立的權限配置文件存放的目錄:

[root@bogon ~]# mkdir /etc/vsftpd/vusers_dir/

切換進入到該目錄中:

[root@linuxprobe ~]# cd /etc/vsftpd/vusers_dir/

創建空白的linuxprobe的配置文件:

[root@linuxprobe vusers_dir]# touch linuxprobe

指定blackshield用戶的具體權限:

[root@bogon vusers_dir]# vim blackshieldanon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

第6步:重啓vsftpd服務,驗證實驗效果。
確認填寫正確後保存並退出vsftpd.conf文件,重啓vsftpd程序並設置爲開機後自動啓動。



當然,用戶數據庫也可以基於MySQL

下面給出大致實現方式


基於mysql服務:        

 yum -y  groupinstall  "Development Tools" "Server Platform Development"
 yum -y install pam-devel openssl-devel mariadb-devel
            
 ./configure --with-mysql=/usr --with-openssl=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
 make && make install

            
pam配置文件:

auth required pam_mysql.so user=vsftpd passwd=mageedu host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=mageedu host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章