vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
流程概要
- 关闭防火墙及selinux
- 安装vsftpd
- 创建vsftpd的映射账户
- 创建虚拟用户目录及配置文件
- 创建数据库认证文件
- 修改pam认证
- 修改vsftpd配置文件
1.关闭防火墙及selinux
1.1关闭系统防火墙
# 停止防火墙 systemctl stop firewalld.service # 关闭防火墙 systemctl disable firewalld.service
1.2关闭selinux
查询是否开启了selinux
sestatus
显示enabled就说明SELinux是开着的,我们需要关掉。
临时关闭
setenforce 0
永久关闭
vi /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled
修改后保存退出,然后重启Linux系统,重启命令:reboot或init 0
2.安装vsftpd
2.1检查ftp
此命令检查是否安装过vsftpd
rpm -qa |grep vsftpd
如果有安装过其他ftp,怕影响的可以执行下面
rpm -qa |grep ftp
查询到后执行下方命令卸载
yum remove vsftpd -y
vsftpd是查询到ftp的比喻,如果是其他ftp请修改成其他ftp的包名。
2.2安装vsftpd
yum install vsftpd -y
3.创建映射账户
useradd vsftpd -d /vsftpd -s /bin/false
/bin/false禁止此账户登录系统
4.创建虚拟用户及配置文件
4.1创建虚拟用户
vi /etc/vsftpd/vftpusers
创建一个虚拟用户配置文件,文件名为vftpusers,里面填虚拟用户的用户名及密码,奇数行为用户名,偶数行为密码,例如:
admin admin
创建了一个用户名和密码都为admin的用户,本文将以虚拟用户admin举例
4.2创建虚拟用户目录
mkdir -p /vsftpd/admin
admin可替换为创建虚拟用户文件vftpusers时填写的用户名
有几个用户就创建几个,创建完成后执行下方命令将虚拟用户的目录所有者改为vsftpd这个账户
chown -R vsftpd:vsftpd /vsftpd
4.3创建虚拟用户配置文件
创建一个文件夹存放虚拟用户的配置文件
mkdir /etc/vsftpd/userconf
创建虚拟用户的配置文件
touch /etc/vsftpd/userconf/admin
编辑此配置文件
vi /etc/vsftpd/userconf/admin
添加如下代码,其中admin为4.2步骤中创建的文件夹
local_root=/vsftpd/admin write_enable=YES anon_umask=022 anon_world_readable_only=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
注意:不能有多余的空格
配置对应含义如下
# 设置登录后禁锢的目录 xxx可修改为/etc/vsftpd/vftpusers内设置的用户且创建了虚拟用户目录。 local_root=/vsftpd/xxx # 开放写权限 write_enable=YES # 掩码 anon_umask=022 # 开放下载权限 anon_world_readable_only=YES # 开放上传权限 anon_upload_enable=YES # 开放创建目录的权限 anon_mkdir_write_enable=YES # 开放删除和重命名的权限 anon_other_write_enable=YES
5.生成数据库认证文件
db_load -T -t hash -f /etc/vsftpd/vftpusers /etc/vsftpd/vftpusers.db chmod 600 /etc/vsftpd/vftpusers.db
6.pam认证
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak vi /etc/pam.d/vsftpd
注释里面所有的内容,在最后添加以下内容
auth required pam_userdb.so db=/etc/vsftpd/vftpusers account required pam_userdb.so db=/etc/vsftpd/vftpusers
7.修改vsftpd配置文件
vi /etc/vsftpd/vsftpd.conf
配置文件(可直接替换)
#是否允许匿名登录 anonymous_enable=NO #是否允许本地登录 local_enable=YES #是否允许任何更改文件系统的FTP命令 write_enable=YES #掩码 local_umask=022 #如果设置为YES,则允许匿名用户在特定条件下上载文件。 #anon_upload_enable=YES #如果设置为YES,则允许匿名用户在特定条件下创建新目录 #anon_mkdir_write_enable=YES #FTP服务器的用户首次进入新目录时可以显示消息 dirmessage_enable=YES #如果启用,将维护一个日志文件,详细说明上载和下载。 xferlog_enable=YES #这可以控制PORT样式数据连接是否在服务器计算机上使用端口20(ftp-data)。 connect_from_port_20=YES #如果启用,则所有匿名上载的文件的所有权都将更改为设置chown_username中指定的用户。 #chown_uploads=YES #这是获得匿名上传文件所有权的用户的名称。 #chown_username=whoever #编写wu-ftpd样式传输日志的文件的名称。 #xferlog_file=/var/log/xferlog #传输日志文件将以标准xferlog格式写入,如wu-ftpd所使用。 xferlog_std_format=YES #超时(以秒为单位),即远程客户端在FTP命令之间可能花费的最长时间。 #idle_session_timeout=600 #超时(以秒为单位),大致是我们允许数据传输停止而没有进度的最长时间。 #data_connection_timeout=120 #这是vsftpd在完全没有特权的情况下使用的用户名。 #nopriv_user=ftpsecure #启用后,将启用称为“异步ABOR”的特殊FTP命令。 #async_abor_enable=YES #启用后,上传时将遵循ASCII模式数据传输。 ascii_upload_enable=YES #启用后,下载时将遵循ASCII模式数据传输。 ascii_download_enable=YES #欢迎信息 #ftpd_banner=Welcome to blah FTP service. #如果激活,您可能会提供一个匿名密码电子邮件响应列表,导致登录被拒绝。 #deny_email_enable=YES #此选项是包含不允许的匿名电子邮件密码列表的文件的名称。 #banned_email_file=/etc/vsftpd/banned_emails #禁止用户访问除主目录以外的目录 chroot_local_user=YES #是否启用例外名单 #chroot_list_enable=YES #默认名单目录文件 #chroot_list_file=/etc/vsftpd/chroot_list #如果启用,vsftpd将以独立模式运行。 listen=YES #与listen参数一样,除了vsftpd将侦听IPv6套接字而不是IPv4套接字。此参数和listen参数是互斥的。 #listen_ipv6=YES #此字符串是vsftpd将使用的PAM服务的名称。 pam_service_name=vsftpd #如果启用,vsftpd将从userlist_file给出的文件名加载用户名列表。 userlist_enable=YES #如果启用,并且vsftpd是使用tcp_wrappers支持编译的,则传入连接将通过tcp_wrappers访问控制提供。 tcp_wrappers=YES #开启虚拟用户 guest_enable=YES #主虚拟用户名 guest_username=vsftpd #虚拟用户配置 user_config_dir=/etc/vsftpd/userconf allow_writeable_chroot=YES
修改内容(可自行根据内容修改)
# 修改 anonymous_enable=NO listen=YES # 取消注释 ascii_upload_enable=YES ascii_download_enable=YES chroot_local_user=YES # 注释 listen_ipv6=YES # 添加 guest_enable=YES guest_username=vsftpd user_config_dir=/etc/vsftpd/userconf allow_writeable_chroot=YES
8.常用vsftpd命令
# 开机自启动 systemctl enable vsftpd # 启动vsftpd systemctl start vsftpd # 重启vsftpd systemctl restart vsftpd # 停止vsftpd systemctl stop vsftpd # 关闭vsftpd systemctl disable vsftpd