ftp服务器怎么搭建外网访问(linux ftp服务器怎么搭建)

(文件传输协议)

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=YESanon_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

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.dasum.com/173446.html