(文件传输协议)
Vsftpd 非常安全的FTP
FTP在传输的时候有两种模式:主动模式和被动模式
主动模式和被动模式是相对服务器来说的,
主动连接:我们来看个例子,客户端这边有个端口要和服务器来进行连接,客户端会用一个M端口,其中这个M端口是大于1024的端口,然后他去和FTP的21端口来进行连接,一些验证都进行完之后,然后服务器会用它的20端口来和客户端的N端口来进行连接,这种连接方式称作为主动连接;
被动连接: 客户端会用自己的M端口来连接服务器的21端口,然后客户端会告诉服务器端说,如果你要是想和我进行传输数据的话,你就用你的20端口和我的N端口来进行连接,这种连接方式称作为被动连接;
FTP对外提供两个端口: 20和21
20端口是用来下载的(传输数据)
21端口是用来传输控制信息的
它使用的默认软件是VSFTP
VSFTPD全称叫:非常安全的FTP
Vsftpd支持的用户很多,支持本地用户、支持匿名用户、支持虚拟用户
首先我们把vsftpd给装起来,如下:
# yum install vsftpd –y
首先在防火墙里把20和21端口打开。
# iptables -I INPUT -p tcp –dport 20:21 -j ACCEPT
# service iptables save
配置文件: /etc/vsftpd/vsftpd.conf
# vim /etc/vsftpd/vsftpd.conf
是否允许匿名登录(默认是可以访问)
匿名用户登录到服务器时,是在/var/ftp/这个目录下面
是否允许本地用户登录 (默认yes)
使用本地用户登录FTP服务器失败,无法切换到ovinzhang的家目录;
原因如下:本地用户是无法登录FTP,是因为无法切换到自己的家目录,这是SELinux的原因,把selinux关掉就可以了使用本地用户登录FTP服务器了,可以通过以下命令来关闭 selinux,
# setenforce 0
其实不用关掉也可以,但是要使用selinux的一个模块,模块名叫: ftp_home_dir — > off 把这个模块打开就可以了,如下:
查看Selinux布尔值:
# getsebool –a | grep ftp
然后把这个模块打开就可以了,如下:
# setsebool ftp_home_dir on 这样就把这个模块给打开了
如果要开机之后还生效,只要加一个 –P 选项就可以了,如下:
# setsebool –P ftp_home_dir on
把这个模块给打开之后,再使用本地用户从远程连接到FTP服务器就会成功了。
这里提示本地用户ovinzhang已经登录成功了。
是否设置本地用户可以写;本地用户是否具有写权限
本在用户在服务器里写东西时,权限是什么
是否允许匿名用户上传文件 (默认无权限)
上传文档时需要注意的地方:
上传文件有两种模式,一种是ascii模式,一种是bin模式
一般我们在上传一些可编辑的文件时,如txt格式的,可以使用ascii模式
一般我们在上传一些不可编辑的文件时,如图片,可以使用bin模式
切换模式方法:当ftp连接成功之后,可以权限自己上传的文件的类型,直接输入ascii或者bin就可以了,截图如下:
用户上传文件用put命令,如下:
使用匿名用户上传文件时被拒绝;
如果无法上传文件需要从以下几个方面来判断:
1、 看一下配置文件中的anon_upload_enable=YES和anon_mkdir_write_enable=YES这两行前面的注释有没有去掉(有没有打开)
就是在配置文件中是否开启了写权限;看看下面两行有没有启用
允许匿名用户上传文件
允许匿名用户创建和写的权限
2、 考虑文件系统的问题,看一下文件系统里有没有写的权限;
(使用匿名用户登录FTP服务器时,所在的目录是/var/ftp/目录,所以我们要检查一下这个目录的other权限有没有写权限,我们可以/var/ftp/目录下面创建一个文件夹,然后把这个文件的所有者和所属组全部改成ftp,这样匿名用户就会对这个文件夹有写权限了,因为这个文件夹的所有者是ftp,如果这样的话匿名用户还是不能上传文件,我们就要考虑是否是selinux的问题了)
这里的权限为751,就是说other的权限为X,所以说使用匿名用户(也就是其它用户),就无法写东西进去;
# mkdir /var/ftp/incoming
# chown ftp:ftp /var/ftp/incoming 在/var/ftp/目录下创建一个文件,所有者和所属组都为ftp,也就是当匿名用户登录FTP服务器,进入incoming目录上传文件时,就没有问题了,因为incoming的所有者为ftp。如果还是无法上传文件,我们就要考虑下面的问题了;
3、 考虑selinux问题
查看一下关于ftp的布尔值,如下:
# getsebool –a | grep ftp
然后把下面两个布尔值打开,如下:
# setsebool allow_ftpd_anon_write on
# setsebool allow_ftpd_full_access on
这时就可以了看到刚刚上传的文件了,如果遇到无法上传的问题,就按照上面的步骤一一检查就可以了。
是否允许匿名用户可以删除或者创建文件
意思:当你登录FTP服务器时,从A目录切换到B目录的话,如果在B目录里有一个隐藏文件.message的话,在切换的那一瞬间会显示.message的内容(一般我们用这个来设置欢迎词)这个欢迎词对通过网页登录FTP是没有效果的。.message是设置在要切换的目录中;我现在pub目录下建立一个.message文件,我切换过去,截图如下:
意思:是否启用它的日志
日志存放的路径
日志使用标准的格式来记录
是否启用20端口去连接
意思:匿名用户上传文件时是否改变所有者,改变为谁呢,是由下面的chown_username= 后面的值来决定的
意思:匿名用户上传后的文件的所有者将改变成whoever,这个值可以改
现在我们启用这两行,然后再使用匿名用户上传一下文件,这时使用匿名用户上传的文件的所有者都被改成ovinzhang了,截图如下:
它也是用来设置欢迎词的(可以把前面的注释给去掉,即启用欢迎词)
我们来看一下什么是chroot?
默认情况下,匿名用户无论怎么切换都无法切换出它的自己的根(/var/ftp/)这个目录;
当匿名用户登录的时候,查看当前所在路径,会显示为“/”,这个根其实不是系统的根,而是/var/ftp/这个目录,也就是说给匿名用户做了chroot之后,匿名用户无论如何都无法切换到其他外面目录,它只能在/var/ftp/这个目录中。
当使用本地用户登录系统的时候,会直接登录到用户的家目录中,而且可以随意的切换目录,也可以切换到系统的根目录下,这样就会带来安全隐患,所以我们也要给本地用户做一个chroot,详细如下:
本地用户登录FTP之后,所在的目录为自己的家目录;但是它也可以切换到系统的根下面,这样就给系统的安全带来了隐患,那么我们是否也给本地用户做一个chroot呢?
我们可以让普通用户登录FTP的时候,把自己的家目录给隐藏起来,也只显示一个根,做法如下:
如果这行启用的话,那么系统中所有的用户都启用了chroot功能,启用之后当系统用户登录ftp时,就会把该本地用户锁定在自己的家目录中,而且无法切换到除了家目录以外的其它目录。
如果我不想让系统中所有的用户都启用chroot,让指定的用户启用chroot,我们只要启用也现的两行就可以了:
这句话的意思:启用chroot列表
这里指定了列表文件的路径。就是说凡是出现在chroot_list文件中的用户都给做chroot,凡是没有出现在chroot_list文件中的用户都不给做chroot。
如果要是想给指定的用户做chroot,那么只要把上面两个给启用就可以了,而不要启动chroot_local_user=YES,然后凡是出现在/etc/vsftpd/chroot_list文件中的用户都是做了chroot的。你可以把需要做chroot的用户加进chroot_list文件中即可。
匿名用户默认登录FTP的目录是 /var/ftp/,其实这个默认目录是可以改的,只要加上一句 anon_root=/xx 即可,然后匿名用户登录到ftp目录时,就是/xx目录了。
下次匿名用户登录到ftp服务器时就会进入到/xx这个目录
监听
意思:vsftp是否受到pam的管理,受到pam的vsftpd来管理,vsftpd文件位于/etc/pam.d/下面
是否启用用户列表
加了下面两行:
凡是出现在用户列表里的用户都给拒绝掉
凡是出现在这个文件里面的都是拒绝的,这个要根据userlist_deny=yes或者no来决定的,如是后面是YES,则表示为凡是出现在/etc/vsftpd/user_list文件中的文件都被拒绝访问FTP服务器;如果后面是NO,则表示为凡是出现在/etc/vsftpd/user_list文件中的用户都是可以访问FTP服务器;
这个文件中的用户是否可以登录FTP服务器,主要取决于userlist_deny=后面的值,如是yes,则凡是出现在user_list文件里的用户都无法登录FTP服务器;如果是no,则凡是出现在user_list文件里的用户都可以登录FTP服务器;
我们也可以将某些不想让它登录FTP服务器的用户名写入到ftpusers文件中,凡是写入到这个文件中的用户都不可以访问FTP服务器;
为什么写入到ftpusers文件中的用户都无法访问FTP服务器呢?原因如下:
这是因为由/etc/pam.d/vsftpd这个文件来控制的
考虑到安全问题,我不想让用户上传.exe可执行文件,那怎么操作呢,如下:
加上一句:
deny_file={*.exe} 意思:所有以.exe为后缀的文件,都不允许上传
意思:vsftp是否受到tcp_wrappers的管理
在linux上使用FTP工具,则要安装 ftp、lftp如下:
# yum install ftp lftp –y
在linux客户端使用ftp 和 lftp登录FTP服务器的方法,如下:
使用ftp命令登录和在windows下登录一样。
使用lftp命令登录方法如下:
方法一:# lftp 192.168.80.2没有指明用户的话,就是使用匿名用户来登录服务器
方法二:# lftp –u ovinzhang 192.168.80.2 使用-u来指明用户
如果使用ftp或者lftp在连接服务器时,出现下面错误,截图如下:
这时,我们要给防火墙添加一个模块,如下:
打开:
# vim /etc/sysconfig/iptables-config
原始截图
在双引号中加入ip_conntrack_ftp
加载完之后,重启一下防火墙即可:
# service iptables restart

如若转载,请注明出处:https://www.dasum.com/173446.html