Linux利用FTP服务传输文件

时间:2024-10-13 21:35:15

目录

一、FTP协议

协议简介

文件传输过程

二、Linux系统配置FTP协议实现文件传输

实例1:匿名用户

实例2:本地用户访问

扩充修改配置:


一、FTP协议

协议简介

与大多数 Internet服务一样,FTP也是一个c/s架构。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。

文件传输过程

FTP服务器默认使用TCP协议的20、21端口与客户端进行通信

  • 20端口用于建立数据连接,并传输文件数据。

  • 21端口用于建立控制连接,并传输FTP控制命令。

FTP文件传输的两种模式

主动模式

  • 客户端先与服务器建立TCP连接

  • 客户端先向服务器发送FTP控制指令

  • 服务器主动从20号端口发送数据给客户端

img编辑

被动模式

  • 客户端先与服务器建立TCP连接

  • 客户端先向服务器发送FTP控制指令

  • 服务器先等客户端开放一个端口连接,再通过端口将数据传输给客户端

img编辑

二、Linux系统配置FTP协议实现文件传输

实例1:匿名用户

1.首先安装在Linux系统中安装ftp软件,找到配置文件并备份。

  1. /安装vsftpd
  2. [root@localhost ~]#yum install -y vsftpd
  3. //备份配置文件
  4. [root@localhost ~]#cd /etc/vsftpd
  5. [root@localhost vsftpd]#ls
  6. ftpusers user_list vsftpd_conf_migrate.sh
  7. [root@localhost vsftpd]#cp

2.修改配置文件使匿名用户访问ftp服务(最大权限)。

关键修改字段解读

anonymous_enable=YES 开启匿名用户访问(默认已开启)
write_enable=YES 开放服务器的写权限(若要上传,必须开启,默认已开启)
anon_umansk=022 设置匿名用户所上传数据的权限掩码(反掩码)
anon_upload_enable=YES 允许匿名用户上传文件(默认已注释,需取消注释)
anon_mkdir_write_enable=YES 允许匿名用户创建(上传)目录(默认已注释,需取消注释)
anon_other_write_enable=YES 允许删除、重命名、覆盖等操作(需添加)
  1. //修改配置文件,这里标注了行号,只展示关键配置的字段
  2. [root@localhost vsftpd]#vim /etc/vsftpd/
  3. 12 anonymous_enable=YES   -- 开启匿名用户访问(默认已开启)
  4. 13 #
  5. 14 # Uncomment this to allow local users to log in.
  6. 15 # When SELinux is enforcing check for SE bool ftp_home_dir
  7. 16 local_enable=YES
  8. 17 #
  9. 18 # Uncomment this to enable any form of FTP write command.
  10. 19 write_enable=YES     --开放服务器的写权限(若要上传,必须开启,默认已开启)
  11. 20 #
  12. 21 # Default umask for local users is 077. You may wish to change this to 022,
  13. 22 # if your users expect that (022 is used by most other ftpd's)
  14. 23 local_umask=022
  15. 24 anon_umask=022       --设置匿名用户所上传数据的权限掩码(反掩码)
  16. 25 #
  17. 26 # Uncomment this to allow the anonymous FTP user to upload files. This only
  18. 27 # has an effect if the above global write enable is activated. Also, you wil   l
  19. 28 # obviously need to create a directory writable by the FTP user.
  20. 29 # When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_f   tpd_full_access
  21. 30 anon_upload_enable=YES     --允许匿名用户上传文件(默认已注释,需取消注释)
  22. 31 #
  23. 32 # Uncomment this if you want the anonymous FTP user to be able to create
  24. 33 # new directories.
  25. 34 anon_mkdir_write_enable=YES   --允许匿名用户创建(上传)目录(默认已注释,需取消注释)
  26. 35 anon_other_write_enable=YES   --允许删除、重命名、覆盖等操作(需添加)

3.赋予匿名用户目录最高权限,关闭防火墙和selinux,开启服务并检验。

匿名用户访问ftp服务器的默认目录为/var/ftp,此目录下自带一个pub目录可以放用于传输的文件(也可以自行创建),需要赋予权限才能实现文件的传输。

  1. [root@localhost vsftpd]#cd /var/ftp/
  2. [root@localhost ftp]#ls
  3. pub
  4. [root@localhost ftp]#chmod 777 pub
  5. [root@localhost ftp]#systemctl stop firewalld
  6. [root@localhost ftp]#setenforce 0
  7. [root@localhost ftp]#systemctl start vsftpd
  8. [root@localhost ftp]#ss -nltp |grep ftp
  9. LISTEN     0     32       [::]:21                   [::]:*                   users:(("vsftpd",pid=59399,fd=4))

