# vsftpd安装以及使用 ## ftp安装 ``` [root@ftp ~]# yum -y install vsftpd ``` ## 关闭防火墙以及selinux ``` [root@ftp ~]# sed -ri 's/(SELINUX=).*/\1disabled/g' /etc/selinux/config && setenforce 0 && systemctl disable --now firewalld ``` ## 配置 FTP 分为两类: - PORT FTP - PASV FTP PORT FTP是一般形式的FTP。这两种FTP在建立控制连接时操作是一样的,都是由客户端首先和FTP服务器的控制端口(默认值为21)建立控制链接,并通过 此链接进行传输操作指令。它们的区别在于使用数据传输端口(ftp- data)的方式。PORT FTP由FTP服务器指定数据传输所使用的端口,默认值为20。PASV FTP由FTP客户端决定数据传输的端口。 PASV FTP这种做法,主要是考虑到存在防火墙的环境下,由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口),决定两者之间的数 据传输端口更为方便一些。 > 配置讲解 - port_enable=YES|NO 如果你要在数据连接时取消PORT模式时,设此选项为NO。默认值为YES。 - connetc_from_port_20=YES|NO 控制以PORT模式进行数据传输时是否使用20端口(ftp-data)。YES使用,NO不使用。默认值为NO,但RHL自带的vsftpd.conf文件中此参数设为YES。 - ftp_data_port=port number 设定ftp数据传输端口(ftp-data)值。默认值为20。此参数用于PORT FTP模式。 - port_promiscuous=YES|NO 默认值为NO。为YES时,取消PORT安全检查。该检查确保外出的数据只能连接到客户端上。小心打开此选项。 - pasv_enable=YES|NO YES,允许数据传输时使用PASV模式。NO,不允许使用PASV模式。默认值为YES。 - pasv_min_port=port number | pasv_max_port=port number 设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意。默认值为0。把端口范围设在比较高的一段范围内,比如50000-60000,将有助于安全性的提高。 - pasv_promiscuous=YES|NO 此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中。默认值为NO。 - pasv_address= 此选项为一个数字IP地址,作为PASV命令的响应。默认值为none,即地址是从呼入的连接套接字(incoming connectd socket)中获取。 所以如果linux打开了防火场,必须开通对应的端口 例如: ``` -A INPUT -m state --state NEW -p tcp -m tcp --dport 30000:31000 --syn -j ACCEPT ``` > 具体配置文件,注意所有配置项后面不要有空格 ``` [root@ftp vconf]# cat /etc/vsftpd/vsftpd.conf #不允许匿名访问 anonymous_enable=NO #允许本地用户访问,注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问 local_enable=YES #是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许 write_enable=YES #掩码值 local_umask=022 #限制匿名用户上传以及写入 anon_upload_enable=NO anon_world_readable_only=NO anon_mkdir_write_enable=NO # 是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的) chroot_local_user=YES #限制chroot,设置为 NO 时,用户登录FTP服务器后具有访问自己目录以外的其他文件的权限, 设置为 YES 时 , 用户被锁定在自己的 home 目录中,vsftpd将在下面 chroot_list_file选项值的位置寻找 chroot_list文件,此文件需用户建立,再将需锁定在自己home目录的用户列入其中,每行一个用户 chroot_list_enable=YES # 此文件需自己建立 , 被列入此文件的用户 , 在登录后将不能切换到自己目录以外的其他目录 , 由 FTP 服务器自动地 chrooted 到用户自己的home目录下,使得 chroot_list文件中的用户不能随意转到其他用户的FTP home目录下,从而有利于FTP服务器的安全管理和隐私保护 chroot_list_file=/etc/vsftpd/chroot_list ascii_upload_enable=YES ##设定支持ASCII模式的上传和下载功能 ascii_download_enable=YES #PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证 pam_service_name=vsftpd #下面的配置在conf中手动添加,设定启用虚拟用户功能 guest_enable=YES # //指定虚拟用户的宿主用户 guest_username=vsftpd allow_writeable_chroot=YES #设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。 user_config_dir=/etc/vsftpd/vconf #当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。 virtual_use_local_privs=YES #是否激活目录欢迎信息功能 默认情况下,欢迎信息是通过该目录下的.message文件获得的 此文件保存自定义的欢迎信息,由用户自己建立 dirmessage_enable=YES #登陆提示信息 ftpd_banner=Welcom to FTP server #是否让系统自动维护上传和下载的日志文件 默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file选项对其进行设定 默认值为NO xferlog_enable=YES #是否以标准xferlog的格式书写传输日志文件 默认为/var/log/xferlog,也可以通过xferlog_file选项对其进行设定 默认值为NO xferlog_std_format=YES xferlog_file=/var/log/vsftpd.log dual_log_enable=YES vsftpd_log_file=/var/log/vsftpd.log #Make sure PORT transfer connections originate from port 20 (ftp-data). 是否设定FTP服务器将启用FTP数据端口的连接请求 ftp-data数据传输,21为连接控制端口 connect_from_port_20=NO #设定是否允许 改变 上传文件的属主 , 与chown_username=whoeve项配合使用 ,whoever:任何人 chown_uploads=NO #大多数 FTP 服务器都选择用 ASCII 方式传输数据 , 用 ASCII 方式上传和下载文件 ascii_upload_enable=YES ascii_download_enable=YES #另外,从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报错误。要修复这个错误可以在vsftpd的配置文件中增加下列项 allow_writeable_chroot=YES # 如果设置为 YES , 则 vsftpd 将以独立模式运行,由vsftpd自己监听和处理连接请求 listen=YES # 监听端口 listen_port=21 #不使用ipv6 listen_ipv6=NO #此选项默认值为NO ,此时ftpusers文件中的用户禁止登录FTP服务器;若此项设为YES,则 user_list文件中的用户允许登录 FTP服务器,而如果同时设置了 userlist_deny=YES ,则user_list文件中的用户将不允许登录FTP服务器,甚至连输入密码提示信息都没有,直接被FTP服务器拒绝 userlist_enable=YES #此项默认为YES,设置是否阻扯user_list文件中的用户登录FTP服务器 userlist_deny=YES #表明服务器使用 tcp_wrappers 作为主机访问控制方式,tcp_wrappers可以实现linux系统中网络服务的基于主机地址的访问控制,在/etc目录中的hosts.allow和hosts.deny两个文件用于设置tcp_wrappers的访问控制,前者设置允许访问记录,后者设置拒绝访问记录。例如想限制某些主机对FTP服务器192.168.57.2的匿名访问,编缉/etc/hosts.allow 文件,如在下面增加两行命令:vsftpd:192.168.57.1DENY 和vsftpd:192.168.57.9DENY 表明限制IP为192.168.57.1/192.168.57.9主机访问IP为192.168.116.90的FTP服务器,此时FTP服务器虽可以PING通,但无法连接 tcp_wrappers=YES #允许数据传输时使用PASV模式 pasv_enable=YES #PASV模式地址 pasv_address=192.168.116.90 # 关闭port模式 port_enable=NO pasv_min_port=65500 pasv_max_port=65535 #接收超时时间 accept_timeout=30 #连接超时时间 connect_timeout=2 #不查找dns服务器 reverse_lookup_enable=NO ``` > 后续操作 ``` #创建用户,新建系统用户vsftpd,用户目录为/home/wwwroot, 用户登录终端设为/bin/false(即使之不能登录系统) [root@ftp ~]# useradd vsftpd -d /home/wwwroot -s /bin/false #建立虚拟用户名单 [root@ftp ~]# touch /etc/vsftpd/virtusers #添加用户,第一行账号,第二行密码,注意:不能使用root做用户名,系统保留 [root@ftp ~]# cat /etc/vsftpd/virtusers xieys 111111 #生成虚拟用户数据文件 [root@ftp ~]# db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db -T允许应用程序能够将文本文件转译载入进数据库。 -t hash使用hash码加密 -f 指定包含用户名和密码文本文件。此文件格式要示:奇数行用户名、偶数行密码 #修改认证方式,修改/etc/pam.d/vsftpd配置文件,注意:如果系统为32位,lib64改为lib,否则配置不生效。 [root@ftp ~]# cat /etc/pam.d/vsftpd #%PAM-1.0 #session optional pam_keyinit.so force revoke #auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #auth required pam_shells.so #auth include password-auth #account include password-auth #session required pam_loginuid.so #session include password-auth auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers #建立虚拟用户个人Vsftp的配置文件,建立目录 [root@ftp ~]# mkdir /etc/vsftpd/vconf [root@ftp ~]# cd /etc/vsftpd/vconf #编辑虚拟用户配置文件,配置文件名必须为虚拟用户名 [root@ftp vconf]# cat xieys #设置用户目录 local_root=/home/wwwroot/xieys/ #设置上传文件的权限,掩码表示 anon_umask=022 #其他设置 write_enable=YES anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES [root@ftp vconf]# touch /var/log/vsftpd.log [root@ftp vconf]# chown vsftpd.vsftpd /var/log/vsftpd.log [root@ftp vconf]# mkdir /home/wwwroot/xieys [root@ftp vconf]# chown vsftpd.vsftpd /home/wwwroot/xieys [root@ftp vconf]# touch /etc/vsftpd/chroot_list [root@ftp vconf]# systemctl restart vsftpd ```