VSFTP 配置詳解

一、VSFTP 安裝(略)

二、用戶訪問方式

1、匿名用戶形式:

   在默認安裝的情況下,系統只提供匿名用戶訪問
2、本地用戶形式:

   以/etc/passwd中的用戶名爲認證方式

   如果你在一臺激活了PAM的設備上運行VSFTPD,你需要提供一個 /etc/pam.d/ftp 文件。否則非匿名用戶將無法登錄服務器。(注:如果你的PAM版本比較老,那麼這個文件也許是 /etc/pam.conf).
做爲一個標準設置,你可以拷貝一個已提供的範例文件,(cp RedHat/vsftpd.pam /etc/pam.d/ftp )

3、虛擬用戶形式:

    支持將用戶名和口令保存在數據庫文件或數據庫服務器中。相對於FTP的本地用戶形式來說,虛擬用戶只是FTP服務器的專有用戶,虛擬用戶只能訪問FTP服務器所提供的資源,這大大增強系統本身的安全性。相對於匿名用戶而言,虛擬用戶需要用戶名和密碼才能獲取FTP服務器中的文件,增加了對用戶和下載的可管理性。對於需要提供下載服務,但又不希望所有人都可以匿名下載;既需要對下載用戶進行管理,又考慮到主機安全和管理方便的FTP站點來說,虛擬用戶是一種極好的解決方案。

 

4、訪問模式:

ftp 分主動模式(PORT MODE)及被動模式(PASV MODE)兩種訪問模式

主動模式下,客戶連接 TCP/21,服務器通過 TCP/20 連接客戶,client 防火牆開放端口

主動FTP:
        命令連接:客戶端>1023端口 ――> 服務器 21端口
        數據連接:客戶端 >1023端口 <―― 服務器 20端口

=================================================================================
被動模式(PASV)下,客戶連接 TCP/21,客戶再通過其他端口連接服務器的隨機端口,server 防火牆開放端口

被動FTP:
        命令連接:客戶端 >1023端口――> 服務器 21端口
        數據連接:客戶端 >1023端口――> 服務器 >1023端

vsftp.conf 配置

pasv_enable=yes
pasv_min_port=50000
pasv_max_port=60000
 

-A RH-Firewall-1-INPUT -p tcp --dport 50000:60000  -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
 

================================================================================

 

三、配置實戰

相關配置文件

vsftp.conf

1、匿名用戶形式:

   1.1創建用戶

      anonymous 用戶無須創建

   1.2相關配置

anon_root=/var/www/ftp

anonymous_enable=YES
anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

anon_world_readable_only=YES

anon_max_rate=80000 

 

mkdir -p /var/www/ftp/pub

chmod 775 /var/www/ftp

chmod o+w  /var/www/ftp/pub

 2、本地用戶形式:

   2.1創建用戶

cp /etc/localtime /etc/skel/

useradd -g ftp -d /aaa -s /sbin/nologin ttt
passwd ttt

chmod 777 /aaa

 

   2.2相關配置

local_enable=YES

write_enable=YES

local_umask=022
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
pam_service_name=vsftpd
#/etc/vsftpd/ftpusers 禁止登陸用戶列表,高優先級
userlist_enable=YES #用戶訪問控制列表有效,文件是/etc/vsftpd/user_list
#userlist_deny=YES #/etc/vsftpd/user_list裏的用戶不能登錄
userlist_deny=NO #只有/etc/vsftpd/user_list用戶纔可以登錄
 

user_config_dir=/etc/vsftpd/vsftpd_user_conf
mkdir /etc/vsftpd/vsftpd_user_conf
echo "local_root=/var/www/html" > /etc/vsftpd/vsftpd_user_conf/ttt

 3、虛擬用戶形式

   3.1創建用戶

useradd -g ftp -s /sbin/nologin vsftpdvirtual

   3.2相關配置

guest_enable=YES 
guest_username=vsftpdvirtual 
virtual_use_local_privs=YES|NO

