【Linux】基于FTP协议实现Linux与Windows文件传输


前言

基于FTP协议实现Linux与Winodows实现文件传输,是大学期间的一个小实验。在这里做个总结。

(一) Linux FTP网络环境搭建

实验环境:

  • Linux CentOS 7.9
  • Xshell 7
  • Win10

1.安装ftp包

通过yum安装vxftpd pacakge,并按照如下指令执行

yum -y install vsftpd

修改 vsftpd.conf,此前先备份 成 vsftpd.conf.bak,防止该配置文件改错导致无法运行。

[root@localhost ~] cd /etc/vsftpd/
[root@localhost vsftpd] ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
[root@localhost vsftpd] cp vsftpd.conf  vsftpd.conf.bak
[root@localhost vsftpd] ls
ftpusers  user_list  vsftpd.conf  vsftpd.conf.bak  vsftpd_conf_migrate.sh
[root@localhost vsftpd] vim vsftpd.conf
vsftpd.conf      vsftpd.conf.bak  

2. 置匿名用户访问的FTP服务(最大权限)

执行vim vsftpd.conf ,加上如下图红框所示的配置信息,允许开启匿名用户读写权限。
在这里插入图片描述

这里可以先退出vim的编辑模式,为了方便找到上述的红框配置信息在文件中的位置,执行下面的指令就可以看到这些文件所在的具体行数。

grep -n  --color=auto 'anon*' vsftpd.conf

在这里插入图片描述

然后vim vsftpd.conf,退出编辑模式,执行::set nu 就可以在vim编辑器中展示行数。
在这里插入图片描述

3.为匿名访问ftp的根目录下的pub子目录设置最大权限,以便匿名用户上传数据

chmod 777 /var/ftp/pub/

4. 开启服务,关闭防火墙和增强型安全功能

分别执行下面三个指令

systemctl start vsftpd
systemctl stop firewalld
setenforce 0

执行:ifconfig,看到网卡 ip为192.168.1.128,保存好,后续连接会用到。
在这里插入图片描述

(二)Windows 设置用户名密码访问ftp服务器

  • 点击桌面上的我的电脑,然后点击映射网络驱动器

在这里插入图片描述

· 选择映射网络驱动器
在这里插入图片描述

设置指定网站地址:ftp://虚拟机网卡ip
在这里插入图片描述
这里可以设置匿名用户连接ftp也可以设置用户访问ftp连接。这里演示使用有用户名登录FTP.
在这里插入图片描述
在这里插入图片描述
随后点击登录,若FTP服务器地址填写无误,就会显示虚拟机文件内容:
在这里插入图片描述
我们打开“此电脑”,在网络配置中就可以看到我们配置的FTP连接了。
在这里插入图片描述
现在 Win+ R 键打开Windows控制台
执行:

ftp  192.168.1.128

根据指示输入账户和密码,也就是你前面填写的链接FTP服务器的账号密码:
在这里插入图片描述
随后在cmd控制台执行:

cd /etc
ls

在这里插入图片描述

测试:Windows下载Linux文件到本地

接下去在虚拟机上创建文件,写点东西。然后去windows界面看看。

[root@localhost vsftpd]  cd /var/ftp/pub/
[root@localhost pub] touch test.txt
[root@localhost pub] vim test.txt  # 往test.txt中写点东西
[root@localhost pub] ls
test.txt

回到Windows控制台进入 /ftp/pub 查看到 test.txt.使用 get test.txt,windows就会把内容下载到本地。C:\Users\Asus\test.txt(本地路径可能有点儿不一样)
在这里插入图片描述
在这里插入图片描述

(三)Windows 匿名访问ftp服务器

前面操作都是一样的,由于我们之前设置匿名用户允许使用FTP连接 pub 文件夹,选择匿名用户连接FTP服务器过程如下:
在这里插入图片描述

这里匿名用户只能访问 pub文件夹。
在这里插入图片描述
我们还是使用cmd指令,输入

ftp 192.168.1.128

此时系统还会提示,输入用户名密码:此时由于是匿名登陆,所以用户名为:anonymous密码任意输入 都可以登录成功
在这里插入图片描述
后续步骤和之前一样。

问题记录

1. “打开ftp服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹"

这是在Windows10 FTP连接虚拟机时出错。原因可能是系统防火墙拦截了连接。

【方案】打开控制面板,搜索“Internet”选项。Internet选项>>高级>>将“使用被动FTP(用于防火墙和DSL调制解调器的兼容)”选项去掉>>确定即可
在这里插入图片描述
2.【Linux/CentOS】Boolean ftp_home_dir is not defined
安装完vsftpd软件后,因为CentOS系统的SELinux安全策略默认是没有开启FTP服务,直接访问会报错500 OOPS,所以需要修改为允许使用FTP服务。
目标:希望ftp用户可以访问自己的家目录
尝试:命令行输入

 sudo setsebool -P ftp_home_dir 1

发现会报错:Boolean ftp_home_dir is not defined

搜了一下原来是CentOS7开始用 tftp_home_dir 来代替了 ftp_home_dir ,所以应该修改如下:

sudo setsebool -P tftp_home_dir

这时我们再执行:

getsebool -a | grep ftp

查看ftp进程。
在这里插入图片描述
selinux文件配置在下处更改,更改完 reboot.配置生效。

vim /etc/sysconfig/selinux

3. FTP - 550 Failed to change directory

[root@localhost~]setfacl -R -m u:fy36:rwx /var/ftp/pub/
[root@localhost ~] usermod -a -G ftp fy36
[root@localhost ~] chmod g+s /var/ftp/pub/

详见 StackOverFlow

4.输入IP地址,root用户,密码,快速连接,报错:530 Permission denied。

故障排除:

1.首先检查系统是否开启了vsftp服务,如果没有开启,先开启该服务。
方法1.setup–系统服务–自启动服务
方法2.界面设置,service vsftpd restart
2.查看配置
vsftpd的配置,配置文件中限定了vsftpd用户连接控制配置。
vsftpd.ftpusers:位于/etc目录下。它指定了哪些用户账户不能访问FTP服务器,例如root等。
vsftpd.user_list:位于/etc目录下。该文件里的用户账户在默认情况下也不能访问FTP服务器,仅当vsftpd .conf配置文件里启用userlist_enable=NO选项时才允许访问。
vsftpd.conf:位于/etc/vsftpd目录下。来自定义用户登录控制、用户权限控制、超时设置、服务器功能选项、服务器性能选项、服务器响应消息等FTP服务器的配置。
3.配置修改完成后,执行service vsftpd restart重启vsftpd服务。

5. linux ftp failed open,Linux VSFTP提示500 OOPS: failed to open xferlog log file:/var/log/xferlog
例如 B 使用 FTP连接A时报错这个,我们试试A FTP 连接B即可。连接是相互的。

猜你喜欢

转载自blog.csdn.net/SKMIT/article/details/131407682