配置ftp服务器

本文属转帖http://litvip.com/2011/03/01/187

本篇将配置使用本地用户(系统用户)登录的ftp服务器。
因为ftp传输数据默认也是不加密的,因此我们将在配置中开启ssl。

第一步,如果你没有安装vsftpd,请执行如下命令安装。
[root@test ~]# yum -y install vsftpd

第二步,开始配置。vsftpd的默认配置文件目录是/etc/vsftpd,在配置开始前,
我们先把原来的主配置文件/etc/vsftpd/vsftpd.conf先备份。
[root@test ~]# cd /etc/vsftpd/
[root@test vsftpd]# cp vsftpd.conf vsftpd.conf.orig

一个基本的配置文件,根据你自己的需要你可能要做修改,在这里默认注释的行我就不写了。
[root@test vsftpd]# vim vsftpd.conf
#禁止匿名用户anonymous登录
anonymous_enable=NO

#允许本地用户登录
local_enable=YES

#让登录的用户有写权限(上传,删除)
write_enable=YES

#默认umask
local_umask=022

#把传输记录的日志保存到/var/log/vsftpd.log
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=NO

#允许ASCII模式上传
ascii_upload_enable=YES
#允许ASCII模式下载
ascii_download_enable=YES

# 使用20号端口传输数据
connect_from_port_20=YES

#欢迎标语
ftpd_banner=Welcome to use my test ftp server.

#接下来的三条配置很重要
#chroot_local_user设置了YES,那么所有的用户默认将被chroot,也就用户目录被限制在了自己的home下,无法向上改变目录
#chroot_list_enable设置了YES,即让chroot用户列表有效。
#★超重要:如果chroot_local_user设置了YES,那么chroot_list_file设置的文件里,是不被chroot的用户(可以向上改变目录)
#★超重要:如果chroot_local_user设置了NO,那么chroot_list_file设置的文件里,是被chroot的用户(无法向上改变目录)
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

#以standalone模式在ipv4上运行
listen=YES

#PAM认证服务名,这里默认是vsftpd,在安装vsftpd的时候已经创建了这个pam文件,
#在/etc/pam.d/vsftpd,根据这个pam文件里的设置,/etc/vsftpd/ftpusers
#文件里的用户将禁止登录ftp服务器,比如root这样敏感的用户,所以你要禁止别的用户
#登录的时候,也可以把该用户追加到/etc/vsftpd/ftpusers里。
pam_service_name=vsftpd

#userlist_enable=YES,用户访问控制列表有效,文件是/etc/vsftpd/user_list
#userlist_deny=YES,/etc/vsftpd/user_list里的用户不能登录
#userlist_deny=NO,只有/etc/vsftpd/user_list用户才可以登录
#★重要:无论这里如何设置,只是进一步限制用户,只是在上面/etc/vsftpd/ftpusers
#的效果上叠加。比如/etc/vsftpd/ftpusers里有root用户,即便是你设置了
#userlist_deny=NO并且/etc/vsftpd/user_list有root,那root也是不能登录的!
userlist_enable=YES
userlist_deny=YES

#允许使用/etc/hosts.allow和/etc/hosts.deny文件来限制对ftp的访问控制
tcp_wrappers=YES

#关于PASV模式的配置
pasv_enable=YES
#PASV模式连接时的最小端口
pasv_min_port=60000
#PASV模式连接时的最大端口
pasv_max_port=60500

#接下来是关于ssl的配置
#让ssl有效
ssl_enable=YES
#服务器证明书
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
#不强制用户用ssl,也就是说不使用ssl连接也允许
#当然如果你要用户只能以ssl加密方式连接的话,那就改成YES
force_local_logins_ssl=NO
force_local_data_ssl=NO

