在centos7上搭建ftp服务

    技术2022-07-10  141

    一 安装

    首先检查是否已经安装ftp服务

    #rpm -qa|grep vsftpd

    如果没有就安装

    #yum install vsftpd

    设置开机自动启动

    #systemctl enable vsftpd.service

    查看是否已经开机启动

    #systemctl is-enabled vsftpd.service

    如果显示为enabled则表示已经设置为开机启动

    相关指令如下:

    systemctl start vsftpd.service systemctl stop vsftpd.service systemctl restart vsftpd.service systemctl status vsftpd.service

    查看21端口是否被防火墙禁用

    #firewall-cmd --list-port

    如果下面没有显示21,则需要把21端口添加到防火墙例外

    #firewall-cmd  --zone=public  --add-port=21/tcp  --permanent

    重启防火墙

    #systemctl reload firewalld

    然后重新执行list命令可以看到开放的端口

    二 配置

    配置文件默认在 /etc/vsftpd/vsftpd.conf 具体的配置项说明太多了,贴在最后,这里说一下在默认配置中需要修改的部分  

    1.配置用户的目录访问权限

    # 修改为NO,关闭匿名用户访问 anonymous_enable=NO # 将所有本地用户限制在自家目录中,NO则不限制。 chroot_local_user=YES # 是否启动限制用户的名单 chroot_list_enable=YES # 如果chroot_local_user指令是YES,则文件中的用户不会被限制在自家根目录中 # 如果chroot_local_user是NO的话,则文件中的这些用户会被限制在自家根目录中 # 下面这条是指定要限制的用户的,每行一条,具体是限制在自身目录下还是排除限制要看chroot_list_enable的值 chroot_list_file=/etc/vsftpd/chroot_list

    可以组合成四种情况:

    (1). chroot_local_user=YES      chroot_list_enable=YES       =====》所有用户都被限制在其根目录下,但chroot_list_file指定的用户例外,不受限制,相当于白名单模式

    (2). chroot_local_user=YES      chroot_list_enable=NO      ====》不使用chroot_list_file文件,所有用户都被限制在其根目录下,没有任何用户例外

    (3). chroot_local_user=NO      chroot_list_enable=YES      =====》所有用户都不被限制其根目录下,但chroot_list_file指定的用户例外,收到限制,相当于黑名单模式

    (4). chroot_local_user=NO      chroot_list_enable=NO       ======》不使用chroot_list_file文件,所有用户都不被限制 一般默认使用第一种就行了,如果需要按照自己的需求配置

    2. 配置那些用户能够访问ftp

    # 用户访问限制开关,默认为YES开启,开启之后,下面的两项配置才生效; userlist_enable=YES # 配置userlist_file文件中的用户是否能够访问ftp,此项配置默认的配置文件没有配置,如果需要可以手动添加 userlist_deny=YES # 如果为YES,那么userlist_file文件中的用户不能访问ftp,相当于黑名单模式 # 如果为NO,那么只允许userlist_file文件中的用户可访问ftp,相当于白名单 # 我测试了下,默认userlist_deny为YES,如果我们指定了userlist_file文件,那么文件中列出的用户将不能访问ftp # 下面这条配置指定userlist_file用户列表文件,默认没有配置,但是经我测试应该能自动读取配置文件同级目录下的user_list文件的 userlist_file=/etc/vsftpd/user_list # 我们可以修改该项配置为NO,并指定userlist_file文件 userlist_deny=NO userlist_file=/etc/vsftpd/user_list # 那么只有user_list文件中的用户能够访问ftp,这种白名单模式一般是用的比较多的;

    3. 开启根目录写权限

           从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误:

    响应: 220 (vsFTPd 3.0.2) 命令: USER ftpuser 响应: 331 Please specify the password. 命令: PASS ***** 响应: 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 错误: 严重错误: 无法连接到服务器

    在vsftpd的配置文件添加一行配置,开启根目录写权限能够解决该问题

    # 开启根目录写权限 allow_writeable_chroot=YES

    三  创建ftp用户

    一般出于安全考虑,ftp用户是不允许登陆系统的,且只能访问自己主目录下的文件

    # 先创建ftp根目录 mkdir -p /home/ftp # 添加用户并指定目录和用户组,设置为不可登陆系统 useradd -d /home/ftp/ftpuser -g ftp -s /sbin/nologin ftpuser # -d 命令是指定用户主目录 # -g 是指定用户分组 # -s /sbin/nologin 禁止用户登陆系统 # ftpuser 新建ftp用户的用户名。 # 为用户 ftpuser 设置密码,按提示操作输入两次密码: passwd ftpuser

    在目录下/etc/vsftpd下   找到文件  chroot_list(没有创建),添加用户root,表示root用户不被限制在根目录下

                                         找到文件 user_list(没有创建), 添加用户root和ftpuser,表示用户root和ftpuser可以进行ftp访问

    #重启ftp服务

    #systemctl restart vsftpd.service

    四 vsftpd.conf配置文件详解

    #----匿名用户设置---- anonymous_enable=NO #禁止匿名用户登录 #----本地用户设置---- local_enable=YES #允许本地用户登录ftp服务器 write_enable=YES #允许用户想服务器执行写入操作 local_umask=022 #设置服务器上本地用户创建文件的权限掩码 #----欢迎语设置---- dirmessage_enable=YES #启用目录提示消息 #----日志文件设置---- xferlog_enable=YES #启用日志文件功能,记录于/var/log/xferlog xferlog_std_format=YES #启用标准的日志格式 #----FTP工作方式与端口设置---- connect_from_port_20=YES #主动模式下,是否启用默认的20端口进行数据传输 #----与连接相关的设置---- listen=NO #vsftpd不是以独立的服务运行,要受到xinetd服务的管控,功能上会受到限制 listen_ipv6=YES #----控制用户是否允许切换到上级目录---- chroot_list_enable=YES #开启限制用户在主目录的功能 chroot_list_file=/etc/vsftpd/chroot_list #在chroot_list文件中加入你要限制的用户名,一行一个用户 #----虚拟用户设置---- pam_service_name=vsftpd #虚拟用户使用PAM认证方式 #----控制用户访问(通过vsftpd.user_list和ftpusers文件来实现)---- userlist_enable=YES #是否启用userlist_file文件 userlist_file=/etc/vsftpd/user_list #允许user_list文件中加入的用户访问ftp服务器 #----控制主机访问---- tcp_wrappers=YES #vsftpd服务器检查/etc/hosts.allow和/etc/hosts.deny中的设置,来决定请求连接的主机,是否允许访问该FTP服务器 #----其它设置---- allow_writeable_chroot=YES #开启用户主目录的写权限

    五  问题解决

    1. 如果出现如图所示错误

    解决办法:关闭selinux

    #vi  /etc/selinux/config

    设置SELINUX=disabled

    然后重启服务器

    2. 如果FileZilla等ftp工具连接出现读取目录列表失败,如下图

    请在站点管理里面改成主动连接模式,如下图

    字符集设置为:强制utf-8

     

    Processed: 0.010, SQL: 9