FTP服務器的搭建與安全配置

  FTP能夠說是Internet上使用很是普遍的一種通信協議了。它工做在OSI模型的第7層,是TCP/IP的一種具體應用。FTP採用基於TCP的可靠鏈接:監聽21端口來等待控制鏈接請求,當鏈接創建後,採用20號端口來創建數據傳輸通道。ubuntu

  FTP中使用的一些典型消息:vim

    125  數據鏈接打開,傳輸開始安全

    200  命令OK服務器

    331  用戶名OK,須要輸入密碼session

    425  不能打開數據鏈接app

    452  錯誤寫文件socket

    500  命令沒法識別async

 

  Vsftp是Linux系統下的一套開源FTP服務器軟件,具備結構簡單、性能優良的特色,是一款輕量型穩定安全的FTP。tcp

  1.安裝Vsftp。(測試環境:ContOS 6.5)工具

  查看本機有沒有vsftp安裝源:

~# rpm -qa | grep svftpd

   若是有,則會顯示vsftp的版本,這樣就能夠直接安裝:

~#  yum install vsftpd

  但個人上面貌似沒有,只能下載源碼編譯了。Vsftp官網主頁:http://vsftpd.beasts.org ,貌似進不去,網上找了下,能夠在這裏下載:站長之家 。版本是Vsftp v2.3.2 For Linux。解壓編譯:

~#  tar xvf vsftpd-2.3.2.tar.gz
~#   cd ./vsftpd-2.3.2

  在此說明一下vsftpd-2.3.2目錄下的builddefs.h文件,該文件主要用來設定FTP服務器的一些安全配置:CTP_Wrappers、PAM和SSL。能夠按須要選擇/取消。  

vim ./builddefs.h
#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H

#undef VSF_BUILD_TCPWRAPPERS    //對TCP包進行解析的工具,用於限制某種服務的訪問權限進而達到保護系統的目的。
#define VSF_BUILD_PAM           //一種高效便利的用戶級別的認證方式,用來增強服務器的安全性能。
#undef VSF_BUILD_SSL            //利用加密技術,保障在傳輸過程當中數據不會被竊聽。

#endif /* VSF_BUILDDEFS_H */

  2.配置vsftpd.conf文件

  vsftpd.conf文件是主配置文件,在/etc/vsftpd/目錄下.

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES  //設置是否容許匿名訪問
#
# Uncomment this to allow local users to log in.
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  //設置是否容許匿名上傳文件
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES  //設置是否容許匿名創建目錄
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES  //設置是否在改變目錄後發送消息
#
# The target log file can be vsftpd_log_file or xferlog_file.
# This depends on setting xferlog_std_format parameter
xferlog_enable=YES  //設置是否激活日誌功能
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES  //設置是否使用20端口傳輸數據(PORT模式)
#
# 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_username=whoever
#
# The name of log file when xferlog_enable=YES and xferlog_std_format=YES
# WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log
#xferlog_file=/var/log/xferlog  //設置日誌文件保存位置
#
# Switches between logging into vsftpd_log_file and xferlog_file files.
# NO writes to vsftpd_log_file, YES to xferlog_file
xferlog_std_format=YES  //設置是否使用標準文件日誌
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600  //設置會話的超時時間
#
# You may change the default value for timing out a data connection.
#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  //設置非特權用戶帳戶
#
# 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  //設置是否容許客戶端使用sync等命令
#
# 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形式傳輸文件
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES  
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.  //設置登陸後的歡迎信息
#
# 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  //加入用戶列表(前提是上面已經設置爲YES)
#
# 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_local_user=YES  //與下面配置有關
#chroot_list_enable=YES //設置是否容許本地用戶離開其主目錄
# (default follows)
#
//若是使用該項,則上面的chroot_local_user=YES需設置爲NO。指定不能離開主目錄的用戶,將用戶名一個一行寫入指定文件。
#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  //
#
# 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  //設置是否開啓IPV4監聽
#
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
# sockets, you must run two copies of vsftpd with two configuration files.
# Make sure, that one of the listen options is commented !!
#listen_ipv6=YES  //設置是否開啓IPV6監聽

pam_service_name=vsftpd  //設置訪問所使用的PAM模塊
userlist_enable=YES  //若是激活該選項,將禁止所指定文件中的用戶登陸
tcp_wrappers=YES  //設置是否使用TCP_Wrappers做爲主機訪問控制方式

  3.配置ftpusers文件

   ftpusers文件用於限定系統中那些用戶能/不能使用FTP服務。能夠根據實際狀況添加/刪除。