當該參數激活(YES)時,虛擬用戶使用與本地用戶相同的權限。所有虛擬用戶的權限使用local參數。
當此參數關閉(NO)時,虛擬用戶使用與匿名用戶相同的權限,所有虛擬用戶的權限使用anon參數。
這兩者種做法相比,後者更加嚴格一些。

密碼文件方式:

vi ftppasswd

username1

passwd1

username2

passwd2

db_load -T -t hash -f ftppasswd /etc/vsftpd/account.db
chmod 600 /etc/vsftpd/account.db

cat /etc/pam.d/vsftpd.db
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/account

account required /lib/security/pam_userdb.so db=/etc/vsftpd/account

cat /etc/pam.d/vsftpd.db
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/account

account required /lib64/security/pam_userdb.so db=/etc/vsftpd/account

sed -i -e "s/pam_service_name=*/pam_service_name=vsftpd.db/" /etc/vsftpd/vsftpd.conf

mysql數據庫方式:

安裝pam_myql

mysql -uroot -p 

mysql>;create database vsftpdvirtual; 
mysql>;use vsftpdvirtual; 
mysql>;create table users(name char(16) binary,passwd char(16) binary); 
mysql>;insert into users (name,passwd) values ('win',password('123456')); 
mysql>;insert into users (name,passwd) values ('wingger',password('123456')); 

mysql>;grant select on vsftpdvirtual.users to vsftpdvirtual@localhost identified by '123456'; 

mysql>;quit 

 

cat /etc/pam.d/vsftpd.mysql

auth required pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost db=vsftpdvirtual   table=users usercolumn=name passwdcolumn=passwd crypt=2 
account required pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost  db=vsftpdvirtual  table=users usercolumn=name passwdcolumn=passwd crypt=2 

sed -i -e "s/pam_service_name=*/pam_service_name=vsftpd.mysql/" /etc/vsftpd/vsftpd.conf

4、訪問管理

隱藏文件的所有者和組信息,匿名用戶看到的文件的所有者和組全變爲ftp 
hide_ids=YES 

==========================================================================

#ssl 訪問
ssl_enable=YES
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
force_local_logins_ssl=NO
force_local_data_ssl=NO

 

cd /etc/pki/tls/certs/
make vsftpd.pem
umask 77 ; \
  PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
  PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
  /usr/bin/openssl req -utf8 -newkey rsa:1024 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 -set_serial 0 ; \
  cat $PEM1 > vsftpd.pem ; \
  echo "" >> vsftpd.pem ; \
  cat $PEM2 >> vsftpd.pem ; \
  rm -f $PEM1 $PEM2

==========================================================================

#允許使用/etc/hosts.allow和/etc/hosts.deny文件來限制對ftp的訪問控制
tcp_wrappers=YES
# echo "vsftpd:127.0.0.1" >> /etc/hosts.allow
# echo "vsftpd:192.168.0." >> /etc/hosts.allow
# echo "vsftpd:ALL" >> /etc/hosts.deny
 

 

四、磁盤配額

   我們先假設我們的系統用戶ftpd的主目錄是/home/ftpd,它是建立在/home分區中,那麼如果我們要對ftpd用戶進行磁盤限額,那我們需要修改/etc/fstab中根分區的記錄,將/home分區的第4個字段改成defaults,usrquota,如下:
LABEL=/home   /home   ext3    defaults,usrquota     1 2
# reboot  //重新啓動系統使設置生效
也可以用
# mount -o remount /dev/sda6  ///dev/sda6的掛接點就是/home,這樣可以不用啓動系統。
這裏我還要說明一下,如果我們對一個組進行磁配額,那我們需要增加參數grpquota,例如
LABEL=/home   /home   ext3    defaults,grpquota     1 2
也可以
LABEL=/home   /home   ext3    defaults,usrquota,grpquota     1 2
你想怎麼限制都可以,自己組合參數吧。
# quotacheck -avu
說明:a-自動開啓掛載文件系統的配額,v-顯示信息,u-啓用用戶配額or g-啓用組配額
# edquota ftpd //爲用戶ftpd設置磁盤配額
OR
# edquota -g grp  //爲組grp設置磁盤配額
系統會自動打開配額文件,如下:
Disk quotas for user ftpd (uid 502):
  Filesystem         blocks       soft       hard     inodes     soft     hard
  /dev/sda6           424          0          0         13        0        0
