linux VSFTPD
rpm -ivh vsftpd2.2.2.e6.x86.rpm
二.系統帳戶
1.建立Vsftpd服務的宿主使用者:
[root@zc55 ~]# useradd vsftpd -s /sbin/nologin
預設的Vsftpd的服務宿主使用者是root,但是這不符合安全性的需要。這裡建立名字為vsftpd的使用者,用他來作為支援Vsftpd的服務宿主使用者。由於該使用者僅用來支援Vsftpd服務用,因此沒有許可他登陸系統的必要,並設定他為不能登陸系統的使用者。
2.建立Vsftpd虛擬宿主使用者:
[root@zc55 nowhere]# useradd overlord -s /sbin/nologin
本篇主要是介紹Vsftp的虛擬使用者,虛擬使用者並不是系統使用者,也就是說這些FTP的使用者在系統中是不存在的。他們的總體許可權其實是集中寄託在一個在系統中的某一個使用者身上的,所謂Vsftpd的虛擬宿主使用者,就是這樣一個支援著所有虛擬使用者的宿主使用者。由於他支撐了FTP的所有虛擬的使用者,那麼他本身的許可權將會影響著這些虛擬的使用者,因此,處於安全性的考慮,也要非分注意對該使用者的許可權的控制,該使用者也絕對沒有登陸系統的必要,這裡也設定他為不能登陸系統的使用者。(這裡插一句:原本在建立上面兩個使用者的時候,想連使用者主路徑也不打算給的。本來想加上 -d /home/nowhere 的,據man useradd手冊上講述:“ -d, --home HOME_DIR
The new user will be created using HOME_DIR as the value for the
user鈙 login directory. The default is to append the LOGIN name to
BASE_DIR and use that as the login directory name. The directory
HOME_DIR does not have to exist but will not be created if it is
missing.
使用-d引數指定使用者的主目錄,使用者主目錄並不是必須存在的。如果沒有存在指定的目錄的話,那麼它將不會被建立”。
三.調整Vsftpd的配置檔案:
1.編輯配置檔案前先備份
[root@zc55 ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup2.編輯主配置檔案Vsftpd.conf
[root@zc55 ~]# vi /etc/vsftpd/vsftpd.conf
這裡我將原配置檔案的修改完全記錄,凡是修改的地方我都會保留註釋原來的配置。其中加入我對每條配置項的認識,對於一些比較關鍵的配置項這裡我做了我的觀點,並且原本英語的說明我也不刪除,供參考對比用。
------------------------------------------------------------------------------
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
#anonymous_enable=YES
anonymous_enable=NO
設定不允許匿名訪問
#
# Uncomment this to allow local users to log in.
local_enable=YES
設定本地使用者可以訪問。注意:主要是為虛擬宿主使用者,如果該專案設定為NO那麼所有虛擬使用者將無法訪問。
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
設定可以進行寫操作。
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
設定上傳後檔案的許可權掩碼。
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
anon_upload_enable=NO
禁止匿名使用者上傳。
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
anon_mkdir_write_enable=NO
禁止匿名使用者建立目錄。
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
設定開啟目錄標語功能。
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
設定開啟日誌記錄功能。
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
設定埠20進行資料連線。
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
chown_uploads=NO
設定禁止上傳檔案更改宿主。
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/vsftpd.log
設定Vsftpd的服務日誌儲存路徑。注意,該檔案預設不存在。必須要手動touch出來,並且由於這裡更改了Vsftpd的服務宿主使用者為手動建立的Vsftpd。必須注意給與該使用者對日誌的寫入許可權,否則服務將啟動失敗。
#
# If you want, you can have your log file in standard ftpd xferlog format
xferlog_std_format=YES
設定日誌使用標準的記錄格式。
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
設定空閒連線超時時間,這裡使用預設。將具體數值留給每個具體使用者具體指定,當然如果不指定的話,還是使用這裡的預設值600,單位秒。
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
設定單次最大連續傳輸時間,這裡使用預設。將具體數值留給每個具體使用者具體指定,當然如果不指定的話,還是使用這裡的預設值120,單位秒。
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
nopriv_user=vsftpd
設定支撐Vsftpd服務的宿主使用者為手動建立的Vsftpd使用者。注意,一旦做出更改宿主使用者後,必須注意一起與該服務相關的讀寫檔案的讀寫賦權問題。比如日誌檔案就必須給與該使用者寫入許可權等。
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
async_abor_enable=YES
設定支援非同步傳輸功能。
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
ascii_upload_enable=YES
ascii_download_enable=YES
設定支援ASCII模式的上傳和下載功能。
#
# You may fully customise the login banner string:
ftpd_banner=This Vsftp server supports virtual users ^_^
設定Vsftpd的登陸標語。
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_list_enable=YES
chroot_list_enable=NO
禁止使用者登出自己的FTP主目錄。
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
ls_recurse_enable=NO
禁止使用者登陸FTP後使用"ls -R"的命令。該命令會對伺服器效能造成巨大開銷。如果該項被允許,那麼擋多使用者同時使用該命令時將會對該伺服器造成威脅。
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=YES
設定該Vsftpd服務工作在StandAlone模式下。順便展開說明一下,所謂StandAlone模式就是該服務擁有自己的守護程式支援,在ps -A命令下我們將可用看到vsftpd的守護程式名。如果不想工作在StandAlone模式下,則可以選擇SuperDaemon模式,在該模式下 vsftpd將沒有自己的守護程式,而是由超級守護程式Xinetd全權代理,與此同時,Vsftp服務的許多功能將得不到實現。
#
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
# sockets, you must run two copies of vsftpd whith two configuration files.
# Make sure, that one of the listen options is commented !!
#listen_ipv6=YESpam_service_name=vsftpd
設定PAM服務下Vsftpd的驗證配置檔名。因此,PAM驗證將參考/etc/pam.d/下的vsftpd檔案配置。
userlist_enable=YES
設定userlist_file中的使用者將不得使用FTP。
tcp_wrappers=YES
設定支援TCP Wrappers。#KC: The following entries are added for supporting virtual ftp users.
以下這些是關於Vsftpd虛擬使用者支援的重要配置專案。預設Vsftpd.conf中不包含這些設定專案,需要自己手動新增配置。guest_enable=YES
設定啟用虛擬使用者功能。
guest_username=overlord
指定虛擬使用者的宿主使用者。
virtual_use_local_privs=YES
設定虛擬使用者的許可權符合他們的宿主使用者。
user_config_dir=/etc/vsftpd/vconf
設定虛擬使用者個人Vsftp的配置檔案存放路徑。也就是說,這個被指定的目錄裡,將存放每個Vsftp虛擬使用者個性的配置檔案,一個需要注意的地方就是這些配置檔名必須和虛擬使用者名稱相同。
-------------------------------------------------------------------------
儲存退出。
3.建立Vsftpd的日誌檔案,並更該屬主為Vsftpd的服務宿主使用者:
[root@zc55 ~]# touch /var/log/vsftpd.log
[root@zc55 ~]# chown vsftpd.vsftpd /var/log/vsftpd.log 4.建立虛擬使用者配置檔案存放路徑:
[root@zc55 ~]# mkdir /etc/vsftpd/vconf/
三.製作虛擬使用者資料庫檔案
1.先建立虛擬使用者名稱單檔案:
[root@zc55 ~]# touch /etc/vsftpd/virtusers
建立了一個虛擬使用者名稱單檔案,這個檔案就是來記錄vsftpd虛擬使用者的使用者名稱和口令的資料檔案,我這裡給它命名為virtusers。為了避免檔案的混亂,我把這個名單檔案就放置在/etc/vsftpd/下。
2.編輯虛擬使用者名稱單檔案:
[root@zc55 ~]# vi /etc/vsftpd/virtusers
----------------------------
kanecruise
123456
near
123456near
mello
123456mello
----------------------------
編輯這個虛擬使用者名稱單檔案,在其中加入使用者的使用者名稱和口令資訊。格式很簡單:“一行使用者名稱,一行口令”。
3.生成虛擬使用者資料檔案:
[root@zc55 ~]# db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
這裡我順便把這個命令簡單說明一下
----------------------------------------------------------------------
察看db4的db_load命令使用方法:
[root@KSRV2 vsftpd]# db_load
usage: db_load [-nTV] [-c name=value] [-f file]
[-h home] [-P password] [-t btree | hash | recno | queue] db_file
usage: db_load -r lsn | fileid [-h home] [-P password] db_file
解釋在本篇中,db_load命令幾個相關選項很引數-T
The -T option allows non-Berkeley DB applications to easily load text files into databases.
If the database to be created is of type Btree or Hash, or the keyword keys is specified as set, the input must be paired lines of text, where the first line of the pair is the key item, and the second line of the pair is its corresponding data item. If the database to be created is of type Queue or Recno and the keywork keys is not set, the input must be lines of text, where each line is a new data item for the database.
選項-T允許應用程式能夠將文字檔案轉譯載入進資料庫。由於我們之後是將虛擬使用者的資訊以檔案方式儲存在檔案裡的,為了讓Vsftpd這個應用程式能夠透過文字來載入使用者資料,必須要使用這個選項。If the -T option is specified, the underlying access method type must be specified using the -t option.
如果指定了選項-T,那麼一定要追跟子選項-t-t
Specify the underlying access method. If no -t option is specified, the database will be loaded into a database of the same type as was dumped; for example, a Hash database will be created if a Hash database was dumped.
Btree and Hash databases may be converted from one to the other. Queue and Recno databases may be converted from one to the other. If the -k option was specified on the call to db_dump then Queue and Recno databases may be converted to Btree or Hash, with the key being the integer record number.
子選項-t,追加在在-T選項後,用來指定轉譯載入的資料庫型別。擴充套件介紹下,-t可以指定的資料型別有Btree、Hash、Queue和Recon資料庫。這裡,接下來我們需要指定的是Hash型。
----------------------------------------------------------------------------
4.察看生成的虛擬使用者資料檔案
[root@zc55 ~]# ll /etc/vsftpd/virtusers.db
-rw-r--r-- 1 root root 12288 Sep 16 03:51 /etc/vsftpd/virtusers.db
需要特別注意的是,以後再要新增虛擬使用者的時候,只需要按照“一行使用者名稱,一行口令”的格式將新使用者名稱和口令新增進虛擬使用者名稱單檔案。但是光這樣做還不夠,不會生效的哦!還要再執行一遍“ db_load -T -t hash -f 虛擬使用者名稱單檔案 虛擬使用者資料庫檔案.db ”的命令使其生效才可以!
四.設定PAM驗證檔案,並指定虛擬使用者資料庫檔案進行讀取
1.察看原來的Vsftp的PAM驗證配置檔案:
[root@zc55 ~]# cat /etc/pam.d/vsftpd
----------------------------------------------------------------
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
account include system-auth
session include system-auth
session required pam_loginuid.so
----------------------------------------------------------------
2.在編輯前做好備份:
[root@zc55 ~]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup3.編輯Vsftpd的PAM驗證配置檔案
[root@zc55 ~]# vi /etc/pam.d/vsftpd
----------------------------------------------------------------
#%PAM-1.0
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
以上兩條是手動新增的,內容是對虛擬使用者的安全和帳戶許可權進行驗證。
這裡的auth是指對使用者的使用者名稱口令進行驗證。
這裡的accout是指對使用者的帳戶有哪些許可權哪些限制進行驗證。
其後的sufficient表示充分條件,也就是說,一旦在這裡透過了驗證,那麼也就不用經過下面剩下的驗證步驟了。相反,如果沒有透過的話,也不會被系統立即擋之門外,因為sufficient的失敗不決定整個驗證的失敗,意味著使用者還必須將經歷剩下來的驗證稽核。
再後面的/lib/security/pam_userdb.so表示該條稽核將呼叫pam_userdb.so這個庫函式進行。
最後的db=/etc/vsftpd/virtusers則指定了驗證庫函式將到這個指定的資料庫中呼叫資料進行驗證。
#KC: The entries for Vsftpd-PAM are added above.session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
account include system-auth
session include system-auth
session required pam_loginuid.so
----------------------------------------------------------------
五.虛擬使用者的配置
1.規劃好虛擬使用者的主路徑:
[root@zc55 ~]# mkdir /opt/vsftp/
2.建立測試使用者的FTP使用者目錄:
[root@zc55 ~]# mkdir /opt/vsftp/kanecruise/ /opt/vsftp/mello/ /opt/vsftp/near/
3.建立虛擬使用者配置檔案模版:[root@zc55 ~]# cp /etc/vsftpd/vsftpd.conf.backup /etc/vsftpd/vconf/vconf.tmp
4.定製虛擬使用者模版配置檔案:
[root@zc55 ~]# vi /etc/vsftpd/vconf/vconf.tmp
--------------------------------
local_root=/opt/vsftp/virtuser
指定虛擬使用者的具體主路徑。
anonymous_enable=NO
設定不允許匿名使用者訪問。
write_enable=YES
設定允許寫操作。
local_umask=022
設定上傳檔案許可權掩碼。
anon_upload_enable=NO
設定不允許匿名使用者上傳。
anon_mkdir_write_enable=NO
設定不允許匿名使用者建立目錄。
idle_session_timeout=600
設定空閒連線超時時間。
data_connection_timeout=120
設定單次連續傳輸最大時間。
max_clients=10
設定併發客戶端訪問個數。
max_per_ip=5
設定單個客戶端的最大執行緒數,這個配置主要來照顧Flashget、迅雷等多執行緒下載軟體。
local_max_rate=50000
設定該使用者的最大傳輸速率,單位b/s。
--------------------------------
這裡將原vsftpd.conf配置檔案經過簡化後儲存作為虛擬使用者配置檔案的模版。這裡將並不需要指定太多的配置內容,主要的框架和限制交由 Vsftpd的主配置檔案vsftpd.conf來定義,即虛擬使用者配置檔案當中沒有提到的配置專案將參考主配置檔案中的設定。而在這裡作為虛擬使用者的配置檔案模版只需要留一些和使用者流量控制,訪問方式控制的配置專案就可以了。這裡的關鍵項是local_root這個配置,用來指定這個虛擬使用者的FTP主路徑。5.更改虛擬使用者的主目錄的屬主為虛擬宿主使用者:
[root@zc55 ~]# chown -R overlord.overlord /opt/vsftp/6.檢查許可權:
[root@zc55 ~]# ll /opt/vsftp/
total 24
drwxr-xr-x 2 overlord overlord 4096 Sep 16 05:14 kanecruise
drwxr-xr-x 2 overlord overlord 4096 Sep 16 05:00 mello
drwxr-xr-x 2 overlord overlord 4096 Sep 16 05:00 near
六.給測試使用者定製:
1.從虛擬使用者模版配置檔案複製:
[root@zc55 ~]# cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/kanecruise
2.針對具體使用者進行定製:
[root@zc55 ~]# vi /etc/vsftpd/vconf/kanecruise
---------------------------------
local_root=/opt/vsftp/kanecruise
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=300
data_connection_timeout=90
max_clients=1
max_per_ip=1
local_max_rate=25000
---------------------------------
七.啟動服務:
[root@zc55 ~]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
八.測試:
1.在虛擬使用者目錄中預先放入檔案:
[root@zc55 ~]# touch /opt/vsftp/kanecruise/kc.test
2.從其他機器作為客戶端登陸FTP:
[root@Yum ~]# ftp
ftp> open 192.168.1.22
Connected to 192.168.1.22.
220 This Vsftp server supports virtual users ^_^
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.1.22:root): kanecruise
331 Please specify the password.
Password: 123456
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
3.測試列單操作
ftp> ls
227 Entering Passive Mode (192,168,1,22,220,24)
150 Here comes the directory listing.
-rw-r--r-- 1 501 501 0 Sep 15 21:14 kc.test
226 Directory send OK.(目錄列單成功)
4.測試上傳操作:
ftp> put
(local-file) KC.repo
(remote-file) KC.repo
local: KC.repo remote: KC.repo
227 Entering Passive Mode (192,168,1,22,230,1)
150 Ok to send data.
226 File receive OK. (上傳成功)
699 bytes sent in 0.024 seconds (29 Kbytes/s)
ftp>
5.測試建立目錄操作:
ftp> mkdir test
257 "/opt/vsftp/kanecruise/test" created (目錄建立成功)
6.測試下載操作:
ftp> get kc.test
local: kc.test remote: kc.test
227 Entering Passive Mode (192,168,1,22,164,178)
150 Opening BINARY mode data connection for kc.test (0 bytes).
226 File send OK.(下載成功)
7.測試超時:
ftp> dir
421 Timeout.(超時有效)
ftp> user
Not connected.注意:
在/etc/vsftpd/vsftpd.conf中,local_enable的選項必須開啟為Yes,使得虛擬使用者的訪問成為可能,否則會出現以下現象:
----------------------------------
[root@zc55 ~]# ftp
ftp> open 192.168.1.22
Connected to 192.168.1.22.
500 OOPS: vsftpd: both local and anonymous access disabled!
----------------------------------
原因:虛擬使用者再豐富,其實也是基於它們的宿主使用者overlord的,如果overlord這個虛擬使用者的宿主被限制住了,那麼虛擬使用者也將受到限制。
補充:
500 OOPS:錯誤
有可能是你的vsftpd.con配置檔案中有不能被實別的命令,還有一種可能是命令的YES 或 NO 後面有空格。
我遇到的是命令後面有空格。因為我是用GEDIT來編輯的配置檔案
550 許可權錯誤,不能建立目錄和檔案
解決方法: 關閉selinux
# vi /etc/selinux/config
將 SELINUX=XXX -->XXX 代表級別
改為
SELINUX=disabled
重啟
另外chroot_list_enable=NO時需要設定 chroot_local_user=YES
才能將使用者限制在指定的目錄。另外還對應的防火牆設定,如果允許被動模式的話:防火牆中還需要新增:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9010:9020 -j ACCEPT
vsftpd.conf中需要新增
pasv_enable=yes
pasv_min_port=9010
pasv_max_port=9020
listen_port=21
二.系統帳戶
1.建立Vsftpd服務的宿主使用者:
[root@zc55 ~]# useradd vsftpd -s /sbin/nologin
預設的Vsftpd的服務宿主使用者是root,但是這不符合安全性的需要。這裡建立名字為vsftpd的使用者,用他來作為支援Vsftpd的服務宿主使用者。由於該使用者僅用來支援Vsftpd服務用,因此沒有許可他登陸系統的必要,並設定他為不能登陸系統的使用者。
2.建立Vsftpd虛擬宿主使用者:
[root@zc55 nowhere]# useradd overlord -s /sbin/nologin
本篇主要是介紹Vsftp的虛擬使用者,虛擬使用者並不是系統使用者,也就是說這些FTP的使用者在系統中是不存在的。他們的總體許可權其實是集中寄託在一個在系統中的某一個使用者身上的,所謂Vsftpd的虛擬宿主使用者,就是這樣一個支援著所有虛擬使用者的宿主使用者。由於他支撐了FTP的所有虛擬的使用者,那麼他本身的許可權將會影響著這些虛擬的使用者,因此,處於安全性的考慮,也要非分注意對該使用者的許可權的控制,該使用者也絕對沒有登陸系統的必要,這裡也設定他為不能登陸系統的使用者。(這裡插一句:原本在建立上面兩個使用者的時候,想連使用者主路徑也不打算給的。本來想加上 -d /home/nowhere 的,據man useradd手冊上講述:“ -d, --home HOME_DIR
The new user will be created using HOME_DIR as the value for the
user鈙 login directory. The default is to append the LOGIN name to
BASE_DIR and use that as the login directory name. The directory
HOME_DIR does not have to exist but will not be created if it is
missing.
使用-d引數指定使用者的主目錄,使用者主目錄並不是必須存在的。如果沒有存在指定的目錄的話,那麼它將不會被建立”。
三.調整Vsftpd的配置檔案:
1.編輯配置檔案前先備份
[root@zc55 ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup2.編輯主配置檔案Vsftpd.conf
[root@zc55 ~]# vi /etc/vsftpd/vsftpd.conf
這裡我將原配置檔案的修改完全記錄,凡是修改的地方我都會保留註釋原來的配置。其中加入我對每條配置項的認識,對於一些比較關鍵的配置項這裡我做了我的觀點,並且原本英語的說明我也不刪除,供參考對比用。
------------------------------------------------------------------------------
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
#anonymous_enable=YES
anonymous_enable=NO
設定不允許匿名訪問
#
# Uncomment this to allow local users to log in.
local_enable=YES
設定本地使用者可以訪問。注意:主要是為虛擬宿主使用者,如果該專案設定為NO那麼所有虛擬使用者將無法訪問。
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
設定可以進行寫操作。
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
設定上傳後檔案的許可權掩碼。
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
anon_upload_enable=NO
禁止匿名使用者上傳。
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
anon_mkdir_write_enable=NO
禁止匿名使用者建立目錄。
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
設定開啟目錄標語功能。
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
設定開啟日誌記錄功能。
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
設定埠20進行資料連線。
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
chown_uploads=NO
設定禁止上傳檔案更改宿主。
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/vsftpd.log
設定Vsftpd的服務日誌儲存路徑。注意,該檔案預設不存在。必須要手動touch出來,並且由於這裡更改了Vsftpd的服務宿主使用者為手動建立的Vsftpd。必須注意給與該使用者對日誌的寫入許可權,否則服務將啟動失敗。
#
# If you want, you can have your log file in standard ftpd xferlog format
xferlog_std_format=YES
設定日誌使用標準的記錄格式。
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
設定空閒連線超時時間,這裡使用預設。將具體數值留給每個具體使用者具體指定,當然如果不指定的話,還是使用這裡的預設值600,單位秒。
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
設定單次最大連續傳輸時間,這裡使用預設。將具體數值留給每個具體使用者具體指定,當然如果不指定的話,還是使用這裡的預設值120,單位秒。
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
nopriv_user=vsftpd
設定支撐Vsftpd服務的宿主使用者為手動建立的Vsftpd使用者。注意,一旦做出更改宿主使用者後,必須注意一起與該服務相關的讀寫檔案的讀寫賦權問題。比如日誌檔案就必須給與該使用者寫入許可權等。
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
async_abor_enable=YES
設定支援非同步傳輸功能。
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
ascii_upload_enable=YES
ascii_download_enable=YES
設定支援ASCII模式的上傳和下載功能。
#
# You may fully customise the login banner string:
ftpd_banner=This Vsftp server supports virtual users ^_^
設定Vsftpd的登陸標語。
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_list_enable=YES
chroot_list_enable=NO
禁止使用者登出自己的FTP主目錄。
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
ls_recurse_enable=NO
禁止使用者登陸FTP後使用"ls -R"的命令。該命令會對伺服器效能造成巨大開銷。如果該項被允許,那麼擋多使用者同時使用該命令時將會對該伺服器造成威脅。
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=YES
設定該Vsftpd服務工作在StandAlone模式下。順便展開說明一下,所謂StandAlone模式就是該服務擁有自己的守護程式支援,在ps -A命令下我們將可用看到vsftpd的守護程式名。如果不想工作在StandAlone模式下,則可以選擇SuperDaemon模式,在該模式下 vsftpd將沒有自己的守護程式,而是由超級守護程式Xinetd全權代理,與此同時,Vsftp服務的許多功能將得不到實現。
#
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
# sockets, you must run two copies of vsftpd whith two configuration files.
# Make sure, that one of the listen options is commented !!
#listen_ipv6=YESpam_service_name=vsftpd
設定PAM服務下Vsftpd的驗證配置檔名。因此,PAM驗證將參考/etc/pam.d/下的vsftpd檔案配置。
userlist_enable=YES
設定userlist_file中的使用者將不得使用FTP。
tcp_wrappers=YES
設定支援TCP Wrappers。#KC: The following entries are added for supporting virtual ftp users.
以下這些是關於Vsftpd虛擬使用者支援的重要配置專案。預設Vsftpd.conf中不包含這些設定專案,需要自己手動新增配置。guest_enable=YES
設定啟用虛擬使用者功能。
guest_username=overlord
指定虛擬使用者的宿主使用者。
virtual_use_local_privs=YES
設定虛擬使用者的許可權符合他們的宿主使用者。
user_config_dir=/etc/vsftpd/vconf
設定虛擬使用者個人Vsftp的配置檔案存放路徑。也就是說,這個被指定的目錄裡,將存放每個Vsftp虛擬使用者個性的配置檔案,一個需要注意的地方就是這些配置檔名必須和虛擬使用者名稱相同。
-------------------------------------------------------------------------
儲存退出。
3.建立Vsftpd的日誌檔案,並更該屬主為Vsftpd的服務宿主使用者:
[root@zc55 ~]# touch /var/log/vsftpd.log
[root@zc55 ~]# chown vsftpd.vsftpd /var/log/vsftpd.log 4.建立虛擬使用者配置檔案存放路徑:
[root@zc55 ~]# mkdir /etc/vsftpd/vconf/
三.製作虛擬使用者資料庫檔案
1.先建立虛擬使用者名稱單檔案:
[root@zc55 ~]# touch /etc/vsftpd/virtusers
建立了一個虛擬使用者名稱單檔案,這個檔案就是來記錄vsftpd虛擬使用者的使用者名稱和口令的資料檔案,我這裡給它命名為virtusers。為了避免檔案的混亂,我把這個名單檔案就放置在/etc/vsftpd/下。
2.編輯虛擬使用者名稱單檔案:
[root@zc55 ~]# vi /etc/vsftpd/virtusers
----------------------------
kanecruise
123456
near
123456near
mello
123456mello
----------------------------
編輯這個虛擬使用者名稱單檔案,在其中加入使用者的使用者名稱和口令資訊。格式很簡單:“一行使用者名稱,一行口令”。
3.生成虛擬使用者資料檔案:
[root@zc55 ~]# db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
這裡我順便把這個命令簡單說明一下
----------------------------------------------------------------------
察看db4的db_load命令使用方法:
[root@KSRV2 vsftpd]# db_load
usage: db_load [-nTV] [-c name=value] [-f file]
[-h home] [-P password] [-t btree | hash | recno | queue] db_file
usage: db_load -r lsn | fileid [-h home] [-P password] db_file
解釋在本篇中,db_load命令幾個相關選項很引數-T
The -T option allows non-Berkeley DB applications to easily load text files into databases.
If the database to be created is of type Btree or Hash, or the keyword keys is specified as set, the input must be paired lines of text, where the first line of the pair is the key item, and the second line of the pair is its corresponding data item. If the database to be created is of type Queue or Recno and the keywork keys is not set, the input must be lines of text, where each line is a new data item for the database.
選項-T允許應用程式能夠將文字檔案轉譯載入進資料庫。由於我們之後是將虛擬使用者的資訊以檔案方式儲存在檔案裡的,為了讓Vsftpd這個應用程式能夠透過文字來載入使用者資料,必須要使用這個選項。If the -T option is specified, the underlying access method type must be specified using the -t option.
如果指定了選項-T,那麼一定要追跟子選項-t-t
Specify the underlying access method. If no -t option is specified, the database will be loaded into a database of the same type as was dumped; for example, a Hash database will be created if a Hash database was dumped.
Btree and Hash databases may be converted from one to the other. Queue and Recno databases may be converted from one to the other. If the -k option was specified on the call to db_dump then Queue and Recno databases may be converted to Btree or Hash, with the key being the integer record number.
子選項-t,追加在在-T選項後,用來指定轉譯載入的資料庫型別。擴充套件介紹下,-t可以指定的資料型別有Btree、Hash、Queue和Recon資料庫。這裡,接下來我們需要指定的是Hash型。
----------------------------------------------------------------------------
4.察看生成的虛擬使用者資料檔案
[root@zc55 ~]# ll /etc/vsftpd/virtusers.db
-rw-r--r-- 1 root root 12288 Sep 16 03:51 /etc/vsftpd/virtusers.db
需要特別注意的是,以後再要新增虛擬使用者的時候,只需要按照“一行使用者名稱,一行口令”的格式將新使用者名稱和口令新增進虛擬使用者名稱單檔案。但是光這樣做還不夠,不會生效的哦!還要再執行一遍“ db_load -T -t hash -f 虛擬使用者名稱單檔案 虛擬使用者資料庫檔案.db ”的命令使其生效才可以!
四.設定PAM驗證檔案,並指定虛擬使用者資料庫檔案進行讀取
1.察看原來的Vsftp的PAM驗證配置檔案:
[root@zc55 ~]# cat /etc/pam.d/vsftpd
----------------------------------------------------------------
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
account include system-auth
session include system-auth
session required pam_loginuid.so
----------------------------------------------------------------
2.在編輯前做好備份:
[root@zc55 ~]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup3.編輯Vsftpd的PAM驗證配置檔案
[root@zc55 ~]# vi /etc/pam.d/vsftpd
----------------------------------------------------------------
#%PAM-1.0
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
以上兩條是手動新增的,內容是對虛擬使用者的安全和帳戶許可權進行驗證。
這裡的auth是指對使用者的使用者名稱口令進行驗證。
這裡的accout是指對使用者的帳戶有哪些許可權哪些限制進行驗證。
其後的sufficient表示充分條件,也就是說,一旦在這裡透過了驗證,那麼也就不用經過下面剩下的驗證步驟了。相反,如果沒有透過的話,也不會被系統立即擋之門外,因為sufficient的失敗不決定整個驗證的失敗,意味著使用者還必須將經歷剩下來的驗證稽核。
再後面的/lib/security/pam_userdb.so表示該條稽核將呼叫pam_userdb.so這個庫函式進行。
最後的db=/etc/vsftpd/virtusers則指定了驗證庫函式將到這個指定的資料庫中呼叫資料進行驗證。
#KC: The entries for Vsftpd-PAM are added above.session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
account include system-auth
session include system-auth
session required pam_loginuid.so
----------------------------------------------------------------
五.虛擬使用者的配置
1.規劃好虛擬使用者的主路徑:
[root@zc55 ~]# mkdir /opt/vsftp/
2.建立測試使用者的FTP使用者目錄:
[root@zc55 ~]# mkdir /opt/vsftp/kanecruise/ /opt/vsftp/mello/ /opt/vsftp/near/
3.建立虛擬使用者配置檔案模版:[root@zc55 ~]# cp /etc/vsftpd/vsftpd.conf.backup /etc/vsftpd/vconf/vconf.tmp
4.定製虛擬使用者模版配置檔案:
[root@zc55 ~]# vi /etc/vsftpd/vconf/vconf.tmp
--------------------------------
local_root=/opt/vsftp/virtuser
指定虛擬使用者的具體主路徑。
anonymous_enable=NO
設定不允許匿名使用者訪問。
write_enable=YES
設定允許寫操作。
local_umask=022
設定上傳檔案許可權掩碼。
anon_upload_enable=NO
設定不允許匿名使用者上傳。
anon_mkdir_write_enable=NO
設定不允許匿名使用者建立目錄。
idle_session_timeout=600
設定空閒連線超時時間。
data_connection_timeout=120
設定單次連續傳輸最大時間。
max_clients=10
設定併發客戶端訪問個數。
max_per_ip=5
設定單個客戶端的最大執行緒數,這個配置主要來照顧Flashget、迅雷等多執行緒下載軟體。
local_max_rate=50000
設定該使用者的最大傳輸速率,單位b/s。
--------------------------------
這裡將原vsftpd.conf配置檔案經過簡化後儲存作為虛擬使用者配置檔案的模版。這裡將並不需要指定太多的配置內容,主要的框架和限制交由 Vsftpd的主配置檔案vsftpd.conf來定義,即虛擬使用者配置檔案當中沒有提到的配置專案將參考主配置檔案中的設定。而在這裡作為虛擬使用者的配置檔案模版只需要留一些和使用者流量控制,訪問方式控制的配置專案就可以了。這裡的關鍵項是local_root這個配置,用來指定這個虛擬使用者的FTP主路徑。5.更改虛擬使用者的主目錄的屬主為虛擬宿主使用者:
[root@zc55 ~]# chown -R overlord.overlord /opt/vsftp/6.檢查許可權:
[root@zc55 ~]# ll /opt/vsftp/
total 24
drwxr-xr-x 2 overlord overlord 4096 Sep 16 05:14 kanecruise
drwxr-xr-x 2 overlord overlord 4096 Sep 16 05:00 mello
drwxr-xr-x 2 overlord overlord 4096 Sep 16 05:00 near
六.給測試使用者定製:
1.從虛擬使用者模版配置檔案複製:
[root@zc55 ~]# cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/kanecruise
2.針對具體使用者進行定製:
[root@zc55 ~]# vi /etc/vsftpd/vconf/kanecruise
---------------------------------
local_root=/opt/vsftp/kanecruise
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=300
data_connection_timeout=90
max_clients=1
max_per_ip=1
local_max_rate=25000
---------------------------------
七.啟動服務:
[root@zc55 ~]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
八.測試:
1.在虛擬使用者目錄中預先放入檔案:
[root@zc55 ~]# touch /opt/vsftp/kanecruise/kc.test
2.從其他機器作為客戶端登陸FTP:
[root@Yum ~]# ftp
ftp> open 192.168.1.22
Connected to 192.168.1.22.
220 This Vsftp server supports virtual users ^_^
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.1.22:root): kanecruise
331 Please specify the password.
Password: 123456
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
3.測試列單操作
ftp> ls
227 Entering Passive Mode (192,168,1,22,220,24)
150 Here comes the directory listing.
-rw-r--r-- 1 501 501 0 Sep 15 21:14 kc.test
226 Directory send OK.(目錄列單成功)
4.測試上傳操作:
ftp> put
(local-file) KC.repo
(remote-file) KC.repo
local: KC.repo remote: KC.repo
227 Entering Passive Mode (192,168,1,22,230,1)
150 Ok to send data.
226 File receive OK. (上傳成功)
699 bytes sent in 0.024 seconds (29 Kbytes/s)
ftp>
5.測試建立目錄操作:
ftp> mkdir test
257 "/opt/vsftp/kanecruise/test" created (目錄建立成功)
6.測試下載操作:
ftp> get kc.test
local: kc.test remote: kc.test
227 Entering Passive Mode (192,168,1,22,164,178)
150 Opening BINARY mode data connection for kc.test (0 bytes).
226 File send OK.(下載成功)
7.測試超時:
ftp> dir
421 Timeout.(超時有效)
ftp> user
Not connected.注意:
在/etc/vsftpd/vsftpd.conf中,local_enable的選項必須開啟為Yes,使得虛擬使用者的訪問成為可能,否則會出現以下現象:
----------------------------------
[root@zc55 ~]# ftp
ftp> open 192.168.1.22
Connected to 192.168.1.22.
500 OOPS: vsftpd: both local and anonymous access disabled!
----------------------------------
原因:虛擬使用者再豐富,其實也是基於它們的宿主使用者overlord的,如果overlord這個虛擬使用者的宿主被限制住了,那麼虛擬使用者也將受到限制。
補充:
500 OOPS:錯誤
有可能是你的vsftpd.con配置檔案中有不能被實別的命令,還有一種可能是命令的YES 或 NO 後面有空格。
我遇到的是命令後面有空格。因為我是用GEDIT來編輯的配置檔案
550 許可權錯誤,不能建立目錄和檔案
解決方法: 關閉selinux
# vi /etc/selinux/config
將 SELINUX=XXX -->XXX 代表級別
改為
SELINUX=disabled
重啟
另外chroot_list_enable=NO時需要設定 chroot_local_user=YES
才能將使用者限制在指定的目錄。另外還對應的防火牆設定,如果允許被動模式的話:防火牆中還需要新增:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9010:9020 -j ACCEPT
vsftpd.conf中需要新增
pasv_enable=yes
pasv_min_port=9010
pasv_max_port=9020
listen_port=21
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28869493/viewspace-1208375/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux vsftpdLinuxFTP
- [Linux] vsftpd配置LinuxFTP
- Linux中的vsftpdLinuxFTP
- linux vsftpd 服務配置LinuxFTP
- linux上安裝配置vsftpdLinuxFTP
- Linux伺服器---安裝vsftpdLinux伺服器FTP
- centos/linux下的安裝vsftpdCentOSLinuxFTP
- Linux vsftpd的簡單配置方法LinuxFTP
- 在Linux 上配置vsftpd-2.0.1LinuxFTP
- 【linux】Debian10.0配置vsftpdLinuxFTP
- vsftpdFTP
- Linux下FTP環境部署梳理(vsftpd和proftpd)LinuxFTP
- VSFTPD 引數知多少(linux FTP 引數)FTPLinux
- LINUX中運用VSFTPD的高手篇(轉)LinuxFTP
- vsftpd experimentFTP
- Linux中Vsftpd服務的部署及優化LinuxFTP優化
- linux VSFTPD 一步一步安裝LinuxFTP
- 【linux運維】Linux伺服器玩轉vsftpd安裝與配置Linux運維伺服器FTP
- Linux Linux服務端 rpm方式安裝(vsftpd)(FTP)軟體Linux服務端FTP
- 重啟vsftpdFTP
- vsftpd 小結FTP
- 設定vsftpdFTP
- Linux下vsftpd的配置檔案的引數詳解LinuxFTP
- Linux下vsftpd+mysql虛擬使用者作法(轉)LinuxFTPMySql
- linux之FTP服務vsftpd和pure-ftpd常用配置LinuxFTP
- vsftpd-1.1.3配製檔案vsftpd.conf(轉)FTP
- ubuntu下vsftpd配置UbuntuFTP
- Xmanager4遠端連線linux圖形介面(vsftpd配置)LinuxFTP
- Linux雲端計算-07_Linux檔案伺服器之vsftpd伺服器Linux伺服器FTP
- redhat vsftpd及vsftpd 500 OOPS: cannot change directory錯誤解決RedhatFTPOOP
- docker搭建vsftpd服務DockerFTP
- vsftpd的安全設定FTP
- 案例:vsftpd伺服器FTP伺服器
- FTP服務(vsftpd)配置FTP
- vsftpd 常見問題FTP
- vsftpd設定引數FTP
- VSFTPD的配置選項FTP
- VSFTPD的基本配置(轉)FTP