Vsftpd搭建FTP
1.安装Vsftpd及必要软件
1.1.检查 yum 命令是否可用,检查是否已经安装Vsftpd
否则会安装不上vsftpd.
# rpm -qa yum
# rpm -qa|grep vsftpd
出现以上情况则 yum 命令已经安装,若没有安装自行百度安装。
1.2.安装 Vsftpd
# yum -y install vsftpd
以上图片表明已经安装过了,如果是第一次安装则如下图:
1.3.安装 libdb-utils
该工具用于生成虚拟用户认证文件。
# yum -y install libdb-utils #CentOS7是libdb-utils
# yum -y install db4 db4-utils #CentOS6是db4-utils
1.4.检查是否安装ftp命令
ftp命令对后面测试vsftpd连接,以及错误排查很重要
# ftp
以上并没有安装,如果要安装则输入
#yum –y install ftp
安装后,输入ftp 会进入ftp命令行
1.5.确认安装
安装结束后进入 /etc/vsftpd/ 目录,该目录下有四个文件。
/etc/vsftpd/vsftpd.conf 主配置文件
/etc/vsftpd/ftpusers 黑名单
/etc/vsftpd/vsftpd_conf_migrate.sh 迁移脚本
/etc/vsftpd/user_list 用户列表,与userlist_enbale和userlist_deny选项密切相关
2.创建宿主用户
所有虚拟用户都是映射宿主用户的目录权限,如果用内置用户将ftpuser中的注释掉即可。
# useradd -d /var/vsftp -s /sbin/nologin vsftp
# 在/var/vsftp 文件夹下创建 vsftp宿主用户
3.修改配置文件
目的是让所有用户都输入用户名与密码才可以登陆
# vi /etc/vsftpd/vsftpd.conf
#设置为NO,禁止匿名访问
anonymous_enable=NO
#设置为YES,启用本地系统用户,包括虚拟用户
local_enable=YES
#设置为YES,允许执行FTP命令,如果禁用,将不能进行上传、下载、删除、重命名等操作
write_enable=YES
#本地用户umask值与权限有关,000为最大权限,一般设置为022
local_umask=022
dirmessage_enable=YES
#设置为YES,启用日志
xferlog_enable=YES
xferlog_std_format=YES
#设置日志文件路径
xferlog_file=/etc/vsftpd/vsftpd_log
#关闭ftp-data端口,相当于不使用主动模式
connect_from_port_20=NO
#限制用户不能离开FTP主目录,启用并设置例外用户清单
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#使用ipv4或ipv6进行监听,二选一,不能同时启用
listen=YES
listen_ipv6=NO
#pam认证文件名称,位于/etc/pam.d/
pam_service_name=vsftpd
#启用全局用户例外清单
userlist_enable=YES
#启用tcp封装
tcp_wrappers=YES
#虚拟用户权限是否与本地用户相同。为NO时,将与匿名用户的权限相同,在每个虚拟用户配置文件里设置匿名用户的选项等于虚拟用户的权限
virtual_use_local_privs=NO
#启用guest后,所有非匿名用户将映射到guest_username进行访问,包括本地系统用户也不能使用,并且转换成一个虚拟用户,与其他虚拟用户的配置方法一样
guest_enable=YES
guest_username=vsftp
#虚拟用户配置文件目录
user_config_dir=/etc/vsftpd/user_conf
之后创建虚拟用户列表,奇数行为用户名,偶数行为密码
# vi /etc/vsftpd/user
XXX #用户名
XXXXXX #密码
4.虚拟用户相关配置
4.1.创建chroot_list文件
# touch /etc/vsftpd/chroot_list
4.2.创建虚拟用户认证文件
# db_load -T -t hash -f /etc/vsftpd/user /etc/vsftpd/user.db
# chmod 600 /etc/vsftpd/user.db
安装libdb-utils 的目的就是生成以上user.db,之后赋予600(仅root)修改权限
4.3.修改虚拟用户认证配置
注释掉其他本地用户认证的内容,因为启用了guest_enable后,本地用户将失效,所有非匿名用户变成虚拟用户
# cp /etc/pam.d/vsftpd{,.bak} #备份原文件
# vi /etc/pam.d/vsftpd #修改vsftpd用户文件
注释掉原来的文件,添加以下内容
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
4.3.创建虚拟用户配置文件
# mkdir /etc/vsftpd/user_conf/
# vi /etc/vsftpd/user_conf/XXX #文件名与对应FTP虚拟用户一致
#虚拟用户主目录,用户和组必须指定为宿主用户vsftp
local_root=/var/vsftp/hfm
#vsftpd主配置文件中已规定虚拟用户权限与匿名用户一致,因此以下针对匿名用户的权限配置即为虚拟用户的权限
anon_umask=077
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
之后,创建虚拟用户主目录并赋予权限.
在主目录下新建一个子目录,赋予700权限。所有上传、下载、删除、重命名等操作只能在子目录中进行
# mkdir -p /var/vsftp/hfm
# chown -R vsftp.vsftp /var/vsftp
# chmod -R 500 /var/vsftp
# chmod -R 700 /var/vsftp/hfm
5.启动登陆及排错
#service vsftpd start #启动
#service vsftpd restart #重启
#service vsftpd stop #停止
5.1.启动后浏览器登陆
发现,输入用户名与密码无用,使用ftp命令进行排错
#ftp ip地址
输入用户名与密码,查询错误为vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
百度后发现,升级vsftpd或者vsftpd-ext后,登录时可能会出现这样的错误:
500 OOPS: vsftpd: refusing to run with writable root inside chroot () |
---|
这是由于下面的更新造成的:
- Add stronger checks for the configuration error of running with a writeable root directory inside a chroot(). This may bite people who carelessly turned on chroot_local_user but such is life. |
---|
问题的是因为用户的根目录可写,并且使用了chroot限制,而这在最近的更新里是不被允许的。要修复这个错误,可以用命令
#chmod a-w /var/vsftp/XXX #去除用户根目录的写权限
或者你可以在vsftpd的配置文件中增加下列两项中的一项
对于标准的vsftpd build (vsftpd):
allow_writeable_chroot=YES
对于扩展的vsftpd build (vsftpd-ext):
Eallow_writable_chroot=YES
5.2.用RaiDrive挂载测试
输入ip、用户名、密码即可。挂载成功自动跳出目录。本地计算机目录可以看到相关目录。
传输文件测试,阿里云ECS云服务器(1Mbps带宽) 速度还不错2M/s。
6.其他
SELINUX与防火墙等按需配置
参考
centos解决yum命令不能使用问
vsftpd安装及虚拟用户配置
VSFTPD配置和错误
vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot 错误解决方法