文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件、上传文件、下载、删除文件。FTP服务器端可以同时提供给多人共享使用。
FTP服务是Client/Server(简称C/S)模式,基于FTP协议实现FTP文件对外共享及传输的软件称之为FTP服务器源端,客户端程序基于FTP协议,则称之为FTP客户端,FTP客户端可以向FTP服务器上传、下载文件。
FTP Server
作用:提供文件共享服务,实现上传下载
端口:
21号,建立tcp连接 默认端口
20号:传输数据
软件包: vsftpd
FTP端口:控制端口:21/tcp
配置文件: /etc/vsftpd/vsftpd.conf
客户端开启一个端口N(>1023)向服务端的21端口,建立连接,并且开启一个N+1端口,告诉服务端,监听的为N+1端口,服务端接到请求之后,用20端口连接到客户端的N+1端口,进行传输
21端口建立连接 20端口传输数据
客户端同时开启两个端口(1024,1025),一个端口(1024)跟服务端的21端口建立连接,并请求服务端再开启个端口,服务端接到请求之后,随机会开启一个端口(1027)并告诉客户端我开启的是1027端口,客户端用另一个端口(1025)与服务端(1027)端口进行连接,传输数据。在安全方面ftp被动模式连接更加的安全。
非常安全的FTP服务进程(Very Secure FTP daemon,Vsftpd),Vsftpd在Unix/Linux发行版中最主流的FTP服务器程序,优点小巧轻快,安全易用、稳定高效、满足企业跨部门、多用户的使用(1000用户)等。
[root@ftp-server ~]# yum install -y vsftpd
[root@ftp-server ~]# systemctl start vsftpd
[root@ftp-server ~]# systemctl enable vsftpd
#FTP默认共享目录:/var/ftp
[root@localhost ~]# mkdir /var/ftp/upload #创建自己的共享目录
[root@ftp-server ~]# touch /var/ftp/upload/test.txt #创建文件到共享目录
[root@ftp-server ~]# cd /var/ftp/
[root@ftp-server ftp]# ls
pub upload
[root@ftp-server ftp]# chown ftp.ftp * -R #修改根目录的属主与属组
[root@ftp-server ftp]# ll
total 0
drwxr-xr-x. 2 ftp ftp 22 Aug 3 03:15 pub
drwxr-xr-x. 2 ftp ftp 22 Aug 27 03:15 upload
重点:改变根目录的属主,如果不改变的话,只能访问,其他权限不能生效。因为我们是以ftp用户的身份访问的,而默认的属主属组是root。
注意:
- 修改完配置之后需要重启完服务才能生效 - 还需要从新从客户端登陆,否则修改后的配置看不到效果。
[root@ftp-server ~]# vi /etc/vsftpd/vsftpd.conf ----找到29行将下面的注释取消
30 anon_umask=022 #添加匿名用户上传下载目录权限掩码
34 anon_other_write_enable=YES
[root@ftp-server ~]# systemctl restart vsftpd
关闭防火墙和selinux
[root@client ~]# yum -y install lftp #安装客户端
get命令(下载,首先要开启下载功能)
[root@client ~]# lftp 192.168.246.160
lftp 192.168.246.160:~> ls
drwxr-xr-x 2 0 0 6 Oct 30 2018 pub
drwxr-xr-x 2 14 50 6 Oct 30 2018 upload
lftp 192.168.246.160:/> cd upload/
lftp 192.168.246.160:/upload> ls
-rw-r--r-- 1 14 50 0 Aug 02 19:14 test.txt
lftp 192.168.246.160:/upload> get test.txt #下载
lftp 192.168.246.160:/upload> exit
[root@client ~]# ls #会下载到当前目录
anaconda-ks.cfg test.txt[root@client ~]# lftp 192.168.246.160
lftp 192.168.246.160:/upload> mkdir dir #也可以创建目录
mkdir ok, `dir' createdput命令(上传命令,上传之前请在服务端进行配置,将上传功能打开)
[root@client ~]# touch a.txt #创建测试文件
[root@client ~]# mkdir /test/ #创建测试目录
[root@client ~]# touch /test/b.txt #在测试目录下面创建测试文件
[root@client ~]# lftp 192.168.246.160
lftp 192.168.246.160:~> cd upload/
lftp 192.168.246.160:/upload> put /root/a.txt #上传文件
lftp 192.168.246.160:/upload> ls
-rw------- 1 14 50 0 Nov 16 12:14 a.txt
drwx------ 2 14 50 6 Aug 02 19:17 dir
lftp 192.168.246.160:/upload> mirror -R /root/test/ #上传目录以及目录中的子文件
Total: 1 directory, 1 file, 0 symlinks
New: 1 file, 0 symlinks
lftp 192.168.246.160:/upload> ls
drwx------ 2 14 50 23 Nov 16 12:18 test
-rw------- 1 14 50 0 Nov 16 12:14 upload.txtlftp 192.168.246.160:/upload> mirror test/ #下载目录
Total: 1 directory, 1 file, 0 symlinks
New: 1 file, 0 symlinks
lftp 192.168.246.160:/upload> exit
[root@cllient ~]# ls
anaconda-ks.cfg a.txt test
[root@client ~]# cd test/
[root@client test]# ls
b.txt
创建 zhangsan、lisi 密码都设置为 “123456”
[root@ftp-server ~]# useradd zhangsan [root@ftp-server ~]# useradd lisi [root@ftp-server ~]# echo '123456' | passwd --stdin zhangsan #设置密码 Changing password for user zhangsan. passwd: all authentication tokens updated successfully. [root@ftp-server ~]# echo '123456' | passwd --stdin lisi Changing password for user lisi. passwd: all authentication tokens updated successfully.
配置本地用户ftp配置文件
[root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf ---添加注释并修改 anonymous_enable=NO #将允许匿名登录关闭 #anon_umask=022 #匿名用户所上传文件的权限掩码 #anon_upload_enable=YES #允许匿名用户上传文件 #anon_mkdir_write_enable=YES #允许匿名用户创建目录 #anon_other_write_enable=YES #是否允许匿名用户有其他写入权(改名,删除,覆盖) 103 chroot_list_enable=YES #启用限制登陆用户在主目录里面 104 # (default follows) 105 chroot_list_file=/etc/vsftpd/chroot_list #限制登陆的用户在这个文件列表中,一行一个用户 106 allow_writeable_chroot=YES #允许限制的用户对目录有写权限 新添加 local_root=/home/zhangsan # 设置本地用户的FTP根目录,一般为用户的家目录 local_max_rate=0 # 限制最大传输速率(字节/秒)0为无限制
重启vsftpd
[root@ftp-server ~]# vim /etc/vsftpd/chroot_list zhangsan [root@ftp-server ~]# systemctl restart vsftpd
[root@ftp-client ~]# lftp 192.168.153.137 -u zhangsan
Password:
lftp [email protected]:~> ls
lftp [email protected]:~> mkdir aaa
mkdir ok, `aaa' created
lftp [email protected]:~> ls
drwxr-xr-x 2 1000 1000 6 Aug 02 20:55 aaa
lftp [email protected]:~> put /root/test.txt
lftp [email protected]:~> ls
drwxr-xr-x 2 1000 1000 6 Aug 02 20:55 aaa
-rw-r--r-- 1 1000 1000 0 Aug 02 20:59 test.txt服务器端查看
[root@ftp-server ~]# cd /home/zhangsan/
[root@ftp-server zhangsan]# ls
aaa test.txt
[root@ftp-server zhangsan]# ll
total 0
drwxr-xr-x. 2 zhangsan zhangsan 6 Aug 3 04:55 aaa
-rw-r--r--. 1 zhangsan zhangsan 0 Aug 3 04:59 test.txt
lftp操作:
get 下载单个文件
mget 下载多个文件
mirror 下载目录put 上传单个文件
mput 上传多个文件
mirror -R 上传目录mkdir 创建目录
rm -rf 删除文件或者目录