前言:
Centos 搭建FTP服务学习记录
FTP简介
FTP简称“文件传输协议”,用于Internet上的控制文件的双向传输。
在FTP中常遇到两个概念:
下载和上传
“下载”文件就是从远程主机拷贝文件至自己的计算机上
“上传”文件就是将文件从自己的计算机拷贝到远程主机上。
FTP连接及传输模式
控制连接 TCP 21 ,用于发送FTP命令信息
数据连接 TCP 20,用于上传、下载数据
数据连接的建立类型:
主动模式:服务端从20端口主动向客户端发起连接 被动模式:服务端在指定范围内某个端口被动等待客户端连接
被动模式相较于主动模式好,因为主动连接的话会涉及到开放服务器端防护墙的20、21端口,而且主动模式服务器无法控制客户端所开启的端口,也容易被客户端的防火墙拦截。
FTP用户的类型:
匿名账户:
anonymous
ftp
本地用户
搭建过程
服务器端:
这里实验使用的是vsftpd,所以要先下载
$ yum install vsftpd
但是下载的过程遇到了点问题,如下:
这个问题是yum命令被锁
Existing lock /var/run/yum.pid
解决方法:等待一会或者强制结束
rm -f /var/run/yum.pid
下载好之后,先来了解一下vsftpd服务的一些默认目录,以免后面操作时不知道有关目录在哪里
/usr/sbin/vsftpd ---- VSFTPD的主程序
/etc/rc.d/init.d/vsftpd ---- 启动脚本
/etc/vsftpd/vsftpd.conf ---- 主配置文件
/etc/pam.d/vsftpd ---- PAM认证文件
/etc/vsftpd.ftpusers ---- 禁止使用VSFTPD的用户列表文件
/etc/vsftpd.user_list ---- 禁止或允许使用VSFTPD的用户列表文件
/var/ftp ---- 匿名用户主目录
/var/ftp/pub ---- 匿名用户的下载目录
查看配置文件
vi /etc/vsftpd/vsftpd.conf
#PS:以root权限去看,因为下载的时候便是用的root用户
这里就解释其中重要的一些配置:
参数 | 作用 |
---|---|
download_enable | 是否允许下载文件 |
anonymous_enable | 是否允许匿名用户访问 |
anon_upload_enable | 是否允许匿名用户上传文件 |
anon_mkdir_write_enable | 是否允许匿名用户创建目录 |
anon_other_write_enable | 是否开放匿名用户的其他写入权限 |
local_enable | 是否允许本地用户登录 FTP |
其他的如果用到查询即可
安装完成后,启动 FTP 服务:
systemctl restart vsftpd.service
启动后,可以看到系统已经监听了 21 端口:
netstat -nltp | grep 21
客户端:
客户机需要安装一下ftp包,这样才能使用连接命令ftp ip
,下载命令:
yum install ftp
匿名用户测试
对于vsftpd默认配置是开启了本地用户和匿名用户,可以直接登录的,所以这里没有对配置文件进行修改
服务器端先开启一下服务
客户端使用匿名用户连接,注意需要在同一个网段(两个网络都选为仅主机模式即可或自己手动配置),如果不在一个网段则会出现下面的问题
但是还有一种情况,就是客户端和服务器端都在一个网段,还是出现这个情况,那就应该是服务器端的防火墙将请求给拦截了,所以就需要关闭服务器端的防火墙
解决方法:
1.查看防火墙:iptables -L
2.清空防火墙:iptables -F
#注:这个设置只是暂时的,一旦关机再开机还需要重新进行输入,如果想永久更改就需要下载iptables-services,然后进行更改,这里不详细叙述
客户端再次连接,连接成功(匿名用户ftp没有密码,空格即可)
配置文件中匿名用户登录 vsftpd 服务后的根目录是 /var/ftp/
,进入/var/ftp/pub
上传一个自己创建的文件看一下,发现无法创建
查看一下配置文件,匿名用户上传功能开了,但为什么还是不行
看了老师的讲解,才知道目录也需要进行设置权限,但如果直接使用chmod命令是不行的,会有一小bug,最好的方法是更改目录的属主
$ chown ftp /var/ftp/pub
重启一下,客户端再次连接,但发现还是不行,之前忘记在配置文件加上一段代码,这段代码写哪里都可以,只要是在配置文件中
write_enable=YES
#enable any form of FTP write command
但。。。。还是不行,我要吐了,什么情况,查了半天发现:是selinux限制了,把selinux关掉就可以了
先查看下selinux里有哪些关于ftp的
getsebool -a | grep ftp
如果是写权限和全部权限是off的话就使用命令打开
setsebool -P allow_ftpd_anon_write on
setsebool -P allow_ftpd_full_access on
再在客户端进行上传测试,成功。
下载测试,成功
最后这里提一点常用的Linux ftp
命令
ftp中用lcd切换本地路径,用cd切换远程服务器的路径。如:cd目录名(进入服务器目录) lcd目录名(进入本机目录)
!命令是执行本地shell命令
具体的看大师傅的博客
Linux ftp 命令
本地用户测试
上面使用了匿名用户进行登陆,并上传下载,这次通过本地用户来实现一下
我的本地用户是shy,第一步就设置配置文件(其实不用改就可以)
local_enable=YES
write_enable=YES
local_umask=022
userlist_deny=YES
userlist_enable=YES
为了安全默认禁止以root身份登入,如果你实在想改的话就可以编辑一下文件
vi /vsftpd/user_list
不过不建议,自己可以设置一个新的用户进行测试,这里我就使用本地用户shy
登陆成功,进行上传下载测试,注意创建的文件位于shy账户家目录
上传成功
除本地用户以为,还有一个虚拟用户,虚拟用户不是系统中存在的,因此比本地用户安全。这里就先不学习,待到有需要时再进行学习。