4.在ftp服务器和windows客户端测试目录下新建文件用于测试。

linux系统ftp服务端:切换到pub目录,新建ftptest文件

[root@localhost ~]#cd /var/ftp/pub/ 
[root@localhost pub]#touch ftptest

windows客户端:在桌面新建Test文件夹,创建hello文件

img编辑

5.使用windows客户端测试访问上一个配置的FTP服务器,完成文件相互传输。

img编辑

输入get ftptest后,文件夹里获取到了服务端的ftptest

img编辑

输入put 后,服务端获取到了文件

img编辑

实例2:本地用户访问

设置本地用户验证访问ftp,并禁止切换到ftp以外的目录(客户端默认登录的根目录为本地用户的家目录)

1.安装等操作(与实例1相同)

2.修改配置文件

关键修改字段解读

local_enable=YES 启用本地用户(默认已开启)
anonymous_enable=NO 关闭匿名用户访问(需要修改)
write_enable=YES 开放服务器的写权限(若要上传,必须开启,默认已开启)
local_umask=077 可设置仅宿主用户(即访问ftp服务器的本地用户)拥有被上传的文件的权限(反掩码)(需要修改)
chroot_local_user=YES 将访问禁锢在用户的宿主目录中(保证安全性,禁止切换到其他目录,需要添加)
allow_writeable_chroot=YES 允许被限制的用户主目录具有写权限(需要添加)
  1. //修改配置文件,这里标注了行号,只展示关键配置的字段
  2. [root@localhost ~]#vim /etc/vsftpd/
  3. 12 anonymous_enable=NO     --关闭匿名用户访问
  4. 13 #
  5. 14 # Uncomment this to allow local users to log in.
  6. 15 # When SELinux is enforcing check for SE bool ftp_home_dir
  7. 16 local_enable=YES     --启用本地用户
  8. 17 #
  9. 18 # Uncomment this to enable any form of FTP write command.
  10. 19 write_enable=YES       --开放服务器的写权限(若要上传,必须开启,默认已开启)
  11. 20 chroot_local_user=YES       --将访问禁锢在用户的宿主目录中(保证安全性,禁止切换到其他目录,需要添加)
  12. 21 allow_writeable_chroot=YES   --允许被限制的用户主目录具有写权限(需要添加)
  13. 22 #
  14. 23 # Default umask for local users is 077. You may wish to change this to 022,
  15. 24 # if your users expect that (022 is used by most other ftpd's)
  16. 25 local_umask=077   --可设置仅宿主用户(即访问ftp服务器的本地用户)拥有被上传的文件的权限(反掩码)(需要修改)

3.重启服务使修改过的配置生效,关闭防火墙和selinux(实例1中已关闭)

[root@localhost ~]#systemctl restart vsftpd

4.新建本地用户zhangsan,并在其家目录创建文件,用于测试客户端通过本地用户访问

  1. [root@localhost ~]#useradd zhangsan
  2. [root@localhost ~]#passwd zhangsan
  3. 更改用户 zhangsan 的密码 。
  4. 新的 密码:
  5. 重新输入新的 密码:
  6. passwd:所有的身份验证令牌已经成功更新。
  7. [root@localhost ~]#cd /home/zhangsan
  8. [root@localhost zhangsan]#touch localtest
  9. [root@localhost zhangsan]#ls
  10. localtest

客户端本地用户访问,实现传输文件

img编辑

输入get localtest后,文件夹里获取到了zhangsan家目录的localtest文件

img编辑

输入put 后,服务端zhangsan家目录获取到了文件

img编辑

扩充修改配置:

修改匿名用户、本地用户登录的默认根目录 anon_root=/var/.../... anon_root 针对匿名用户 local_root=/var/.../... local_root 针对系统用户

使用user_list 用户列表文件限制ftp访问的用户 vim /etc/vsftpd/user_list 添加用户名(如zhangsan)

userlist_enable=YES 设置黑名单,不允许user_list用户列表文件中的用户访问 userlist_deny=NO 设置白名单,仅允许user_list用户列表文件中的用户访问

(默认为YES,为黑名单,禁用)