ftp服务器¶
参考文档
ftp服务器
的主要功能就是:文件的上传和下载
ftp服务器的搭建
我们这里选择使用vsftpd
工具
其搭建基本流程是:
0x00 vsftpd工具安装¶
不同linux发行版的安装方式不同
Debian/Ubuntu系列安装方式
# apt-get安装
$sudo apt-get install vsftpd
RedHat/Fedra/CentOs系列安装方式
# yum安装
$yum install vsftpd
0x01 服务端配置¶
安装好vsftpd
工具之后,我们需要修改下配置文件,但是我们怎么知道配置在哪呢,如果熟悉linux的人就会知道配置文件肯定在/etc
目录下,但是该目录那么多配置文件我该怎么找呢?此时我们有几种方式可以帮你找到其配置文件
$ rpm -ql vsftpd | grep etc # 获取vsftpd工具配置文件的安装路径
$ whereis vsftpd # 获取vsftpd工具配置文件的安装路径
通过上述命令我们可以得知,其配置文件路径是:/etc/vsftpd/vsftpd.conf
,通过vi/vim
编辑器打开,具体修改内容如下:
配置文件修改完之后,需要重启服务使其配置文件生效
# Systemv格式重启服务
$service vsftpd restart # CentOS系列重启
$sudo service vsftpd restart # Ubuntu系列重启
# Systemd格式重启服务
$systemctl restart vsftpd.service # CentOS系列重启
$sudo systemctl restart vsftpd.service # Ubuntu系列重启
最后使用netstat -pantu | grep vsftpd
命令查看服务是否启动成功,处于监听状态
0x02 客户端登陆¶
使用ftp客户端登陆之前,我们需要安装ftp客户端
linux端
yum install ftp
sudo apt-get install ftp
windows端
Xmanage-Xshell
Securecrt
安装好客户端后就可以使用ftp客户端登陆了,登陆方式有:
- 实名用户登陆
- 匿名用户登陆
实名用户登陆(登陆默认进入登陆用户的家目录):
# linux下使用ftp登陆
$ftp 192.168.80.128 # 然后输入用户名和密码即可
# windows下xshell登陆
$ftp zwy@192.168.80.128 # zwy是要登陆的用户,然后输入密码即可
注意:有些用户可能不具有ftp的权限,这些用户会存在于/etc/vsftpd/ftpusers
和/etc/vsftpd/user_list
文件中。如果想让这些用户可以ftp登陆,则需要将其在这两个文件删除或注释掉即可
实名登陆有诸多弊端:
- 暴露用户名和密码
- 实名用户登陆后可以在任意目录下来回切换,不太安全
所以一般我们都不使用实名用户登陆,而是使用匿名用户进行登陆
匿名用户登陆后,是不允许匿名用户在任意目录下直接来回切换,只能在一个指定目录范围内工作,所以需要在ftp服务器上创建一个匿名用户的家目录,该目录就是匿名用户的根目录
匿名用户是以ftp用户登陆的(默认无密码),所以默认匿名用户的家目录就是ftp用户的家目录,此时我们可以通过cat /etc/passwd | grep ftp
命令找到ftp用户的家目录,也就是匿名用户的家目录
然后使用下列方法实现匿名用户登陆
# linux下使用ftp登陆
$ftp 192.168.80.128 # 然后输入用户名anonymous和密码,密码直接回车即可
# windows下xshell登陆
$ftp anonymous@192.168.80.128 # anonymous是匿名用户,然后输入密码,密码直接回车即可
除了可以使用默认ftp家目录作为匿名用户根目录,还可以自己设定
使用
mkdir anonyFtp
命令在指定目录下创建一个目录,即为匿名用户的家目录在
vsftpd.conf
配置文件中通过`` anon_root=/home/anonyFtp``设定该目录为匿名用户的登陆根目录anonyFtp
目录的所有者模型可以使用默认的owner
、group
所有者,但是权限模型最好设置为777,即chmod 777 anonyFtp
。此时owner和group都不是ftp- 如果要保证匿名用户能够登陆,必须保证
others所有者权限位+x
- 如果要保证能够列出根目录下所有文件内容,必须保证
others所有者权限位+r
- 如果要保证能够在根目录上上传文件,必须保证
others所有者权限位+w
- 如果要保证匿名用户能够登陆,必须保证
如果要保证
anonyFtp
根目录下所有子目录能否切换、上传、下载,设置方法如下,这样可以保证ftp用户有可执行x权限chown ftp:ftp anonyFtp/pub
:将pub目录的owner和group都设置为ftp,因为匿名用户是以ftp用户登陆的chmod 744 anonyFtp/pub
vsftpd默认被CentOS的防火墙组件SELinux拦截,造成vsftpd没有足够的权限,有两种解决方法
直接关闭SELinux,这样不太安全
setenforce 0
:暂时让SELinux进入Permissive模式,关闭SELinux,但是重启失效- 将
/etc/selinux/config
文件中的SELINUX=enforcing
改成SELINUX=permissive
,然后重读该配置文件,重启也生效
不需要关闭SELinux就能使vsftpd具有访问ftp根目录,以及文件传输等权限
getsebool -a | grep ftpd
:查看与ftpd相关的权限信息,off是关闭权限,on是打开权限setsebool -P ftpd_anon_write 1
:打开ftpd_anon_write权限,重启生效setsebool -P allow_ftpd_full_access 1
:打开allow_ftpd_full_access权限,重启生效
最后重启服务
使用lftp客户端登陆之前,我们需要安装lftp客户端
linux端
yum install lftp
sudo apt-get install lftp
安装好客户端后就可以使用lftp客户端登陆了,登陆方式同样也有:
- 实名用户登陆
- 匿名用户登陆
匿名用户登陆步骤:
lftp 192.168.80.128
,回车- 输入
login
,回车
如果使用匿名用户登陆后ls
出现如下错误提示:refusing to run with writable root inside chroot()
,是因为默认配置中不允许根目录可写,有两种解决方法:
- 方法一:
chmod o-w anonyFtp
:去掉根目录的可写权限 - 方法二:在
/etc/vsftpd/vsftpd.conf
配置文件中,添加allow_writeable_chroot=YES
字段
实名用户登陆步骤:
lftp test@192.168.80.128
,回车- 输入密码回车
0x03 连接操作¶
ftp客户端登陆后输入help
即可查看ftp支持的所有操作命令
linux中ftp工具支持的操作
windows中xshell工具支持的操作
注意:ftp客户端不能直接操作目录,如果要上传下载目录,需要先将其打包压缩成一个文件
lftp客户端登陆后输入help
即可查看lftp支持的所有操作命令
其中常用操作有:
put
:上传文件mput
:上传多个文件get
:下载文件mget
:下载多个文件mirror
:下载整个目录以及子目录mirror -R
:上传整个目录以及子目录
由上述可知:lftp客户端既可以操作文件,又可以直接操作目录