由于一些特殊使用场景,需要用到ftp服务。
直接看搭建过程。
linux上比较常用的ftp软件是vsftp。
一、安装
1、检测是否安装vsftpd
rpm -q vsftpd
如果安装会返回vsftpd-版本号信息
2、安装
yum install vsftpd
二、配置
虚拟用户的ftp服务,是指在vsftpd服务中使用虚拟用户名和密码。可以将ftp登录帐号和系统登录帐号分开,而且用户名和密码都不同。增强了ftp服务器的安全。我们配置这种虚拟用户的ftp。
2.1、创建帐号
1)创建用户名密码表
在vsftpd目录下创建,文件名自定义,文件中奇数行为帐号,偶数行为密码,均为明文。
2)转化为Berkeley DB个数数据
3)将db文件权限设置为600,防止数据外泄
[root@yys_centos /etc/vsftpd]# vi vaccount.list
yys
8888
td
6666
[root@yys_centos /etc/vsftpd]# db_load -T -t hash -f vaccount.list vaccount.db
[root@yys_centos /etc/vsftpd]# file vaccount.db #查看结果文件
vaccount.db: Berkeley DB (Hash, version 9, native byte-order)
[root@yys_centos /etc/vsftpd]# chmod 600 /etc/vsftpd/vaccount.db #设置为root权限
4)创建ftp根目录及虚拟用户映射的系统用户
将/home/ftpsite 设置为
[root@yys_centos]# useradd -d /home/ftpsite vsftpd_virtual
[root@yys_centos]# chmod 700 /home/ftpsite
5)建立支持虚拟用户的 PAM 认证文件
创建好虚拟用户的账号数据文件后,还需要对vsftpd服务的配置做相应的调整,以便识别并读取新的用户信息。在vsftpd服务器中,用户认证是通过PAM(Pluggable Authentication Module,可插拔认证模块)机制来实现的,该机制包含灵活的选择认证方式。Vsftpd服务默认的PAM认证文件位于/etc/pam.d/vsftpd,该文件适用于以Linux主机的系统用户账号进行认证。若要读取虚拟用户的账号数据文件,则需要创建新的PAM认证配置。
在/etc/pam.d下建立配置文件,文件名为:vsftpd.vu,内容如下:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vaccount #对应前面的db文件
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vaccount
2.2、添加用户支持
1)vsftp.conf文件添加虚拟多用户支持配置,
如下参数
local_enable=YES
write_enable=YES
anon_umask=022
guest_enable=YES
guset_username=vsftpd_virtual #上面指定映射文件
pam_service_name=vsftpd.vu
2)为多个虚拟用户建立独立的配置文件
为不同的虚拟用户账号设置不同的访问权限,可以通过为每个虚拟用户建立单独的配置文件来实现。为FTP用户启用独立配置文件,需要修改vsftpd.conf配置文件,天剑“user_config_dir”配置项。
user_config_dir=/etc/vsftpd_user_conf
建立虚拟用户配置文件
[root@yys_centos]# mkdir /etc/vsftpd/vsftpd_user_conf #新建用户配置文件
[root@yys_centos /etc/vsftpd/vsftpd_user_conf]# vi yys
local_root=/home/ftpsite/yys #先建立好此文件夹,用于用户yys上传下载的目录
anon_world_readable_only=NO #浏览/下载
anon_upload_enable=YES #上传
anon_mkdir_write_enable=YES #建立/删除目录
anon_other_write_enable=YES #改名/删除文件
[root@yys_centos /etc/vsftpd/vsftpd_user_conf]# vi td
local_root=/home/ftpsite/td #先建立好此文件夹,用于用户td上传下载的目录
anon_world_readable_only=NO #浏览/下载
anon_upload_enable=YES #上传
td用户没有建立和修改目录权限
三、测试
重新加载 vsftpd 配置:systemctl restart vsftpd
如果是linux下
使用 ftp IP 端口号
输入用户名密码登录成功
四、其他
1、可以设置vsftpd多个进程运行,并且每个进程使用不同端口
比如可以新建一个vsftpd.conf命名为vsftpd.conf.后缀,
重新设置新的监听端口。
然后启动进程:/usr/sbin/vsftpd /etc/vsftpd.conf.333,后面部分是你希望加载的conf的路径和文件名。
五、异常处理
1、使用用户登录成功后,put文件时,提示553:Could not create file.
我的本地原因是,虽然在vsftpd.conf中设置了写权限,但是指定的用户的可操作路径没有写权限。设置对应目录的权限即可。
chmod 777 指定目录 -R
2、ftp_put(): php_connect_nonb() failed: Operation now in progress (115)
当vsftpd使用了被动模式,指定的被动模式端口必须可以访问,如果访问端口不通会报上述错误。
3、vsftpd虚拟用户登录时 530 Login incorrect
这种错误原因非常多,我遇到的是,在配置过程中的第5步:建立支持虚拟用户的 PAM 认证文件,设置了/lib/security/pam_userdb.so。
首先要保证这个目录文件存在,其次,要看一下安装的vsftpd的位数,如果是64位需要使用/lib64/security/
4、被动模式的影响
被动模式设置,在ftp服务器的vsftpd.conf文件中设置,比如
pasv_enable=YES
pasv_max_port=端口号
pasv_min_port=端口号
被动模式需要发起方服务器允许开通指定的端口范围。如果发起方服务器不允许其他服务器访问端口,那么可以在发起服务器的程序中修改关闭支持被动模式,这样就用主动模式来工作。