前言
最近做项目需要传递文件到ftp上,但之前没有玩过ftp,怎么办?那我就发扬程序猿一根筋,九头牛都拉不回来的精神,搞搞它。
准备
笔者Linux环境为centos6.5,实现ftp的软件很多,比较有名的是vsftpd(非常安全的ftp服务)牛逼哄哄的。
安装
在centos中使用yum安装
切换到root用户
[root@spider140 vsftpd]# yum install vsftpd
配置
vsftpd 的配置文件放在/etc/vsftpd/目录下。
[root@spider140 vsftpd]# pwd
/etc/vsftpd
[root@spider140 vsftpd]# ll
总用量 20
-rw-------. 1 root root 125 7月 23 20:49 ftpusers
-rw-------. 1 root root 361 7月 23 20:49 user_list
-rw-------. 1 root root 4615 10月 20 05:27 vsftpd.conf
-rwxr--r--. 1 root root 338 7月 23 20:49 vsftpd_conf_migrate.sh
这里有四个文件 ,下面分别介绍:
ftpusers文件
记录不能通过ftp登录的用户名。
user_list文件
这里比较有意思,在配置文件中userlist_deny选项为NO,只允许本列表下的用户登录。默认是YES,也就是不允许以下用户登录,甚至不提示输入密码。
注意,vsftpd pam配置默认不允许ftpusers中的用户登录。
vsftpd.conf 主要配置文件,以下详解:
配置文件中大多数的属性都很容易明白怎么回事,所以这里仅介绍几个你可能会关注的配置。
启用上传
为了允许对文件系统修改,比如上传文件,WRITE_ENABLE选项必须为YES:
write_enable=YES
本地用户登录
允许在/etc/passwd中的用户登录,也就是普通用户。
local_enable=YES_
匿名登录
允许匿名登录
# 允许匿名登录
anonymous_enable=YES
# 匿名登录不需要密码
no_anon_password=YES
#匿名登录允许最大的传输率,单位字节每秒
anon_max_rate=30000
# 匿名登录所使用的目录
anon_root=/example/directory/
配置了根目录变更限制
避免用户离开自己的家目录
chroot_list_enable=YES
chroot_list_file=/etc/ vsftpd /vsftpd.chroot_list
vsftpd.chroot_list文件中包含了需要被限制的用户
当然也可以设置本地用户默认被限制。
chroot_local_user=YES
在这种情况下,vsftpd.chroot_list文夹中包含的用户就不会被限制更改目录。
限制用户登录
通过配置文件可以限制用户登录
userlist_enable=YES
userlist_file=/etc/vsftpd/vsftpd.user_list
vsftpd.user_list文件指明了哪些用户不能登录,这里参考之前user_list文件配置说明。
限制传输
local_max_rate=1000000 # 最大数据传输率,字节每秒
max_clients=50 # 最大客户端连接数
max_per_ip=2 # 每个ip最大连接数
监听端口设置
如果是私人的ftp服务器暴露在外网上,那最好选择一个非21的端口,为了安全。
listen_port=2211
也可以指定端口范围:
pasv_min_port=49152
pasv_max_port=65534
启动ftp服务
[root@spider140 vsftpd]# vsftpd
[root@spider140 vsftpd]# ps aux|grep vsftpd
root 1815 0.0 0.0 52548 804 ? Ss 04:38 0:00 vsftpd
root 1817 0.0 0.0 103252 840 pts/0 S+ 04:38 0:00 grep vsftpd
进程启动成功
[root@spider140 vsftpd]# netstat -tanp |grep vsftpd
tcp 0 0 0.0.0.0:2211
成功监听2211端口
后记
待探究的问题
使用xinetd
Xinetd提供了监控和控制网络连接的的能力,这对vsftpd并不是必须的,即使可以作为一个基本的工作vsftpd服务。