2012年3月14日星期三

快速安全搭建linux ftp server (vsftpd)

linux ftp server快速搭建

既然强调快速, 我们就马上开始
环境是centos5安装vsftpd, 别的linux系统可以参考下, 呵呵
# yum -y install vsftpd
没什么问题就直接安装好啦
编辑vsftpd的配置文件
# vi /etc/vsftpd/vsftpd.conf

清空, 添加如下内容:
listen=YES
background=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=NO
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to hao32 FTP servers
pam_service_name=vsftpd
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list

# touch /etc/vsftpd/vsftpd.chroot_list

# service vsftpd start
Starting vsftpd for vsftpd:                                [  OK  ]
一般启动正常

ftp用户我们来使用系统用户, 现在我们来添加用户hao32, 指向目录/home/hao32, 权限是nologin, 就是没给shell权限, 不影响ftp的
# useradd hao32 -d /home/hao32 -s /sbin/nologin
如果显示:
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
不用理会, 只是告诉你, 你指向的目录已经存在了, 这不影响
设置目录及其文件的属组, 你也可以使用别的分组方式
# chown -R hao32.hao32 /home/hao32
设置一下用户hao32的密码, 自定义啦
# passwd hao32
把用户hao32加到/etc/vsftpd/vsftpd.chroot_list里, 这样用户就可以正常登陆并且不能跳出自己的目录
# echo 'hao32' >> /etc/vsftpd/vsftpd.chroot_list
# service vsftpd restart

完毕! 测试登陆吧
ftp主机: 服务器IP地址
ftp用户: hao32
ftp密码: 你自己刚才设置的

转载自:http://www.hao32.com/webserver/87.html

备注: 2013/5/15 更新,添加 vsftp 的一些配置选项

配置VSFTP
a)使本地用户能登录FTP。按照上面的源码安装配置我们的FTP还不能让本地用户登
录,因为缺少一个认证PAM文件,在源码目录下有一个RedHat/vsftpd.pam认证文
件,把它复制到/etc/pam.d/ftp。
#cp RedHat/vsftpd.pam /etc/pam.d/ftp
测试一下,假设有一个本地用户test,登录FTP:
#ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 1.2.1)
Name (127.0.0.1:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
看来情况很好:)
b)配置匿名用户有浏览,读写,创建目录权限的FTP。这种配置的FTP是极度不安全
的FTP,但在某些FTP网站上可能希望能匿名用户能上传文件,因此有必要讲解一下:
编辑配置VSFTP的配置文件vsftpd.conf,在文件加入下面几行:
anon_world_readable_only=NO //关闭匿名用户只读权限,这个选项是控制匿名用
户只能下载具有可读权限的文件,绝不允许有其他权限,特别是写权限,因此要使
匿名用户有写权限,应该禁止它
anon_upload_enable=YES //匿名用户上传权限开放
anon_mkdir_write_enable=YES //匿名用户写和创建目录权限开放
write_enable=YES //这是VSFTP控制用户改变文件系统的权限的选项,若任何用户
要使用改变文件系统命令(如,读写,删除等等操作)都必须使它开放,默认值是NO
OK,保存后退出。
测试:
#ftp127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 1.2.1)
Name (127.0.0.1:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put mp3.txt
local: mp3.txt remote: mp3.txt
227 Entering Passive Mode (127,0,0,1,25,17)
150 Ok to send data.
226 File receive OK.
682 bytes sent in 0.00885 secs (75 Kbytes/sec)
测试成功,匿名用户已经有了上传的权限。
几点说明:
1, anon_other_write_enable选项可以使匿名用户删除文件目录,一般不开启。
2,匿名用户要拥有上传的权限除应该在上面VSFTP的配置文件里设置几项之外,还
应该使目录的其他组权限有写的权限。
c)其他的几种有用的配置选项。
1,开启ACSII上传下载传输模式
ascii_download_enable=YES //开启了下载时的ASCII模式数据传输
ascii_upload_enable=YES //开启了上传时的ASCII模式数据传输
因为二进制传输不用进行二进制和ASCII码之间的相互转化,因而速度较ASCII模式
快,VSFTP在默认情况下是不开启ASCII码传输模式的,上述两个语句使ASCII上传
下载传输模式分别开启。
2,更改FTP服务器默认监听端口
listen_port=2121 //改变默认的21端口号为2121
3,设置用户会话的空闲中断时间
idle_session_timeout=300 //连接服务器的用户在5分钟时间内没有任何动作将被
断开,默认为300
4,设置空闲的数据连接的中断时间
data_connection_timeout=300 //数据连接空闲5分钟将被断开,默认为300秒
5,设置客户端空闲时的自动中断和激活连接的时间
accept_timeout=60 //客户端建立PASV模式数据连接空闲1分钟自动中断,默认为60秒
connect_timeout=60 //客户端在中断1分钟后自动激活连接,默认为60秒
6,设置最大传输速率限制
local_max_rate=50000 //本地用户最大传输速率为50kbytes/s
anon_max_rate=30000 //匿名用户最大传输速率为30kbytes/s
若把上述的数值设为0则为不限速,这也是VSFTP的默认值。
7,设置最大客户端连接数
max_clients=30 //服务器最大连接数设为30,默认为0,即不加以限制,安全的
FTP应该加以限制
8,设置客户端连接时的端口范围
pasv_min_port=50000
pasv_max_port=60000
上述语句使客户端连接端口范围在50000至60000之间,这有利于提高服务器的安
全。默认两个值都是0,即不限制,使用任意端口。
9,把用户限制在家目录,即设置chroot()
chroot_local_user
chroot_list_enable
chroot_list_file
要设置chroot(),可以使用
chroot_local_user=YES
上述语句是使全部的本地用户都被限制在家目录,这无法只限制特定的用户,要限
制特定用户,使用下面的方法:
chroot_local_user=NO //关闭本地用户chroot()
chroot_list_enable=YES //开启要设置chroot()用户项
chroot_list_file=/etc/vsftpd.chroot_list //指定要设置chroot()的特定用户
文件,这个文件的格式应该每个用户名占用一行
11,开启进站或进入目录的欢迎或说明性文字
dirmessage_enable=YES //开启目录文字选项
message_file=.welcome //欢迎或说明性文字文件设为.welcome,在默认是.message
这样在目录下建立文件.welcome(默认是.message),在用户进入目录时可把该文件
的内容显示出来。
10,开启FTP服务器的日志功能
xferlog_enable=YES //启动日志记录功能,记录在xferlog_file指明的文件里
xferlog_file=/var/log/ftp.log //日志记录在文件/var/log/ftp.log里,默认值
为/var/log/xferlog
上面不是默认配置,默认配置是如下语句
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftpd.log //日志记录在/var/log/vsftpd.log里,
默认也是这个文件
默认配置xferlog_std_format语句没有启用。
d)配置基于用户的访问控制
有两种方法:
A)使用认证文件,前面我们让本地用户能够登录服务器的时候是使用源码树里的一
个样本pam文件(RedHat/vsftpd.pam),把它复制到/etc/pam.d/目录下并改名为ftp
就可使本地用户登录,改名为ftp的原因是VSFTP默认的pam认证文件名为ftp,但我
们可以使用下面的语句来改变
pam_service_name=vsftppam //这样设置后VSFTP使用/etc/pam.d/vsftppam文件来
认证用户
回来主题,应该如何使本地用户不能登录呢?回想到原来本地用户不能够登录是因
为没有ftp这个认证文件,那么我们把它删除就可以了。
B)使用VSFTP相关的几个语句
userlist_enable
userlist_deny
userlist_file
用这三个语句可以控制指定用户不能登录,方法如下:
userlist_enable=YES //用户清单功能开启
userlist_deny=YES //把用户清单设为拒绝用户清单
userlist_file=/etc/vsftpd.user_list //用户清单文件为
/etc/vsftpd.user_list,这个文件的格式也是一个用户名占用一行
因为第二个语句把文件/etc/vsftpd.user_list设为拒绝用户清单,那么,文件里
面的用户名都不能登录。
或是另外一种设置方法:
userlist_enable=YES //用户清单功能开启
userlist_deny=NO //把用户清单设为接受用户清单
userlist_file=/etc/vsftpd.user_list //用户清单文件为/etc/vsftpd.user_list
因为第二个语句把文件/etc/vsftpd.user_list设为接受用户清单,那么,文件里
面的用户名都能登录,不在文件里的用户不能登录。
从这里可以看出userlist_deny语句起了开关的作用,可把用户清单文件设为拒绝
或是接受,是不是很有趣?:)

