FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:“下载”(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件
FTP是两个服务器之间的事情,所以必须两台服务器都搭配的有ftp服务,这里以一个服务器为例,另外一台也与之相同操作。
首先下载安装两个包,一个是vsftpd服务,一个是ftp客户端,都安装开启了才可以进行ftp接下来的步骤
yum -y install vsftpd
yum -y install ftp
一般ftp默认是不使用root用户的,但是有些环境下需要使用root用户,如果需要使用root,请修改下两个文件把root给注释掉,不然会报错无法连接
修改ftpusers文件,注释掉root
vim /etc/vsftpd/ftpusers
#Users that are not allowed to login via ftp
#root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
修改user_list文件,注释掉root
vim /etc/vsftpd/user_list
#vsftpd userlist
#If userlist_deny=NO, only allow users in this file
#If userlist_deny=YES (default), never allow users in this file, and
#do not even prompt for a password.
#Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
#for users that are denied.
#root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
改完配置都要重启服务接着打开vsftp服务
chkconfig --level 35 vsftpd on # 打开服务
service vsftpd restart # 重启让改动生效
chkconfig --list vsftpd # 查看哪些打开
上面是CentOS 6的配置,CentOS 7与之不同,它还需要配置主文件然后再重启服务,通过cat /etc/centos-release 查看版本
下面的几个变量都是必需的,需要一一做正确改变,如果没有的需要自己收到添加,如use_localtime
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
use_localtime=YES
local_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES # 这个开启之后需要在/etc/vsftpd/下面创立一个文件:chroot_list,输入内容root,这样root就可以使用了
xferlog_enable=YES
local_umask=022
CentOS 7重启服务
systemctl restart vsftpd.service
OK,一切搭配完之后就可以进行测试了,ftp可以测试本身,也可以测试目标服务器
ftp_ip是服务器IP,ftp_user是账号推荐root,ftp_password是密码
ftp -inv ftp_ip
ftp>user ftp_user ftp_password
如果出现login successful!并且能进去该主机的文件夹里查看文件等,则证明ftp打通
下面是我写的一个简单测试ftp连通性的shell,可以参考下
ftpIp=$1
ftpUser=$2
ftpPasswd=$3
function ftpTest(){
ret=ftp -inv ${ftpIp} <<! user ${ftpUser} ${ftpPasswd} quit !
echo “===测试:$ret”
str1=echo ${ret}|grep "Login successful"
如果${str1}存在即证明登陆成功
if [[ ! ${str1} ]]; then
echo “ftp搭建成功”
fi
}
ftpTest
问题总结:
1、 如果出现无法连接,或者连接拒绝,root用户我们已经打开它,可以用root访问,所以剩下的一般都是防火墙的问题,可以关闭防火墙(service iptables stop,systemctl stop firewalld.service) 或者开放ftp的端口即可
2、 226 Transfer done (but failed to open directory)
原因一:无权限操作该目录,比如oracle用户去查看无权限的root用户文件夹
原因二:目录错误,比如该目录不存在
原因三:因为SELINUX开启限制,方法:更改/etc/selinux/config,设置SELINUX=disabled 并重启