FTP服务器搭建及典型问题的解决
SSH管理远程Linux服务器少不了文件的传输,虽然lrzsz
能够解决本地与远程服务器之间文件传输的问题,使用sz/rz
即可,比如:
sz filename #发送一个文件到本地 |
从本地传文件到服务器在终端输入rz
即可。参考这里。
但是lrzsz
处理小文件可以,处理大文件效果就不太好,因此,可以选择另一种方式,没错,搭建一个FTP服务器。而且FTP服务器能支持多人对文件的共享。
搭建FTP服务器
我的服务器是CentOS的,因此下面的配置以CentOS下的配置为例,不过其他Linux系统大同小异,根据个人情况配置即可。
安装vsftpd
Linux下轻便的的ftp程序应该就是vsftpd了,这里我们直接yum安装:
yum install -y vsftpd |
配置vsftpd
vsftpd的配置目录为/etc/vsftpd
,包含下列的配置文件:
vsftpd.conf
为主要配置文件ftpusers
配置禁止访问 FTP 服务器的用户列表user_list
配置用户访问控制
这里我们主要对vsftpd.conf
进行配置,这里可以先用下面这条命令看初始的配置有哪些:
cat /etc/vsftpd/vsftpd.conf | grep -v "#" | more |
各项配置的规则如下:
# 开启匿名登录 |
而我们不一定每项都进行配置,在初始的基础之上,进行如下配置即可:
# 上面已经给了全部配置的含义,自己比对即可 |
配置完之后保存,然后重启vsftpd。
创建FTP用户
首先创建一个新账户ftpuser
:
useradd ftpuser |
然后为其设置密码:
passwd ftpuser |
现在这个账户其实是一个可登录的Linux用户,为了安全,我们要限制用户的权限,不能让其登录linux而只能用于登录FTP服务器:
usermod -s /sbin/nologin ftpuser |
指定主目录
前面配置文件里看到了我们为ftp用户指定了主目录/data/ftp
,但是初始情况该目录可能不存在,需要新建文件目录:
chmod a-w /data/ftp && chmod 777 -R /data/ftp/pub |
这里同时也为目录设置了权限,可以看到pub
目录是777
权限,文件的上传、下载也就在此目录之下了。
然后设置为用户主目录:
usermod -d /data/ftp ftpuser |
防火墙设置
前面的listen_port
如果更改的话,也要在防火墙来开放其端口:
firewall-cmd --zone=public --add-port=60021/tcp --permanent |
然后重启防火墙:
firewall-cmd --reload |
至此,基础的配置也就完毕了,下面进行测试。
测试服务器及问题发现
连接FTP服务器可以选用一些FTP客户端软件:FileZilla Client
、CuteFTP
等很多,我用了FileZilla Client
进行测试。
这里由于FTP的连接有两种模式:主动(POST)
和被动(PASV)
两种模式:
POST模式:当客户端C向服务端S连接后,使用的是Port模式,那么客户端C会发送一条命令告诉服务端S(客户端C在本地打开了一个端口N在等着你进行数据连接),当服务端S收到这个Port命令后 就会向客户端打开的那个端口N进行连接,这种数据连接就生成了。
PASV模式:当客户端C向服务端S连接后,使用的是Port模式,那么客户端C会发送一条命令告诉服务端S(客户端C在本地打开了一个端口N在等着你进行数据连接),当服务端S收到这个Port命令后 就会向客户端打开的那个端口N进行连接,这种数据连接就生成了。
按照前面的基础配置在测试时发现主动和被动模式登录都存在问题
主动模式连接的问题
首次连接发现可以登录,但是读取目录列表失败,报错情况如下:
根据报错提示:
状态: 已登录 |
根据报错日志,不难理解,当成功登录之后,进行目录读取,其实也就是数据传输的时候,因为是主动模式,服务器会主动向客户端这边进行连接,即向21694
端口进行连接,然后就报错了,根本原因应该就是客户端机器的防火墙对该端口并没有开放,因此连接肯定是失败的。然后又采用了被动模式进行连接,即服务器开放22727
端口等待客户端连接,然而还是失败了,原因何在呢?
由于一些客观原因,我没有对自己的客户机的防火墙进行更改,而是换用被动模式,当然,也遇到了一些问题。
被动模式连接的问题
采用被动连接的方式,首先需要在vsftpd.conf
下进行如下配置:
pasv_enable=YES #开启被动模式 |
重启vsftpd
服务
支持了被动模式,并且指定了端口开放范围,那么我们在防火墙进行端口的配置即可。
重启防火墙,然后再次测试:
可以看到目录成功列举了,问题得到解决。
上传文件失败的问题
当能成功登录、成功列举目录了之后,最主要的目的当然是文件的上传和下载了,然后当去测试的时候,又出现了问题:
报错:553 Could not create file.
本来想着很简单,应该是文件夹权限的问题,但是对文件夹改了777,甚至/data
都改成777了还是不行,后来查资料,网上说可能是SELinux
的问题,这是个什么呢?
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。 –百科
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
这里有一篇不错的文章可以参考。
那么我们关闭SELinux试试:setenforce 0
,然后测试一下看看:
果然成了,那就是它的问题了,下面就对其进行配置
先看一下权限:getsebool -a | grep ftpd
# 网上是这样的 |
系统之间的差异,没办法,但是解决方式是一样的,命令行执行下面两条命令:
setsebool -P ftp_home_dir 1 #这一条命令我的服务器上没执行成功 |
然后再开启SELinux:setenforce 1
再次进行测试:
可以看到,成功上传文件,问题解决。
下载文件失败的问题
尝试从服务器上下载文件时,又error了…
可以看到,下载文件时报错:550 Failed to open file.
这次问题其实不复杂,很容易想到是文件权限的问题,看一下:
可以看到test.cap
文件是属于root
用户组的,并且权限很小,你一个ftpuser
用户去操作它肯定没权限,那简单,改一下不就好了:chmod -R 777 test.cap
,再试试:
话说回来,如果没有特殊需要,还是用lrzsz
方便…
最后,希望这篇文章能够帮助到你。
参考:
基于CentOS搭建FTP文件服务
CentOS7安装FTP服务器
553 Could not create file问题的解决
- Post Title: FTP服务器搭建及典型问题的解决
- Post Author: ggb0n
- Post Link: http://ggb0n.cool/2020/04/03/FTP服务器搭建及典型问题的解决/
- Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
1.TCTF2020部分题解
2.第五空间pwn题练习
3.堆溢出-Tcache_Attack
4.堆溢出-Housese_Of_XXX
5.堆溢出基础
6.入坑二进制