第三步,制作vsftpd的服务器证明书。如果你没有安装openssl的话,需要先安装。
[root@test vsftpd]# cd /etc/pki/tls/certs/
[root@test 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
Generating a 1024 bit RSA private key
....++++++
...............++++++
writing new private key to '/tmp/openssl.RO3302'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:CN <-输入你的国家code
State or Province Name (full name) [Berkshire]:Shaanxi <-输入你的省名
Locality Name (eg, city) [Newbury]:Hanzhong <-输入你的城市名
Organization Name (eg, company) [My Company Ltd]:Litvip <-输入你的公司名
Organizational Unit Name (eg, section) []:Tech <-输入你部署
Common Name (eg, your name or your server's hostname) []: Litvip <-输入你的名字或者你服务器的hostname
Email Address []: admin@litvip.com <-输入你的email

第四步,启动vsftpd。
[root@test certs]# /etc/init.d/vsftpd start
Starting vsftpd for vsftpd: [ OK ]

测试我们的ftp服务器,我是用FileZilla测试的。在FileZilla的日志里出现了如下错误:
500 OOPS: could not open chroot() list file:/etc/vsftpd/chroot_list
为什么呢,因为我们开启了chroot_list_file=/etc/vsftpd/chroot_list,而默认安装vsftpd之后,
并未创建/etc/vsftpd/chroot_list,我们手动创建一下吧!然后重启一下vsftpd。
[root@test ~]# touch /etc/vsftpd/chroot_list
[root@test ~]# /etc/init.d/vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]

好了,接下来再连接试试,我这里就登录成功了。然后测试了使用ssl来连接ftp服务器,日志如下。
......
应答: AUTH SSL
应答: AUTH TLS
......
应答: 226 Directory send OK.
......

关于ftp客户端软件FileZilla的使用就不在这里说了,鼠标点点就会的。
如果你是专门的ftp站点,需要使用ssl,你最好向专门的ssl证书机构申请ssl证明书。

如果你的ftp服务器不能访问,考虑以下原因:
1.你的selinux是否没有关闭(暂时执行命令setenforce 0,再测试你的ftp)
2.你的防火墙是否允许了。
-A INPUT -s permit-ip -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
3.如果还有什么连接问题,请留言或者邮件联系我。
注意:我在逛csdn的时候,遇到好些人在修改设定文件vsftpd.conf时,在设置行前加了空格,
这是不允许的,启动的时候会报语法错误,而很多新手都没有看错误信息的习惯。

第五步,很多人也希望除了系统本身防火墙外还要用tcp_wrappers进一步加强ftp服务器的访问控制。
我们假设只允许127.0.0.1和192.168.0.0/24访问我们的vsftpd服务器。
[root@test ~]# echo "vsftpd:127.0.0.1" >> /etc/hosts.allow
[root@test ~]# echo "vsftpd:192.168.0." >> /etc/hosts.allow
[root@test ~]# echo "vsftpd:ALL" >> /etc/hosts.deny

第六步,很多人可能会发现上传文件后,时间可能与系统时间不一致,因为vsftpd默认使用的是GMT标准时间,
因此我们需要开启localtime来解决这个问题,在vsftpd.conf里追加一句(修改之后重启一下vsftpd):
use_localtime=YES
★重要:开启localtime需要用到/etc/localtime文件,但是我们上面的设置默认对用户都是chroot的,
因此用户无法访问/etc/localtime文件,怎么办呢,chroot后,对于用户来说他们的HOME目录就是根目录,
因此我们需要在用户的HOME下创建etc目录,再把/etc/localtime复制过去。
假设我们的用户是user,我们要做如下操作:
[root@test ~]# mkdir -p ~user/etc && cp /etc/localtime ~user/etc/

可是你又会发现,我们每次新加一个ftp用户,都要这样来一下,似乎很麻烦,所以我们需要在创建用户的时候就
自动创建~username/etc和复制/etc/localtime。
[root@test ~]# mkdir /etc/skel/etc
[root@test ~]# cp /etc/localtime /etc/skel/etc/
这样就可以了,新建用户时,系统会把/etc/skel的文件和内容复制到新用户的home下。

注:还有几个你可能需要的参数配置
#最大连接数
max_clients=100

#匿名用户最大速度(Byte/s)
anon_max_rate=20000

#本地用户最大速度(Byte/s)
local_max_rate=50000

#session的timeout时间(秒)
idle_session_timeout=600

#数据传输连接的timeout时间(秒)
data_connection_timeout=120

posted @ 2011-12-24 00:18  永哥  阅读(331)  评论(0)    收藏  举报