1.FTP介绍
FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。
FTP的主要作用就是让用户连接一个远程计算机(这些计算机上运行着FTP服务器程序),并查看远程计算机中的文件,然后把文件从远程计算机复制到本地计算机,或把本地计算机的文件传送到远程计算机。
文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。
与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。
FTP服务一般运行在20和21两个端口。一次完整的 FTP 会话,包含有两个连接,一个称之为命令通道(控制连接,通过21端口),一个称之为数据通道(数据连接,通过20端口)。
其中数据连接有两种传输模式:
1.PORT 主动连接:
客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。
2.PASV 被动连接:
客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。
建立数据通道时,用 PORD 模式还是 PASV 模式,选择权在于 FTP 客户端。
---------------------
作者:白糕茶
来源:CSDN
原文:https://blog.csdn.net/qq_22550197/article/details/72872932
版权声明:本文为博主原创文章,转载请附上博文链接!
小公司用的多,大企业不用FTP,因为不安全; 大企业会使用Git来自动化批量发布更新上线
2-3.使用vsftpd搭建ftp服务
CentOS上默认的自带的ftp服务的软件包为vsftpd, yum install -y vsftpd
1)vsftpd可以使用系统级别的用户来登录,但是因为有密码所以并不安全,我们为ftp设置一个虚拟用户,然后把虚拟用户映射成系统中的一个或者多个用户普通用户
useradd -s /sbin/nologin virftp
这里virftp为虚拟用户来映射普通用户
登录的shell为-s /sbin/nologin, 也就是virftp这个用户不可以登录操作系统,指可以以virftp的身份来进行文件传输
2)vim /etc/vsftpd/vsftpd_login, 这个文件为虚拟用户的密码文件
奇数行为用户名,偶数行为密码,多个用户就写多行
chmod 600 /etc/vsftpd/vsftpd_login
3)把文本文件/etc/vsftpd/vsftpd_login转化为计算机识别的二进制文件
db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
4)创建虚拟用户的配置文件所在的目录
mkdir /etc/vsftpd/vsftpd_user_conf
5)创建用户的配置文件
-
cd /etc/vsftpd/vsftpd_user_conf
-
vim 用户的配置文件名
注意文件的名字需要和在/etc/vsftpd/vsftpd_login密码文件中的用户名保持一致
例如,cat /etc/vsftpd/vsftpd_login,可以看见我们创建了testuser1和testuser2
所以我们vim testuser1, 写入下面的内容
local_root=/home/virftp/testuser1 ,用来定义虚拟用户的家目录
anonymous_enable=NO ,是否允许匿名用户
write_enable=YES 是否允许可写
local_umask=022 和系统的umask用法一样
anon_upload_enable=NO 是否允许匿名用户可上传
anon_mkdir_write_enable=NO 是否允许匿名用户可创建目录
idle_session_timeout=600 连接超过多少秒之后自动断开, 然后需要重新登录
data_connection_timeout=120
max_clients=10
6)创建虚拟用户的家目录
mkdir /home/virftp/testuser1
touch /home/virftp/testuser1/emma.txt
7)修改属主和属组
chown -R virftp:virftp /home/virftp
8)编辑登录ftp认证文件,来定义密码文件
vim /etc/pam.d/vsftpd ,把下面内容在最前面加上
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
9)再来编辑fptd的主配置文件
vim /etc/vsftpd/vsftpd.conf
-
做下面的改动
将anonymous_enable=YES 改为 anonymous_enable=NO
将#anon_upload_enable=YES 改为 anon_upload_enable=NO
将#anon_mkdir_write_enable=YES 改为 anon_mkdir_write_enable=NO
-
再增加如下内容
chroot_local_user=YES
guest_enable=YES enable虚拟用户功能
guest_username=virftp 定义虚拟用户
virtual_use_local_privs=YES 为了告知服务,我们使用的虚拟用户
user_config_dir=/etc/vsftpd/vsftpd_user_conf 用来指定虚拟用户所在的配置文件的路径
allow_writeable_chroot=YES
10)启动服务vsftpd
systemctl start vsftpd
我们使用ps aux和netstat -nltp,可以看到服务开启并且21端口也在被监听了,服务开启成功
11)服务开启后,我们来做实验
现在Windows系统中安装ftp服务客户端软件 filezilla client, 也可以为了测试方便安装linux上的ftp客户端软件
yum install lftp
-
lftp testuser1@127.0.0.1
输入我们之前在/etc/vsfpd/vsfpd_login中给用户设置的密码
输入ls, 可以看到我们之前在虚拟用户usertest1的家目录/home/virftp/testuser1创建的testuser1
输入?,可以看见ftp服务的所有选项,常用的为get/put
get filename, 会把文件download到当前的目录下
注:如何使用Xshell来实现类似于ftp数据传输的功能
方案1
在Xshell中新建一个session,把协议改成SFTP
然后再到SSH选项下SFTP下来定义默认的文件保存路径,例如我们把保存路径设到了桌面上
连接这个新建的session,可以使用cd/ls命令,我们get test.com.log, 在到windows的桌面看,就可以看见test.com日志已经被下载好了
方案二
使用xftp,先用ctrl alt f 来下载xftp插件
4.xshell使用xftp传输文件
先用ctrl alt f 来下载xftp插件,点击下图,然后可以选择free version
下载完成后,还是要Ctrl alt f,出现下面的页面,想要window和Linux互传只要拖拽文件即可
5.使用pure-ftpd搭建ftp服务
pure-ftpd比vsftpd更加简单
• yum install -y pure-ftpd, 安装这个需要先安装epel-release
• vim /etc/pure-ftpd/pure-ftpd.conf//找到pureftpd.pdb这行,把行首的#删除,指定密码文件
• systemctl stop vsftpd
因为pure-ftpd服务也是监听的21端口,所以要把vsftpd服务stop掉
• systemctl start pure-ftpd
• mkdir /data/ftp
创建目录给pure-ftpd的用户来使用
• useradd -u 1010 pure-ftp
• chown -R pure-ftp:pure-ftp /data/ftp
• pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp ,来添加虚拟用户,这个和vsftpd服务类似,都需要用虚拟用户映射系统用户来做
useradd 指定新虚拟用户的名字
-u 指定虚拟用户映射的系统用户
-d 指定虚拟用户的家目录
pure-pw可以加useradd 、usermod 、userdel
• pure-pw mkdb
执行这一步才能登陆
• pure-pw list/userdel/usermod/passwd
我们来做实验
在/data/ftp下创建一个文件123.txt
然后lftp ftp_usera@127.0.0.1,再ls就可以看见创建的123.txt