第一列是啓用了配額的文件系統的名稱。第二列顯示了用戶當前使用的塊數,單位爲KB。隨後的兩列用來設置用戶在該文件系統上的軟硬塊限度。inodes 列顯示了用戶當前使用的i節點數量。最後兩列用來設置用戶在該文件系統上的軟硬i節點限度.硬限是用戶或組羣可以使用的磁盤空間的絕對最大值。達到了該限度後,磁盤空間就不能再被用戶或組羣使用了。軟限定義可被使用的最大磁盤空間量。和硬限不同的是,軟限可以在一段時期內被超過。這段時期被稱爲過渡期(grace period),默認七天的超越。過渡期可以用秒鐘、分鐘、小時、天數、週數、或月數表示。如果以上值中的任何一個被設置爲 0,那個限度就不會被設置。我設置了硬塊限度爲1KB,是爲了測試方便。
# quotaon  -avu  //打開磁盤配額監控進程,u是用戶g是組,這裏我沒設置g參數
要校驗用戶的配額是否被設置,我們可以使用以下命令:
# quota ftpd
Disk quotas for user ftpd (uid 502):
  Filesystem  blocks   quota   limit    grace   files   quota   limit   grace
/dev/sda6     424*    0      1            13      0      0        
# edquota –t(-g)來設置過渡期(grace period) //當然只針對軟限制而言
和另一個 edquota 命令相似,這個命令也會在文本編輯器中打開當前的文件系統配額:
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
/dev/sda6                     7days                  7days
按你的需要修改後存盤退出
用以下命令顯示磁盤配額使用狀態
# repquota  -a  或 repquota  /dev/sda6(用戶配額)
# repquota -g -a 或 repquota -a /dev/sda6 (組的配額)
如果一切按照你的意思實施了,那麼我們就進行測試了!如下圖4

我們傳了一個>;1k的文件,沒有成功,這樣我們就成功的爲用戶ftpd增添了磁盤配額,要是哪一天你不想加磁盤配額了,怎麼辦?參看如下命令:
取消某個文件系統的配額限制
#quotaoff  -vug /dev/sda6  //刪除home分區的磁盤限額
#刪除/etc/fstab中設置配額的部分
修改軟配額的最大超越時間
注意:
/,/boot/,/proc,/mnt/cdrom等不要使用配額,沒用。而且磁盤配額不適合FAT和FAT32系統。
以後當新設置了某個用戶的配額,可以使用如下命令,馬上生效。
# quotacheck -auvgm       --是不嘗試重新掛載文件系統
 

五、附錄
1、vsftpd配置參數詳細整理
############## 基礎配置

#綁定到listen_port指定的端口,既然都綁定了也就是每時都開着的,就是那個什麼standalone模式
listen=YES

#綁定到某個IP,其它IP不能做爲vsftp服務被訪問
listen_address=192.168.0.2
#綁定到某個端口
#listen_port=2121

#允許使用pasv模式
pasv_enable=YES
#使vsftpd在pasv命令回覆時跳轉到指定的IP地址.(服務器聯接跳轉?)
pasv_address=(none)
#pasv連接模式時可以使用port 範圍的上界,0 表示任意。默認值爲0。
pasv_max_port=0
#pasv連接模式時可以使用port 範圍的下界,0 表示任意。默認值爲0。
pasv_min_port=0
#關閉安全檢查,小心呀.
#pasv_promiscuous+NO
#PAVS請求超時
ACCEPT_TIMEOUT=60

#允許使用port模式
#port_enable=YES
#關閉安全檢查
#prot_promiscuous
#PROT模式連接超時
connect_timeout=60
#數據傳輸端口
#ftp_data_port=2020
#使用標準的20端口來連接ftp
connect_from_port_20=YES
#開啓日記功能
xferlog_enable=YES
#使用標準格式
xferlog_std_format=YES
#當xferlog_std_format關閉且本選項開啓時,記錄所有ftp請求和回覆,當調試比較有用.
#log_ftp_protocol=NO
#日誌文件位置
xferlog_file=/var/log/vsftpd.log

