小白一枚,第一次安装vsftpd服务器,搞了一下午,各种纠结,各种报错,网上虽然一大堆教程,也都是各种安装方式都有,因此,特地写下博客记录下,以防止以后用到,希望能帮到有需要的朋友。
vsftpd 全称是:very secure FTP daemon 非常安全的ftp后台程序,及ftp 服务端!
一:安装vsftpd
查看是否已经安装vsftpd
如果没有,就安装:
执行完成后,就会看到Complete!表明安装成功了!
设置开机启动:
安装完成后,查看服务启动状态:
service vsftpd start 启动
service vsfptd status 状态
service vsftpd restart 重启
service vsftpd stop 停止
在这里大家注意点:在centos7之后,查看服务启动就改成了 :
systemctl stop vsftpd.service
systemctl start vsftpd.service
systemctl status vsftpd.service
本人调试的centos为6.5的版本,请大家自行查看服务器版本!
命令查看后,最后 Started vsftpd ftp daemon 已经启动成功了
检查端口:
ftp服务启动的是21端口,使用如下命令应该观察到21端口正在处于监听状态,这反应了ftp服务器启动成功了。
二:设置用户
要连接上 vsftpd 服务器需要为Linux创建专门的用户, 接下来创建这个用户:
1:用户目录
在Linux中,不同用户是有不同目录访问权限的,所以首先创建一个目录,作为这个ftp用户所拥有的目录。
2:创建用户
创建用户ftptest,并且指定其目录为用户目录中创建的/home/ftproot/ftptest
-g ftp 表示该用户属于ftp分组 (ftp分组是内置的,本来就存在,不需要自己创建)
-s /sbin/nologin 表示这个用户不能用来登录secureCRT这样的客户端,这种不能登陆的用户又叫做虚拟用户
创建过程给出的警告信息是正常的,不用理会
3:设置目录权限
把目录/home/ftproot/ftptest的拥有者设置为ftptest
使ftptest用户拥有这个目录的读写权限
对设置权限不懂的,请查看:Linux常用命令
4:设置密码
为ftptest用户设置密码:
密码修改成功后会如图所示出现成功提示。
三:配置用户
要在vsftpd服务器中配置该用户
1:去掉匿名登录
默认情况下vsftpd服务器是允许匿名登陆的,这样非常不安全,所以要把这个选项关闭掉。
首先通过vi命令打开ftp服务器配置文件:
然后把本来的
修改完成之后,保存退出。
对使用vi命令不熟悉的请看:Linux中Vi编辑器之简单常用命令
2:限制用户访问
创建的ftptest用户所拥有的目录是 /home/ftproot/ftptest,如果不做限制,那么使用ftptest登陆之后可以切换到其他敏感目录去,比如切换到/usr目录去,这样就存在巨大的安全隐患。 为了规避这个隐患,需要限制ftptest用户只能通过ftp访问到 /home/ftproot/ftptest 目录以及子目录。
配置办法:
首先通过vi命令打开ftp服务器配置文件:
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list 或 #chroot_list_file=/etc/chroot_list
并修改为:
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
注:
chroot_list_enable=YES: 表示对用户访问进行限制
chroot_list_file=/etc/vsftpd/chroot_list 表示对chroot_list里面指定的用户进行限制
修改完成之后,保存退出。
3:用户列表
在chroot_list中添加ftptest用户,首先通过vi命令打开chroot_list文件(此文件本来是空的):
vi /etc/vsftpd/chroot_list
然后增加一行:
ftptest
修改完成之后,保存退出。
4:允许写权限
vsftpd服务器,一旦某个用户被限制访问了,那么默认情况下,该用户的写权限也被剥夺了。 这就导致ftp客户端连接上服务器之后无法上传文件。这个时候,就需要打开此用户的写权限,请按照如下办法操作:
首先通过vi命令打开ftp服务器配置文件:
在最后面新加一行:allow_writeable_chroot=YES
修改完成之后,保存退出。
在这一块当时纠结很久,通过百度找到一篇讲解,不懂的朋友可以查看这篇博客,讲解的通俗易懂!
vsftpd 配置:chroot_local_user与chroot_list_enable详解
四:配置端口
vsftpd有两种端口:
一种是21端口,用来监听客户端连接请求的。 这个一般说来是固定的,就一直使用21端口。
一种是,一旦获取到请求之后,再专门用户服务端和客户端传输数据的端口。 (安装用的这种)
1:配置端口
打开配置文件:
在最后添加:
这表示使用被动模式,用于传输数据的端口分配从30000-30010之间。
在后续的Linux开放端口教程中也会做相应的配合工作。
五:用户鉴权
因为用户 ftptest 是 nologin的,所以存在鉴权的问题。 如果鉴权问题不解决,就是永不停息的 530错误。。。搞死宝宝了
解决办法有如下两种:
1:方式一: pam.d/vsftpd 文件
注释掉/etc/pam.d/vsftpd文件里这一行:#auth required pam_shells.so
这样不去鉴权,从而允许 ftptest 这种 nologin用户登录 ftp 服务器.
2:方式二:shells 文件
在/etc/shells文件里面增加一行:/sbin/nologin
这样允许不能登录系统的用户通过鉴权
六:重启服务器
但是centos7之后,改用的命令是如下方式:
最后执行查看状态,以查看重启成功了
bug解决方案:开启selinux权限
VSFTPD是一个FTP服务器程序,然后SELinux是CentOS的防火墙组件。由于 vsftpd 默认被 SELinux 拦截,所以会遇到的FTP以下的问题:
1.226 Transfer done (but failed to open directory).(传输完成,但是打开路径失败)
2.550 Failed to change directory(更改路径失败)
3.553 Could not create file.
4.或者干脆在发送了LIST命令以后,服务器没响应,超时断开。
遇到这样的问题,通常是vsftpd 没有足够的权限,很有可能是被SELinux阻止了。
查看命令:getsebool -a | grep ftp
getsebool -a | grep
ftpd
#以下是显示出来的权限,off是关闭权限,on是打开权限
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
其中,ftp_home_dir和allow_ftpd_full_access必须为on 才能使vsftpd 具有访问ftp根目录,以及文件传输等权限。
设置命令:setsebool -p xxxxxx on
setsebool -P allow_ftpd_full_access on
setsebool -P ftp_home_dir on