Linux服務器FTP配置:vsftp虛擬用戶配置與主動模式被動模式用法


VSFTP是一個在UNIX/Linux操作系統上運行的FTP服務器,安全性是它的一個最大的特點。它可以運行在諸如Linux、BSD、Solaris、 HP-UNIX等系統上面,是一個完全免費的、開發源代碼的FTP服務器軟件,支持很多其他的FTP服務器所不支持的特征。比如:非常高的安全性需求、帶寬限制、良好的可伸縮性、可創建虛擬用戶、支持IPv6、速率高等。

本文所有配置是在CentOS 5.8-64位系統上進行,配置的是vsftp虛擬用戶模式,虛擬用戶的特點是只能訪問服務器為其提供的FTP服務,而不能訪問系統的其它資源。所以,如果想讓用戶對FTP服務器站內具有寫權限,但又不允許訪問系統其它資源,可以使用虛擬用戶來提高系統的安全性。

VSFTP安裝與配置

安裝

使用yum命令來安裝vsftpd和DB軟件包:

yum -y install vsftpd db4-utils

建立口令庫文件

建立虛擬用戶口令庫文件,使用文本編輯器創建一個文本文件,第一行寫:用戶名;第二行寫:密碼,依此類推:

vim logins.txt
sunkai  <--虛擬用戶名
123456  <--密碼

生成認證文件

使用db_load命令生成vsftpd的認證文件,將用戶信息文件轉換為數據庫並使用hash加密:

db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db

賦權:

chmod 600 /etc/vsftpd/vsftpd_login.db

數據庫生成后最好清空該文本文件,並在安全的地方記錄用戶名和密碼:

rm -f logins.txt

db_load參數解釋:

  • 選項-T允許應用程序能夠將文本文件轉譯載入進數據庫。由於我們之后是將虛擬用戶的信息以文件方式存儲在文件里的,為了讓Vsftpd這個應用程序能夠通過文本來載入用戶數據,必須要使用這個選項。如果指定了選項-T,那么一定要追跟子選項-t
  • 子選項-t,追加在在-T選項后,用來指定轉譯載入的數據庫類型。擴展介紹下,-t可以指定的數據類型有Btree、Hash、Queue和Recon數據庫。
  • 選項-f的參數是包含用戶名和密碼的文本文件,文件的內容是:奇數行用戶名、偶數行密碼。

建立PAM配置文件

建立虛擬用戶所需的PAM配置文件,目的是對虛擬用戶的安全和賬戶權限進行驗證。

  • auth是對用戶密碼進行驗證。
  • accout是對用戶的權限進行驗證。
vim /etc/pam.d/vsftpd

加入下面內容,其他行全部注釋:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

64位系統:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

創建賬戶和設置權限

創建虛擬用戶

創建一個不能登錄系統的用戶ftpuser用於映射虛擬用戶,用戶名ftpuser可以隨意設置:

useradd -d /home/ftpsite -s /sbin/nologin ftpuser
chmod 700 /home/ftpsite/

vsftpd.conf中添加配置項:

guest_enable=YES
guest_username=ftpuser

guest_enable激活(YES)時,guest_username是定義了虛擬用戶在系統中的用戶名。

創建宿主目錄,也可以指定系統其他目錄:

mkdir /home/ftpsite/sunkai

設置權限

對不同虛擬用戶設置不同權限,創建虛擬用戶配置文件存放位置:

mkdir /etc/vsftpd/vsftpd_user_conf
vim /etc/vsftpd/vsftpd_user_conf/sunkai    #建立用戶單獨配置文件,文件名就是虛擬用戶名。

local_root=/home/ftpsite/sunkai    #這里的目錄可以是系統中其他目錄,根據用途定義。
file_open_mode=0777
write_enable=YES
virtual_use_local_privs=YES      #配置虛擬用戶具有寫權限(上傳、下載、刪除、重命名)

vsftpd.conf添加配置項:

user_config_dir=/etc/vsftpd/vsftpd_user_conf

禁錮FTP用戶在宿主目錄

將需要禁錮的用戶名寫入chroot_list文件,將用戶固定在local_root定義的目錄內。當chroot_list_enable激活(YES)時,在chroot_list_file指定文件中的用戶將會禁錮在宿主目錄中。

vim /etc/vsftpd/chroot_list
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list   #每一行寫一個用戶名。

其他權限配置方案

虛擬用戶和本地用戶有相同的權限
virtual_use_local_privs=YES

虛擬用戶和匿名用戶有相同的權限,默認是NO
virtual_use_local_privs=NO

