ftp部署
一个小插曲,安装一个FTP服务,便于和远程服务器的文件沟通。后续我们会讲到如何使用Capistrano配合git完成服务器的代码部署以及发布流程。现在,代码先走FTP吧,挺稳。
FTP简介
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。
在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。
用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
FTP安装
首先检查一下你的远程服务器是否已经安装了FTP服务。
1 | #rpm -qa | grep vsftpd |
如果啥都没显示,恭喜你,没有安装ftp服务,你可以安心的进行下面的动作了。如果有vsftpd的版本,跳过这一步!
那我们首先安装vsftpd。
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。
运行下面的命令就可以完成vsftpd的安装
1 | #yum -y install vsftpd |
安装完成再次利用上面的rpm命令检查一下是否完成安装,如果完成安装,那就可以继续。
开启vsftpd服务
1 | #service vsftpd start |
在centos 中使用 systemctl start vsftpd
检查vsftpd服务
1 | #service vsftpd status |
注意,ftp服务使用的是21端口,有时候也使用20端口。我们之前设置的iptables防火墙服务阻止了这一端口,所以也要添加下面的代码到/etc/sysconfig/iptables里去。
1 | A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT |
重启防火墙服务
1 | #systemctl restart iptables.service |
好的,到这里,我们的默认ftp服务就已经开始运作啦,让我们来测试一下吧。
1 | #ftp localhost |
用户名称那一栏输入anonymous(匿名)
得到下面的信息就标识你的vsftp服务安装已完成。
在ftp>后面输入bye,先暂时和ftp告别,因为我们还有一些事没干呢。
配置vsftpd服务
打开vsftpd服务的配置文件
1 | #vim /etc/vsftpd/vsftpd.conf |
改变这几个属性的值,具体是啥意思呢,当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。为了以后好控制,我们先打开这几个配置。
保存退出,我们新建一个chroot_list文件
1 | #touch /etc/vsftpd/chroot_list |
重启vsftp服务
1 | #service vsftpd restart |
新增ftp用户
1 | #/usr/sbin/adduser -d /usr/www/ftptest -g ftp -s /sbin/nologin vftpuser |
新增用户vftpuser,用户的主目录是/usr/www/ftptest目录,用户组是ftp,不能登录的账户。
设置vftpuser密码
1 | #passwd vftpuser |
修改/usr/www/ftptest的目录权限
1 | #chmod 755 /usr/www/ftptest/ |
重启vsftp服务
1 | #/sbin/service vsftpd restart |
设置权限
查看SElinux策略内ftp相关权限
1 | #getsebool -a | grep ftp |
打开ftp权限
1 | #setsebool allow_ftpd_full_access 1 |
重启vsftp服务
1 | #/sbin/service vsftpd restart |
现在,可以在本机ftp远程服务器啦。
将vsftpd卸载(yum remove vsftpd)后,结果如下:
重新安装后又能使用vftpuser用户在电脑本地连接了。
问题1:SElinux未关闭导致无法访问,可以尝试将selinux策略先行关闭。
1 | #vim /etc/selinux/config |
将SELINUX一栏设置为disable即可
ftp使用
![](https://img2018.cnblogs.com/blog/1286512/201902/1286512-20190223221843372-806081602.png)
![](https://img2018.cnblogs.com/blog/1286512/201902/1286512-20190223221812711-240688008.png)
cmd连接ftp服务端的实例,ls,dir,put,get使用
Microsoft Windows [版本 10.0.17134.590](c) 2018 Microsoft Corporation。保留所有权利。C:\Users\89723>cd C:\ali\kong #切换目录到笔记本客户端的工作目录,随便创建的一个目录C:\ali\kong>ftp 192.168.132.5连接到 192.168.132.5。220 (vsFTPd 2.2.2)200 Always in UTF8 mode.用户(192.168.132.5:(none)): vftpuser331 Please specify the password.密码:230 Login successful.ftp> dir200 PORT command successful. Consider using PASV.150 Here comes the directory listing.-rw-r--r-- 1 0 0 4 Feb 23 15:05 mcw.txt226 Directory send OK.ftp: 收到 68 字节,用时 0.00秒 22.67千字节/秒。ftp> ls #ls显示服务器ftp的用户主目录内容200 PORT command successful. Consider using PASV.150 Here comes the directory listing.mcw.txt226 Directory send OK. 用户vftpuser,用户的主目录是/usr/www/ftptest目录
ftp: 收到 12 字节,用时 0.00秒 12000.00千字节/秒。 ftp> get mcw.txt bmcw.txt #get下载,bmcw.txt是新文件名,缺省为不改原文件名 200 PORT command successful. Consider using PASV. 150 Opening BINARY mode data connection for mcw.txt (4 bytes). 226 Transfer complete. ftp: 收到 4 字节,用时 0.00秒 4.00千字节/秒。
![](https://img2018.cnblogs.com/blog/1286512/201902/1286512-20190223233059735-2029519311.png)
ftp> put bxiaoma.txt xiaoma.txt #put将笔记本客户端文件上传到ftp服务端,xiaoma.txt为新文件名,缺省是不改文件名。
200 PORT command successful. Consider using PASV.150 Ok to send data.226 Transfer complete.ftp: 发送 10 字节,用时 0.00秒 10.00千字节/秒。
get,mget的使用
ftp> ls200 PORT command successful. Consider using PASV.150 Here comes the directory listing.1.txt2.txt3.txt4.txtmcw.txtxiaoma.txt226 Directory send OK.ftp: 收到 52 字节,用时 0.02秒 2.89千字节/秒。ftp> get 1.txt 2.txt #get 同时两个文件,只下载了第二个文件200 PORT command successful. Consider using PASV.150 Opening BINARY mode data connection for 1.txt (0 bytes).226 Transfer complete.ftp> mget 1.txt 3.txt 4.txt #mget三个文件,每个下载前都提示输入y,有交互。200 Switching to ASCII mode.mget 1.txt? y200 PORT command successful. Consider using PASV.150 Opening BINARY mode data connection for 1.txt (0 bytes).226 Transfer complete.mget 3.txt? y200 PORT command successful. Consider using PASV.150 Opening BINARY mode data connection for 3.txt (0 bytes).226 Transfer complete.mget 4.txt? y200 PORT command successful. Consider using PASV.150 Opening BINARY mode data connection for 4.txt (0 bytes).226 Transfer complete.
pwd,cd命令
ftp> pwd #显示所在的服务器端的目录257 "/usr/www/ftptest"ftp> cd mcw #切换目录250 Directory successfully changed.ftp> pwd257 "/usr/www/ftptest/mcw"ftp> cd /root/ #访问ftp服务端家目录以外的目录失败550 Failed to change directory.
rename,delete命令
ftp> lsmcw01.txt mcw02.txt ftp> rename mcw01.txt mcw_modify.txt 350 Ready for RNTO. 250 Rename successful. ftp> ls mcw02.txt mcw_modify.txt ftp> delete mcw02.txt 250 Delete operation successful. ftp> ls mcw_modify.txt
/etc/vsftpd/vsftpd.conf配置文件详解
安装后在etc目录会有vsftpd文件夹存在,需要配置vsftpd.conf配置文件 #进入vsftpd配置文件 vim /etc/vsftpd/vsftpd.conf # 禁止匿名用户anonymous登录 anonymous_enable=NO # 允许本地用户登录 local_enable=YES # 让登录的用户有写权限(上传,删除) write_enable=YES # 默认umask local_umask=022 # 把传输记录的日志保存到/var/log/vsftpd.log xferlog_enable=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=NO # 允许ASCII模式上传 ascii_upload_enable=YES # 允许ASCII模式下载 ascii_download_enable=YES # 使用20号端口传输数据 connect_from_port_20=YES # 欢迎标语 ftpd_banner=Welcome to use my test ftp server. # 接下来的三条配置很重要 # chroot_local_user设置了YES,那么所有的用户默认将被chroot, # 也就用户目录被限制在了自己的home下,无法向上改变目录。 # chroot_list_enable设置了YES,即让chroot用户列表有效。 # ★超重要:如果chroot_local_user设置了YES,那么chroot_list_file # 设置的文件里,是不被chroot的用户(可以向上改变目录) # ★超重要:如果chroot_local_user设置了NO,那么chroot_list_file # 设置的文件里,是被chroot的用户(无法向上改变目录) chroot_local_user=YES chroot_list_enable=YES # touch /etc/vsftpd/chroot_list 新建 chroot_list_file=/etc/vsftpd/chroot_list use_localtime=YES # 以standalone模式在ipv4上运行 listen=YES # PAM认证服务名,这里默认是vsftpd,在安装vsftpd的时候已经创建了这个pam文件, # 在/etc/pam.d/vsftpd,根据这个pam文件里的设置,/etc/vsftpd/ftpusers # 文件里的用户将禁止登录ftp服务器,比如root这样敏感的用户,所以你要禁止别的用户 # 登录的时候,也可以把该用户追加到/etc/vsftpd/ftpusers里。 pam_service_name=vsftpd
ftp浏览器访问,windows软件访问
将ftp根目录用rsync+inotify同步到开启auto的站点目录下。
(思考:是否可以Windows客户端连接到ftp服务器主目录,在将主目录实时同步到nginx开启auto的站点目录下,就可以有人直接下载文件了呢。可以用这种方法将我电脑上要共享的文件放到我的ecs上,给出别人一个链接去下载。)
ftp客户端在windows上的安装以及使用
1、在控制面板-程序-启用或关闭Windows功能-点击开启tftp客服端
2、访问ftp服务器默认的主目录/var/ftp/
在ftp服务端创建文件mcw02.txt,在Windows的ftp客户端会刷新出来
之前的主目录是ftp用户组里一个用户的家目录,而不是ftp服务器端默认的主目录
3、Windows客户端用户登陆
3.1在主目录中右击选择新建文件夹报错权限问题
3.2右击属性可看到如下信息
3.2右击让后选择登陆,输入用户密码
3.3进入ftp用户组对应的一个用户的家目录下。
3.4在ftp服务端创建一个文件mcw.txt,在Windows客户端可以刷新出来。在Windows客户端右击然后可以创建文件夹,在ftp服务的可以看到目录生成了。
3.5右击文件和文件夹,点击复制到笔记本另一个文件夹,可以成功下载ftp服务端文件到笔记本。
3.6复制电脑本地文件或文件夹,粘贴到Windows客户端的目录下,就能将它们传输到ftp服务器对应用户的家目录。
3.7访问目录下的文件,会以浏览器的方式打开。并且需要登陆。(访问失败,有时间再看这个问题,怎么解决)
4、下载Windows版的ftp客户端软件,连接ftp服务器
安装好软件进行连接ftp服务器
成功连接到远程ftp,并列出用户vftpuser的家目录文件。
双击文件就完成复制。
问题汇总
问题一:防火墙阻挡,425 Failed to establish connection.
ftp> dir200 PORT command successful. Consider using PASV.425 Failed to establish connection.
参考:
https://blog.csdn.net/qq_38526635/article/details/82147980
https://blog.csdn.net/renliang01/article/details/79327251