Centos7安装搭建FTP服务器(vsftpd)

一、介绍
1、简介
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。
vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。
比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。
2、特点
①vsftpd 是以一般身份启动服务,所以对于 Linux 系统的使用权限较低,对于Linux 系统的危害就相对的减低了。此外, vsftpd 亦利用 chroot() 这个函式进行改换根目录的动作,使得系统工具不会被vsftpd 这支服务所误用;
②任何需要具有较高执行权限的 vsftpd 指令均以一支特殊的上层程序( parent process ) 所控制 ,该上层程序享有的较高执行权限功能已经被限制的相当的低,并以不影响Linux 本身的系统为准;
③所有来自 clients 端,想要使用这支上层程序所提供的较高执行权限之vsftpd 指令的需求,均被视为『不可信任的要求』来处理,必需要经过相当程度的身份确认后,方可利用该上层程序的功能。例如chown(), Login 的要求等等动作;
④此外,上面提到的上层程序中,依然使用 chroot() 的功能来限制使用者的执行权限。
二、安装部署
1、安装vsftpd

[root@sjts ~]# yum -y install vsftpd

2、修改配置文件

[root@sjts ~]# cd /etc/vsftpd
[root@sjts ~]# mv vsftpd.conf vsftpd.conf.bak
[root@sjts ~]# vim vsftpd.conf
#是否允许匿名,默认no
anonymous_enable=YES
#这个设定值必须要为YES 时,在/etc/passwd内的账号才能以实体用户的方式登入我们的vsftpd主机
local_enable=YES
#具有写权限
write_enable=YES
#本地用户创建文件或目录的掩码
local_umask=022
#当dirmessage_enable=YES时,可以设定这个项目来让vsftpd寻找该档案来显示讯息!您也可以设定其它档名!
dirmessage_enable=YES
#当设定为YES时,使用者上传与下载日志都会被纪录起来。记录日志与下一个xferlog_file设定选项有关
xferlog_enable=YES
xferlog_std_format=YES
#上传与下载日志存放路径
xferlog_file=/var/log/xferlog
#开启20端口 
connect_from_port_20=YES

listen=NO
listen_ipv6=YES
#这个是pam模块的名称,我们放置在/etc/pam.d/vsftpd
pam_service_name=vsftpd

userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
#当然我们都习惯支持TCP Wrappers的啦!
tcp_wrappers=YES

#通过搭配能实现以下几种效果: 
##①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。 
##②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。 
##③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。 
##④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

#FTP访问目录
local_root=/data1/ftp/
#不添加下面这个会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES
#启动被动式联机(passivemode)
pasv_enable=YES
###上面两个是与passive mode 使用的 port number 有关,如果您想要使用65400到65410 这 11 个 port 来进行被动式资料的连接,可以这样设定
pasv_min_port=65400
pasv_max_port=65410

3、添加防火墙开启相关端口

[root@sjts vsftpd]# systemctl stop firewalld
如果是正式环境,最好开启防火墙,添加相应端口
#添加主端口
[root@sjts vsftpd]# firewall-cmd --permanent --zone=public --add-port=60021/tcp
success
#添加被动端口
[root@sjts vsftpd]# firewall-cmd --permanent --zone=public --add-port=65400-65410/tcp
success
[root@sjts vsftpd]# firewall-cmd --reload

4、创建FTP用户

[root@sjts vsftpd]# useradd -d /data/ftp/ -s /sbin/nologin ftpuser
[root@sjts vsftpd]# passwd ftpuser

5、查看FTP用户是否设置不能通过SSH登录,只能使用FTP

[root@sjts vsftpd]# vim /etc/passwd
找到创建的用户把/bin/bash修改为/sbin/nologin

6、设置用户访问权限:

[root@sjts vsftpd]# chown -R ftpuser /data/ftp

7、设置vsftpd服务开机启动

[root@sjts ~]# systemctl enable vsftpd.service

8、启动暂停查看服务状态命令

[root@sjts ~]# systemctl start vsftpd.service 
[root@sjts ~]# systemctl status vsftpd.service

9、安装ftp客户端验证能否连接

(base) [root@sjts vsftpd]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> lcd
Local directory now /etc/vsftpd
ftp> put ftpusers
local: ftpusers remote: ftpusers
227 Entering Passive Mode (127,0,0,1,255,129).
150 Ok to send data.
226 Transfer complete.
125 bytes sent in 1.1e-05 secs (11363.64 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (127,0,0,1,255,128).
150 Here comes the directory listing.
-rw-r--r--    1 1001     1001          125 Aug 24 14:20 ftpusers
226 Directory send OK.

三、常见问题
1、问题1


这种情况是说明配置文件里面设置的chroot_list_file=/etc/vsftpd/chroot_list没找到这个文件
直接去/etc/vsftpd目录cp一个user_list或者把配置文件里面改名就行
2、问题2


这种情况是selinux没有关闭,关闭selinux即可

[root@localhost ~]# vim /etc/selinux/config
SELINUX=disabled

3、问题3


530 Login incorrect.
Login failed.
解决方法:cat /etc/passwd,查看你登陆的账户主目录和登陆shell对应的是什么,我的是/sbin/nologin
查看cat /etc/shells是否有你用户的主目录和登陆shell,没有进行添加,保存,退出。

发表评论

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