虛擬用戶具有寫權限(上傳、下載、刪除、重命名)
virtual_use_local_privs=YES
write_enable=YES

虛擬用戶不能瀏覽目錄,只能上傳文件,無其他權限
virtual_use_local_privs=NO
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES

虛擬用戶只能下載文件,無其他權限
virtual_use_local_privs=NO
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=NO

虛擬用戶只能上傳和下載文件,無其他權限
virtual_use_local_privs=NO
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES

虛擬用戶只能下載文件和創建文件夾,無其他權限
virtual_use_local_privs=NO
write_enable=YES
anon_world_readable_only=NO
anon_mkdir_write_enable=YES

虛擬用戶只能下載、刪除和重命名文件,無其他權限
virtual_use_local_privs=NO
write_enable=YES
anon_world_readable_only=NO
anon_other_write_enable=YES

FTP的主動端口與被動端口配置

大多數的TCP服務是使用單個的連接,一般是客戶端向服務器的一個已知端口發起連接,然后使用這個連接進行通訊。但FTP協議卻是例外,它使用雙向的多個連接 ,而且使用的端口很難預計。

FTP協議連接和端口

  • 一個控制連接(control connection):用於傳遞客戶端和服務器端之間的命令響應。使用TCP 21端口,生存期是整個FTP會話時間。
  • N個數據連接(data connection):用於傳輸數據,這種連接是在數據傳輸時建立的,一旦數據傳輸完畢就關閉,每次使用的端口也不一定相同。而且,這種數據 連接既可能是客戶端發起的,也可能是服務器端發起的。
  • FTP協議使用一個標准的端口20作為ftp-data端口,但是這個端口只用於連接的源地址是服務器端的情況,在這個端口上根本就沒有監聽進程。

ftp的端口號20、21有何區別?

  一個是數據端口,一個是控制端口,控制端口一般為21,而數據端口不一定是20,這和FTP的應用模式有關,如果是主動模式,應該為20,如果為被動模式,由服務器端和客戶端協商而定

主動與被動模式

  FTP的數據連接和控制連接一般是相反方向,即服務器向客戶端發起一個用於數據傳輸的連接。連接的端口是由服務器端和客戶端協商確定的,這就是vsftpd的主動模式(port  mod)。FTP協議的這個特征對iptables防火牆和NAT的配置增加了很多困難。在FTP被動模式(passive mod)下,數據連接是由客戶程序發起的,和主動模式相反。

選擇模式的原則

  • 客戶端沒有防火牆時,用主動模式連接即可。
  • 服務器端沒有防火牆時,用被動模式即可。
  • 雙方都有防火牆時,vsftpd設置被動端口范圍,服務器端防火牆打開被動端口范圍,客戶端用被動模式連接即可。

是否采取被動模式取決於客戶程序:

  • 在ftp命令行中使用passive命令就可以關閉/打開被動模式。
  • 在Windows命令行模式下使用ftp命令連接服務器,用的是主動模式。
  • 在瀏覽器方式下連接ftp服務器,可以修改訪問使用模式:

 

  • 用FileZilla Client軟件連接服務器,在“編輯”-“設置”-“連接”選項內設置使用模式:

 

iptables中配置vsftp的方法

使用主動模式

配置iptables防火牆:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 20,21 -m state --state NEW -j ACCEPT

使用被動模式

方法1

加載模塊ip_conntrack_ftp,優點:不影響ftp的配置,缺點:客戶端會感覺到連接有些延遲。

  • /etc/sysconfig/iptables-config中添加:IPTABLES_MODULES="ip_conntrack_ftp"
  • 加載模塊:/sbin/modprobe ip_conntrack_ftp
  • 開機啟動,在/etc/rc.local添加:/sbin/modprobe ip_conntrack_ftp

注意:如果需要修改FTP 21端口為2121:

  • vsftpd.conf中增加:listen_port=2121
  • 加載模塊:/sbin/modprobe ip_conntrack_ftp ports=2121

最后需要在iptables開放21端口:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
方法2

在vsftpd配置文件中配置被動端口,優點:對連接速度沒有影響。缺點:限制了客戶端並發連接的數量。

/etc/vsftpd/vsftpd.conf中添加:

pasv_enable=YES
pasv_min_port=3000
pasv_max_port=3005

在iptables中開放這段端口:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 3000:3005 -j ACCEPT

解除SELinux阻止

如果開啟了SELinux,執行以下命令:

setsebool -P ftpd_disable_trans 1
service vsftpd restart


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM