最近一边忙着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就可以
如果要改变用户的其它配置,只需修改用户的配置文件
1条评论