vsftpd 是"very secure FTP daemon"的縮寫,安全性是它的一個最大的特色。vsftpd 是一個 UNIX 類操做系統上運行的服務器的名字,它能夠運行在諸如 Linux、BSD、Solaris、 HP-UNIX等系統上面,是一個徹底免費的、開發源代碼的ftp服務器軟件,支持不少其餘的 FTP 服務器所不支持的特徵。好比:很是高的安全性需求、帶寬限制、良好的可伸縮性、可建立虛擬用戶、支持IPv六、速率高等 linux
下面詳細講解svftpd服務的安裝 shell
環境:CentOS 6.3_64 操做系統
一.安裝:
1.安裝Vsftpd服務相關部件: 檢查是否已經安裝vsftpd 數據庫
rpm -qa|grep vsftpd安裝則卸載,本機已經安裝了,會出現以下內容:
vsftpd-2.2.2-11.el6.4.1.X86_64卸載:
rpm -e vsftpd-2.2.2-11.el6.4.1.X86_64 yum install vsftpd*2.確認安裝PAM服務相關部件:
yum install pam*3.安裝DB4部件包:
yum install db4*二.系統賬戶
useradd vsftpd -s /sbin/nologin默認的Vsftpd的服務宿主用戶是root,可是這不符合安全性的須要。這裏創建名字爲vsftpd的用戶,用他來做爲支持Vsftpd的服務宿主用戶。因爲該用戶僅用來支持Vsftpd服務用,所以沒有許可他登錄系統的必要,並設定他爲不能登錄系統的用戶。 2.創建Vsftpd虛擬宿主用戶:
useradd ftper -s /sbin/nologin本篇主要是介紹Vsftp的虛擬用戶,虛擬用戶並非系統用戶,也就是說這些FTP的用戶在系統中是不存在的。他們的整體權限實際上是集中寄託在一個在系統中的某一個用戶身上的,所謂Vsftpd的虛擬宿主用戶,就是這樣一個支持着全部虛擬用戶的宿主用戶。因爲他支撐了FTP的全部虛擬的用戶,那麼他自己的權限將會影響着這些虛擬的用戶,所以,處於安全性的考慮,該用戶也絕對沒有登錄系統的必要,這裏也設定他爲不能登錄系統的用戶三.調整Vsftpd的配置文件:
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.
#設定本地用戶能夠訪問。注意:主要是爲虛擬宿主用戶,若是該項目設定爲NO那麼全部虛擬用戶將沒法訪問。
local_enable=YES
#
# 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).
#設定端口20進行數據鏈接。
connect_from_port_20=YES
#
# 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.
#設定Vsftpd的服務日誌保存路徑。注意,該文件默認不存在。必需要手動touch出來,而且因爲這裏更改了Vsftpd的服務宿主用戶爲手動創建的Vsftpd。必須注意給與該用戶對日誌的寫入權限,不然服務將啓動失敗。
xferlog_file=/var/log/vsftpd.log
#
# 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.
#設定空閒鏈接超時時間,這裏使用默認。將具體數值留給每一個具體用戶具體指定,固然若是不指定的話,仍是使用這裏的默認值600,單位秒。
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#設定單次最大連續傳輸時間,這裏使用默認。將具體數值留給每一個具體用戶具體指定,固然若是不指定的話,仍是使用這裏的默認值120,單位秒。
#data_connection_timeout=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
#設定支撐Vsftpd服務的宿主用戶爲手動創建的Vsftpd用戶。注意,一旦作出更改宿主用戶後,必須注意一塊兒與該服務相關的讀寫文件的讀寫賦權問題。好比日誌文件就必須給與該用戶寫入權限等。
nopriv_user=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模式的上傳和下載功能。
ascii_upload_enable=YES
ascii_download_enable=YES
#
# You may fully customise the login banner string:
#設定Vsftpd的登錄標語。
ftpd_banner=This Vsftp server supports virtual users ^_^
#
# 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
#禁止用戶登出本身的FTP主目錄。
chroot_list_enable=NO
# (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
#禁止用戶登錄FTP後使用"ls -R"的命令。該命令會對服務器性能形成巨大開銷。若是該項被容許,那麼擋多用戶同時使用該命令時將會對該服務器形成威脅。
ls_recurse_enable=NO
# 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.
#設定該Vsftpd服務工做在StandAlone模式下。順便展開說明一下,所謂StandAlone模式就是該服務擁有本身的守護進程支持,在ps -A命令下咱們將可用看到vsftpd的守護進程名。
#若是不想工做在StandAlone模式下,則能夠選擇SuperDaemon模式,在該模式下 vsftpd將沒有本身的守護進程,而是由超級守護進程Xinetd全權代理,與此同時,Vsftp服務的許多功能將得不到實現。
listen=YES
#
# 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=YES
#設定PAM服務下Vsftpd的驗證配置文件名。所以,PAM驗證將參考/etc/pam.d/下的vsftpd文件配置
pam_service_name=vsftpd
#設定userlist_file中的用戶將不得使用FTP。
userlist_enable=YES
#設定支持TCP Wrappers。#KC: The following entries are added for supporting virtual ftp users
tcp_wrappers=YES
#默認Vsftpd.conf中不包含這些設定項目,須要本身手動添加配置。
#設定啓用虛擬用戶功能。
guest_enable=YES
#指定虛擬用戶的宿主用戶。
guest_username=ftper
#設定虛擬用戶的權限符合他們的宿主用戶。這個被指定的目錄裏,將存放每一個Vsftp虛擬用戶個性的配置文件,一個須要注意的地方就是這些配置文件名必須和虛擬用戶名相同。
virtual_use_local_privs=YES
#設定虛擬用戶我的Vsftp的配置文件存放路徑,這個被指定的目錄裏,將存放每一個Vsftp虛擬用戶個性的配置文件,一個須要注意的地方就是這些配置文件名必須和虛擬用戶名相同。
user_config_dir=/etc/vsftpd/vconf centos
注意上面畫紅線的地方! 安全
3.創建Vsftpd的日誌文件,並更該屬主爲Vsftpd的服務宿主用戶:touch /var/log/vsftpd.log chown vsftpd.vsftpd /var/log/vsftpd.log
4.創建虛擬用戶配置文件存放路徑: 服務器
mkdir /etc/vsftpd/vconf/三.製做虛擬用戶數據庫文件
touch /etc/vsftpd/virtusers創建了一個虛擬用戶名單文件,這個文件就是來記錄vsftpd虛擬用戶的用戶名和口令的數據文件,我這裏給它命名爲virt_ftp_user。爲了不文件的混亂,我把這個名單文件就放置在/etc/vsftpd/下。
vi /etc/vsftpd/ftp_user
----------------------------
designer
123456
ben
123456
----------------------------
編輯這個虛擬用戶名單文件,在其中加入用戶的用戶名和口令信息。格式很簡單:"一行用戶名,一行口令"。 session
db_load -T -t hash -f /etc/vsftpd/ftp_user /etc/vsftpd/ftp_user.db這個命令簡單說明一下
ll /etc/vsftpd/ftp_user.db須要特別注意的是,之後再要添加虛擬用戶的時候,只須要按照"一行用戶名,一行口令"的格式將新用戶名和口令添加進虛擬用戶名單文件。可是光這樣作還不夠,不會生效的哦!還要再執行一遍" db_load -T -t hash -f 虛擬用戶名單文件 虛擬用戶數據庫文件.db "的命令使其生效才能夠!
四.設定PAM驗證文件,並指定虛擬用戶數據庫文件進行讀取
1.察看原來的Vsftp的PAM驗證配置文件: 多線程
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.在編輯前作好備份: cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak 編輯Vsftpd的PAM驗證配置文件 併發
vi /etc/pam.d/vsftpd ---------------------------------------------------------------- #%PAM-1.0 auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/ftp_user.db account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/ftp_user.db
注意:畫紅線的地方有點系統是至關路徑,把前面的/lib/security去掉,只留:pam_userdb.so app
在原來的基礎上加上以上兩條,內容是對虛擬用戶的安全和賬戶權限進行驗證。 這裏的auth是指對用戶的用戶名口令進行驗證。 這裏的accout是指對用戶的賬戶有哪些權限哪些限制進行驗證。 其後的sufficient表示充分條件,也就是說,一旦在這裏經過了驗證,那麼也就不用通過下面剩下的驗證步驟了。相反,若是沒有經過的話,也不會被系統當即擋之門外,由於sufficient的失敗不決定整個驗證的失敗,意味着用戶還必須將經歷剩下來的驗證審覈。 再後面的/lib/security/pam_userdb.so表示該條審覈將調用pam_userdb.so這個庫函數進行。 最後的db=/etc/vsftpd/virtusers則指定了驗證庫函數將到這個指定的數據庫中調用數據進行驗證。 ---------------------------------------------------------------- 五.虛擬用戶的配置 1.創建測試用戶的FTP用戶目錄:
mkdir /home/ftper/designer/ /home/ftper/ben/(注意要創建在/home/${虛擬用戶}/下)
cp /etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/vconf/vconf.tmp4.定製虛擬用戶模版配置文件:
vi /etc/vsftpd/vconf/vconf.tmp 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=2048000 設定該用戶的最大傳輸速率,單位b/s。這裏將原vsftpd.conf配置文件通過簡化後保存做爲虛擬用戶配置文件的模版。這裏將並不須要指定太多的配置內容,主要的框架和限制交由 Vsftpd的主配置文件vsftpd.conf來定義,即虛擬用戶配置文件當中沒有提到的配置項目將參考主配置文件中的設定。而在這裏做爲虛擬用戶的配置文件模版只須要留一些和用戶流量控制,訪問方式控制的配置項目就能夠了。這裏的關鍵項是local_root這個配置,用來指定這個虛擬用戶的FTP主路徑。5.更改虛擬用戶的主目錄的屬主爲虛擬宿主用戶:
chown -R ftper.ftper /home/ftper/
6.檢查權限:
ll /opt/vsftp/total 24 drwxr-xr-x 2 ftper ftper 4096 Sep 16 05:14 designer drwxr-xr-x 2 ftper ftper 4096 Sep 16 05:00 ben 六.給測試用戶定製: 1.從虛擬用戶模版配置文件複製:
cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/ben
2.針對具體用戶進行定製:
vi /etc/vsftpd/vconf/ben --------------------------------- local_root=/home/ftper/ben 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=2048000#該值控制上傳每秒字節大小,大小直接影響到上傳速度七.啓動服務 service vsftpd start Starting vsftpd for vsftpd: [ OK ]
八.測試: 1.在虛擬用戶目錄中預先放入文件: touch /home/ftper/ben/ftp.test
2.從其餘機器做爲客戶端登錄FTP:
ftp ftp> open 192.168.1.108
Connected to 192.168.1.108. ...
3.測試列單操做 ftp> ls -rw-r--r-- 1 501 501 0 Sep 15 21:14 kc.test 226 Directory send OK.(目錄列單成功)
4.測試上傳操做: ftp> put (local-file) upfilt.test
(remote-file) upfilt.test local: upfilt.test remote: upfilt.test 227 Entering Passive Mode (192,168,1,108,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 "/home/ftper/ben/test" created (目錄創建成功)
6.測試下載操做: ftp> get ftp.test local: ftp.test remote: ftp.test 227 Entering Passive Mode (192,168,1,108,164,178) 150 Opening BINARY mode data connection for kc.test (0 bytes). 226 File send OK.(下載成功)
7.測試超時: ftp> dir 421 Timeout.(超時有效) ftp> user -------------------------------------------------------------------- 緣由:虛擬用戶再豐富,其實也是基於它們的宿主用戶ftper的,若是ftper這個虛擬用戶的宿主被限制住了,那麼虛擬用戶也將受到限制。 補充:
500 OOPS:錯誤
有多是你的vsftpd.con配置文件中有不能被實別的命令,還有一種多是命令的YES 或 NO 後面有空格。
我遇到的是命令後面有空格。由於我是用GEDIT來編輯的配置文件
550 權限錯誤,不能建立目錄和文件
附:
對於要想讓Root有權限登陸,直接編輯/etc/vsftpd/ftpusers 和/etc/vsftpd/user_list文件,將Root從裏面註釋掉便可,
而後重新啓動vsftpd便可
service vsftpd restart
設置開機自啓動:
開機默認VSFTPD服務自動啓動:
方法一: chkconfig --list|grep vsftpd ( 查看當前vsftpd是否開機自啓動) --vsftpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off chkconfig vsftpd on #執行ON設置 方法二: 修改 /etc/rc.local , 把行/usr/local/sbin/vsftpd & 插入文件中,以實現開機自動啓動。 方法三:修改/etc/rc.local,加入/etc/rc.d/init.d/vsftpd start
致使ftp配置失敗的常見的錯誤:
1.有的登陸不了的緣由多是linux開啓的防火牆,在防火牆裏設置開發21端口便可:
vi /etc/sysconfig/iptables
加入:
-A INPUT -m state --state ESTABLISHED RELATED -j ACCEPT -A INPUT -M state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
而後重啓ftp服務:
service vsftpd restart
2.ftp服務器鏈接失敗,錯誤提示:
500 OOPS: child died
解決辦法:查看ftp_home_dir或者ftpd_disable_trans是否有一個啓動,
[root@ben]# sestatus -b| grep ftp
allow_ftpd_anon_write off
注意:不一樣的系統ftp的解決方案不一樣,像個人centos6.3就沒有ftpd_disable_trans這項,只有ftp_home_dir
咱們把本機存在的二者的任意一個設置爲on便可:
setsebool -P ftpd_disable_trans on
或者:
setsebool -P ftp_home_dir on
前提是他們在剛纔查看的列表中存在!
而後重啓vsftpd服務便可:
service vsftpd restart