#目錄信息文件
message_file=.message
#定義登錄信息文件的位置
banner_file=/etc/vsftpd/banner
#login時顯示歡迎信息.如果設置了banner_file則此設置無效
ftpd_banner=歡迎來到湖南三辰Fake-Ta FTP 網站.
#允許爲目錄配置顯示信息,顯示每個目錄下面的message_file文件的內容
dirmessage_enable=YES
#顯示會話狀態信息,關!
#setproctitle_enable=YES


#空閒連接超時
idle_session_timeout=600
#數據傳輸超時
data_connection_timeout=120
#接受建立聯機的超時設定
accept_timeout=60

#可接受的最大client數目
max_clients=100
#每個ip的最大client數目
max_per_ip=5

 

#允許使用"async ABOR"命令,一般不用,容易出問題
async_abor_enable=YES
#管控是否可用ASCII 模式上傳。默認值爲NO。
ascii_upload_enable=YES
#管控是否可用ASCII 模式下載。默認值爲NO。
ascii_download_enable=YES


#是否能使用ls -R命令以防止浪費大量的服務器資源
#ls_recurse_enable=YES
#是否使用單進程模式
#one_process_model

#顯示目錄清單時是用本地時間還是GMT時間,可以通過mdtm命令來達到一樣的效果
use_localtime=NO
#測試平臺優化
#use_sendfile=YES


#可以上傳(全局控制).
write_enable=YES
#上傳文件的權限配合umask使用
#file_open_mode=0666

############# 匿名用戶配置

#接受匿名用戶
anonymous_enable=YES

anon_umask=022

#匿名用戶login時不詢問口令
no_anon_password=YES
#匿名用戶主目錄
anon_root=(none)

#定義匿名登入的使用者名稱。默認值爲ftp。
ftp_username=FTP

#匿名用戶的傳輸比率(b/s)
anon_max_rate=51200

#匿名用戶登陸後的根目錄
anon_root=/var/ftp

#匿名用戶可以上傳
anon_upload_enable=NO
#匿名用戶可以建目錄
anon_mkdir_write_enable=NO
#匿名用戶其它的寫及刪除權利
anon_other_write_enable=NO
#如果設爲YES,匿名登入者會被允許下載可閱讀的檔案。默認值爲YES。
anon_world_readable_only=YES

所有匿名上傳的文件的所屬用戶將會被更改成chown_username
chown_uploads=YES
匿名上傳文件所屬用戶名
chown_username=lightwiter

#如果匿名用戶需要密碼,那麼使用banned_email_file裏面的電子郵件地址的用戶不能登錄
deny_email_enable=YES

#禁止使用的匿名用戶登陸時作爲密碼的電子郵件地址
banned_email_file=/etc/vsftpd.banned_emails


############ 本地用戶 配置

#接受本地用戶
local_enable=YES
#本地用戶主目錄
local_root=(none)
#local_root=webdisk #此項設置每個用戶登陸後其根目錄爲/home/username/webdisk

#本地用戶上傳文件的umask
local_umask=022

#本地用戶的傳輸比率(b/s)
local_max_rate=5120000

#定義用戶配置文件的目錄
user_config_dir=/etc/vsftpd/userconf
#定義本地用戶登陸的根目錄,注意定義根目錄可以是相對路徑也可以是絕對路徑.相對路徑是針對用戶家目錄來說的.

#定義限制/允許用戶登錄的文件
userlist_file=/etc/vsftpd/vsftpd.user_list

########## 虛擬用戶

guest_enable=YES|NO 

#若是啓動這項功能,所有的非匿名登入者都視爲guest

guest_username=ftp
#定義VSFTPD的guest用戶在系統中的用戶名。默認值爲ftp


############## 用戶訪問安全

#定義PAM 所使用的名稱,預設爲vsftpd。
pam_service_name=vsftpd

