近来一直研究如何在linux下搭建ftp服务器,在搭建过程中走了很多弯路,一直迟迟不能搭建成功,终于通过网友提供的方法,搭建成功
现在讲搭建过程分享一下
第一步:首先判断是否已安装vsftpd, 执行命令:
rpm -qa | grep vsftpd
已安装返回vsftpd版本号,未安装没有提示。
第二步:安装vsftpd
命令:yum -y install vsftpd
第三步:安装vsftpd后,开始搭建vsftpd
1.首先创建ftp文件夹根目录,位置任意,我创建在/home/下创建ftproot文件夹。在ftproot文件夹下可以创建多个用户对应自己的根目录文件夹
mkdir -p /home/ftproot/ftptest
2.创建用户
创建用户时要并且指定其目录为用户目录中创建的 /home/ftproot/ftptest
useradd -d /home/ftproot/ftptest -g ftp -s /sbin/nologin ftptest
-g ftp 表示该用户属于ftp分组 (ftp分组是内置的,本来就存在,不需要自己创建)
-s /sbin/nologin 表示这个用户不能用来登录secureCRT这样的客户端,这种不能登陆的用户又叫做虚拟用户
3:设置目录权限
把目录/home/ftproot/ftptest的拥有者设置为ftptest,后期可以通过vsftpd.conf的配置文件直接对应到此文件夹下
chown -R ftptest /home/ftproot/ftptest
使ftptest用户拥有这个目录的读写权限
chmod -R 775 /home/ftproot/ftptest
4:设置密码
passwd ftptest
输入两次密码,密码设置成功
第四步:配置vsftpd.conf文件
vi /etc/vsftpd/vsftpd.conf
修改配置文件如下:
anonymous_enable=NO 禁止匿名用户登录
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里面指定的用户进行限制
这两个没啥用,直接用userlist 添加ftptest,用以上的
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=no
userlist_file=/etc/vsftpd/user_list
创建的ftptest用户所拥有的目录是 /home/ftproot/ftptest,如果不做限制,那么使用ftptest登陆之后可以切换到其他敏感目录去,比如切换到/usr目录去,这样就存在巨大的安全隐患。 为了规避这个隐患,需要限制ftptest用户只能通过ftp访问到 /home/ftproot/ftptest 目录以及子目录。
vsftpd.conf配置文件增加如下几行:
allow_writeable_chroot=YES 打开用户上传文件的的读写权限(必须)
以下三行新增配置,我本人测试后,不添加三行,也不影响用户文件的上传,,姑且保留,如有哪位网友知道原因,可以给我留言
pasv_enable=YES
pasv_min_port=3000
pasv_max_port=30010
这表示使用被动模式,用于传输数据的端口分配从30000-30010之间。
配置用户列表
在/etc/vsftpd/下新增文件chroot_list ,此文件和上面的路径对应
命令:vi /etc/vsftpd/chroot_list
插入用户:ftptest,如果有其他用户可以在此文件中添加,新添加的用户访问根目录同上面的第二步
保存文件退出。
五:用户鉴权
因为用户 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
这样允许不能登录系统的用户通过鉴权
六:重启服务器
到此vsftpd服务器搭建完成,可以通过上面创建的用户进行测试
总结:最好将selinux和防火墙都关闭,要不开发的开端口的还需要在防火墙上做规则,关闭后,就不需要做啥规则了。
关闭selinux方法,参考https://www.cnblogs.com/liuzgg/p/11656532.html
关闭防火墙方法:systemctl stop firewalld
在连接过程中,有时报530 login incorrect 错误,看看