e)配置安全的匿名FTP站点。要求匿名用户只有浏览和下载权限,没有其他的用户。
通过上面的学习,配置这种常见的匿名FTP站点很容易:
首先,把本地用户禁止登录,可以使用上面介绍的方法,这里不再复述。
然后,确定把下面的语句设为下面的样例:
anon_world_readable_only=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
write_enable=NO
这样做之后,就能有一个满足要求的FTP站点了,其实只要设
anon_world_readable_only=YES也可以做到上述效果的了。

f)上面讲述的启动服务器的方法是都是以独立(standalone)进程的方式启动的,还
有一种启动VSFTP的方法,就是使用超级服务器xinetd启动,这两种方法的区别
是,xinetd的启动使支持的并发进程比独立进程方式启动少,不适合访问人数多的
大站点,一般如果访问的流量少可以使用xinetd启动,如果是访问的流量多应该以
独立方式启动。好了,下面介绍以xinetd启动的方法:
编辑/etc/vsftpd.conf把原来加入的listen=YES这行删除,或前面加注释#
编辑/etc/xinetd.d/vsftpd(这个文件在源码安装时已经被复制存在了),确定这行
值为NO:
disable= NO
执行下面的命令重启xinetd服务器:
#service xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
#ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 1.2.1)
Name (127.0.0.1:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
成功通过xinetd启动VSFTP了。
可以通过xinetd的功能实现控制VSFTP,下面一一介绍:
1,配置基于主机的访问控制
配置基于主机的访问控制可以使用超级服务器xinetd的功能,由xinetd去控制特定
的IP可以访问FTP服务器,VSFTP只提供基于本地用户的访问控制,控制特定的访问
可使用下面的xinetd的语句:
only_from //允许访问IP
no_access //拒绝访问IP
per_source //每个IP的最大连接数
instances //并发最高连接数
access_time //访问时间
banner_fail //登录失败显示的内容文件
这里的具体使用属于xinetd的内容,可以参考相关内容,这里就不多说了.

没有评论:

发表评论