#User that are not allowed to login via ftp
root
...
...
...

 4.配置user_list文件

 user_list文件指定的用戶可否訪問FTP服務器取決於userlist_deny選項的設置。默認爲YES,即禁止user_list文件的用戶訪問FTP服務器,這與ftpusers文件類似。可是若是設置爲NO,則徹底相反,即只容許該文件列表裏的用戶訪問該FTP服務器。

# vsftpd userlist
# If userlist_deny=NO,only allow users in this file
# If userlist_deny=YES(default),never allow users in this file,and do not even prompt for a password.
# ...
# ...
root
...

若是要限制指定的本地用戶(即user_list文件的用戶)不能訪問FTP服務器,能夠相應地修改vsftpd.conf文件:

userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list

 一樣,若是要限制指定的本地用戶(即user_list文件的用戶)可以訪問FTP服務器,而其餘的本地用戶不能訪問,能夠相應地修改vsftpd.conf文件:

userlist_enable=YES
userlist_deny=NO 
userlist_file=/etc/vsftpd/user_list

5.配置容許匿名用戶使用FTP服務器

建立用戶ftp-anon和目錄/var/ftp-pub:

mkdir /var/ftp-pub
useradd -d /var/ftp-pub ftp-anon  //-d 指定用戶的主文件目錄,vsftpd默認登陸成功後的目錄是該用戶的home目錄。

做爲匿名訪問,/var/ftp-pub不該該屬於用戶ftp-anon,也不該該有寫權限,因此能夠用如下方法修改其權限:

~# chown root.root /var/ftp-pub
~# og-w -d /var/ftp-pub

 修改vsftpd.conf文件:

anonymous_enable=YES  //設置容許匿名訪問(默認開啓)
//設置容許匿名上傳和建立目錄(非必須,慎用!)
anon_upload_enable=YES
anon_mkdir_write_enable=YES

 6.虛擬用戶使用Vsftp服務器

上面的(包括通常的)ftp訪問都是經過創建系統賬號來訪問服務器的,這樣很不安全,若是權限配置錯誤將會使服務器受到威脅。可是,經過創建虛擬FTP帳戶(與系統賬號分離),就能夠大大加強系統的安全性。虛擬FTP帳戶只能用於文件傳輸,也叫guest用戶。它是把用戶名/密碼保存起來,再驗證的。因此Vsftp須要一個系統用戶的身份來讀取數據(用戶名/密碼)文件,即guest用戶,用以映射虛擬用戶。

具體配置以下:

(1)生成虛擬用戶口令庫文件。如下爲例:

~# vim login.txt   
zhangsan    //username1  
hehe        //passwd1
lisi        //username2
mimanicai   //passwd2
......

(2)配置生成Vsftp的認證文件

保存並退出,使用db_load命令生成口令庫文件:

~#  db_load -T -t hash -f login.txt /etc/vsftpd/vsftpd_login.db

修改口令庫文件的權限:

chmod 600 /etc/vsftpd/vsftpd_login.db

 編輯虛擬用戶所需的PAM配置文件

~# vim /etc/pam.d/vsftpd
//加入如下兩行:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login.db
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login.db

 (3)創建虛擬用戶訪問的目錄,並設置相應的訪問權限

~# useradd -d /home/ftp virtual
~# chmod 700 /home/ftp

 (4)創建配置文件

~# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
~# vim /etc/vsftpd/vsftpd.conf
//配置以下:
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
listen=YES
guest_enable=YES
guest_username=virtual

(5)重啓Vsftp服務器

~# service vsftpd restart

 至此,虛擬用戶使用Vsftp服務器配置將完成了。可使用login.txt裏的用戶賬號登陸FTP服務器了。

7.改變Vsftp的端口號

在vsftpd.conf文件里加入以下,並重啓vsftp。

~# listen_port=2121

 8.配置Vstfp服務器的chroot

chroot就是爲登陸用戶指定一個固定的目錄,這個目錄通常是用戶的主目錄,用戶被限制在該目錄下,相似與WEB服務器的虛擬目錄,從而保護了系統安全。

設置指定的用戶執行chroot:

chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

相關參考文章: http://wiki.ubuntu.org.cn/Vsftpd

相關文章
相關標籤/搜索