CentOS6.x基于vsftpd搭建FTP服务器


最近一边忙着FB的ftp,今天又忙着公司的CentOS的ftp,两边搭建,比较乱。vsftpd折腾了我将近一天,期间出了不少问题,一边google一边寻找安全性。

先建一个帐号专门用来ftp操作的一个宿主用户

useradd ftptest -s /sbin/nologin

我建立了一个ftptest用户,密码什么都没有设定,因为我只是在系统内部使用,也不能登录,为什么控制好权限,所以我们还是建立一个单独的用户是十分有必要的。

在centos中我们安装vsftpd,自然使用yum安装是十分不二的选择,没有必要去使用源码(除非你有特定)

yum install vsftpd pam* db4*-y

为啥要加上pam&db4呢,因为我们后续要创建虚拟用户使用,图个方便一起装了。

顺利的话不到2分钟就安装完毕了,来我们启动下vsftp服务试试看

service vsftpd start

OK,不错已经成功运行起来了,比如你的ip:192.168.1.108,ftp://192.168.1.108试试看能访问不,因为默认vsftpd是开启了匿名访问的,目录在/var/ftp中

好,这个不是我重点考虑的,下面我来说说vsftpd的配置文件了,进入vsftpd的安装目录

cd /etc/vsftpd/
#良好的习惯应该是在先配置前,先备份!!!
vi vsftpd.conf

我们来看下这个主配置文件

#允许匿名访问?YES/NO
anonymous_enable=NO
#启用本地用户登录 默认
local_enable=YES
#可写 默认
write_enable=YES
#上传后文件的权限掩码 默认
local_umask=022
#开启目录标语,默认
dirmessage_enable=YES
#开启日志,默认
xferlog_enable=YES
#设定连接端口20 不是ftp端口
connect_from_port_20=YES
#设定vsftpd的服务日志保存路径 将前面的#注释
xferlog_file=/var/log/xferlog
#生成的日志格式 默认
xferlog_std_format=YES
#会话超时,客户端连接到ftp但未操作
idle_session_timeout=600
#支持异步传输功能,默认是注释掉的,去掉注释
async_abor_enable=YES
#支持ASCII模式的下载功能,默认是注释掉的,去掉注释 
ascii_upload_enable=YES
#支持ASCII模式的上传功能,默认是注释掉的,去掉注释 
ascii_download_enable=YES
#禁止本地用户登出自己的FTP主目录 去掉注释,这个非常重要
chroot_list_enable=YES
#上个选项开启 这个文件才生效 不过不存在需要你手工创建
chroot_list_file=/etc/vsftpd/chroot_list
#监听IPV4
listen=YES
#ftp监听端口 默认21
listen_port=21
#设定pam服务下vsftpdd的验证配置文件名,不用改 
pam_service_name=vsftpd
#拒绝登录用户名单,不用改 
userlist_enable=YES
#限制主机对VSFTP服务器的访问,不用改(通过/etc/hosts.deny和/etc/hosts.allow这两个文件来配置) 
tcp_wrappers=YES

#在文件最后增加 主要就是配置虚拟主机用户了
guest_enable=YES
#这个帐号就是专门来管理ftp操作,控制好权限
guest_username=ftptest
virtual_use_local_privs=YES
#虚拟用户配置文件路径 需要自行创建
user_config_dir=/etc/vsftpd/vconf

如果您没有什么问题的话,将此(vsftpd.conf)配置文件放到你的服务器上也可以的,除了修改帐号和虚拟用户配置路径外。

由于我们配置了虚拟用户那么需要创建配置文件了

mkdir /etc/vsftpd/vconf
cd /etc/vsftpd/vconf
#创建虚拟用户登录文件
touch login.txt
#确保该文件不能非法获取,因为里面有包含明文密码
chmod 600 login.txt
vi login.txt

编辑这个文件就是第一行用户,第二行密码例如

zhangsan
987654
jxcent
123456

上面就是创建了两个用户,zhangsan(987654)和jxcent(123456),注意奇数行为用户,偶数行为密码。

保存好后我们生成一个pam使用的数据库,因为这个明文pam的什么东东是不能识别的,来我们使用这个命令生成用户数据库

cd /etc/vsftpd/vconf

db_load -T -t hash -f login.txt login.db

我们会看到在/etc/vsftpd/vconf文件下有这个login.db文件了。为了安全起见,也建议把这个login.db文件更改权限

chmod 600 login.db

然后要使得vsftpd能认识这个文件,我就要修改/etc/pam.d/vsftpd文件

echo "auth required pam_userdb.so db=/etc/vsftpd/vconf/login.txt" > /etc/pam.d/vsftpd

echo "account required pam_userdb.so db=/etc/vsftpd/vconf/login.txt" >> /etc/pam.d/vsftpd

好,做到这里我们就已经完成了60%了,我们再在/etc/vsftpd/vconf目录中新建一个和用户名一致的文件

#由于有两个用户我现在只拿jxcent做演示即可,其他多个用户多个配置文件
touch jxcent

vi jxcent

将下面这些复制到jxcent文件中,保存即可

#虚拟用户的个人目录路径,需要手工创建
local_root=/home/vftp/jxcent
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 
#本地用户的最大传输速度,单位是Byts/s,我设定的是10M
local_max_rate=1048576

注意上面需要你自己新建目录,/home/vftp/jxcent,的意思就是使用jxcent帐号登录的ftp默认就上传在/home/vftp/jxcent中,但是目前有一个问题就是他可以跳到其他目录,显然这些是我们不想看到的,即使没有权限,也不能给它乱跳目录,接下来就是配置chroot_list文件

vi /etc/vsftpd/chroot_list

在里面一行一个用户就可以了,然后保存

到这里基本上是已经配置好ftp了,来我们重启下ftp

service vsftpd restart

如果出现错误

500 OOPS: cannot change directory:/home/***”的话,是你的Selinux限制了ftp对home的访问,在centos6.x版本中原来的

#查看SELinux设置

getsebool -a|grep ftp

#你将看不到ftpd_disable_trans选项,因为在6.x版本之后采用allow_ftpd_full_access 了
#你需要执行这样一条命令

setsebool -P allow_ftpd_full_access 1
setsebool -P ftp_home_dir 1

好了,到这里你已经完成了vsftpd的相关虚拟用户配置且登录,上传下载了,一定要把控好目录权限问题,否则很容易出现某些安全问题。

PS:如果你开启了防火墙,使用vsftpd你会发现它波动的端口比较大,下面给出一个简单的解决方案,限制被动模式连接端口的方法,其优点是对连接速度没有影响,缺点是限制了客户端并发连接的数量。

好,在/etc/vsftpd/vsftpd.conf中添加

pasv_enable=YES
pasv_min_port=2222
pasv_max_port=2225

修改防火墙配置文件 /etc/sysconfig/iptables中开放这段端口

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 2222:2225 -j ACCEPT

 

如果你需要删除一个虚拟ftp用户,先在login.txt文件中删除用户对应的用户名和密码,然后删除login.db,重新运行

db_load -T -t hash -f login.txt login.db

如果只是要修改用户的密码,只需重新运行db_load就可以
如果要改变用户的其它配置,只需修改用户的配置文件

 


《“CentOS6.x基于vsftpd搭建FTP服务器”》 有 1 条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

评论审核已启用。您的评论可能需要一段时间后才能被显示。