#僅在沒有pam驗證版本時有用,是否檢查用戶有一個有效的shell來登錄
check_shell=YES
#若啓用此選項,userlist_deny選項才被啓動
userlist_enable=YES
#若爲YES,則userlist_file中的用戶將不能登錄,爲NO則只有userlist_file的用戶可以登錄
userlist_deny=NO
#如果和chroot_local_user一起開啓,那麼用戶鎖定的目錄來自/etc/passwd每個用戶指定的目錄(這個不是很清楚,很哪位熟悉的指點一下)
passwd_chroot_enable=NO

#定義不能更改用戶主目錄的文件
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list

#如果啓動這項功能,則所有列在chroot_list_file之中的使用者不能更改根目錄
chroot_list_enable=YES

#這個選項必須指定一個空的數據夾且任何登入者都不能有寫入的權限,當vsftpd 不需要file system 的權限時,就會將使用者限制在此數據夾中。默認值爲/usr/share/empty
secure_chroot_dir=/usr/share/empty

#將本地用戶鎖定在自家目錄中。當此項被激活時,chroot_list_enable和chroot_local_users參數的作用將發生變化,chroot_list_file所指定文件中的用戶將不被鎖定在自家目錄。本參數被激活後,可能帶來安全上的衝突,特別是當用戶擁有上傳、 shell訪問等權限時。因此,只有在確實瞭解的情況下,纔可以打開此參數。默認值爲NO。 
chroot_local_users=YES|NO 

#是否隱藏文件的所有者和組信息。YES,當用戶使用"ls -al"之類的指令時,在目錄列表中所有文件的擁有者和組信息都顯示爲ftp。默認值爲NO
hide_ids=YES|NO 

#開啓tcp_wrappers支持
tcp_wrappers=YES

#當服務器運行於最底層時使用的用戶名
nopriv_user=nobody

#當使用者登入後使用ls -al 之類的指令查詢該檔案的管理權時,預設會出現擁有者的UID,而不是該檔案擁有者的名稱。若是希望出現擁有者的名稱,則將此功能開啓。
text_userdb_names=NO
########################################
別外,如果要對每個用戶進行單獨的控制,只需要在user_config_dir中建立username文件,內容爲數據傳輸和用戶權利裏面設置個人的合適的選項,用戶自定義文件同樣適合用pam支持的虛擬用戶


2、 FTP 數字代碼的意義
110 重新啓動標記應答。
120 服務在多久時間內ready。
125 數據鏈路埠開啓,準備傳送。
150 文件狀態正常,開啓數據連接端口。
200 命令執行成功。
202 命令執行失敗。
211 系統狀態或是系統求助響應。
212 目錄的狀態。
213 文件的狀態。
214 求助的訊息。
215 名稱系統類型。
220 新的聯機服務ready。
221 服務的控制連接埠關閉,可以註銷。
225 數據連結開啓,但無傳輸動作。
226 關閉數據連接端口,請求的文件操作成功。
227 進入passive mode。
230 使用者登入。
250 請求的文件操作完成。
257 顯示目前的路徑名稱。
331 用戶名稱正確,需要密碼。
332 登入時需要賬號信息。
350 請求的操作需要進一部的命令。
421 無法提供服務,關閉控制連結。
425 無法開啓數據鏈路。
426 關閉聯機,終止傳輸。
450 請求的操作未執行。
451 命令終止:有本地的錯誤。
452 未執行命令:磁盤空間不足。
500 格式錯誤,無法識別命令。
501 參數語法錯誤。
502 命令執行失敗。
503 命令順序錯誤。
504 命令所接的參數不正確。
530 未登入。
532 儲存文件需要賬戶登入。
550 未執行請求的操作。
551 請求的命令終止,類型未知。
552 請求的文件終止,儲存位溢出。
553 未執行請求的的命令,名稱不正確。
 

參考文章:《vsftp配置大全---超完整版,首發CU之FTP區

http://bbs.chinaunix.net/thread-561183-1-1.html

http://www.chinaunix.net/jh/4/484844.html

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