Linux下配置FTP服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下配置FTP服务器相关的知识,希望对你有一定的参考价值。

参考技术A

  它可运行在Linux、Solaris等系统中,支持很多其他的FTP 服务器不支持的特征:

  非常高的安全性需求

  带宽限制

  良好的可伸缩性

  创建虚拟用户的可能性

  分配虚拟IP地址的可能性

  一、vsftpd的启动

  #service vsftpd start

  如果允许用户匿名访问,需创建用户ftp和目录/var/ftp

  # mkdir /var/ftp

  # useradd –d /var/ftp ftp

   二、vsftpd的配置

  Vsftpd的配置文件存放在/etc/vsftpd/vsftpd.conf 我们可根据实际数要对如下信息进行配置:

  1. 连接选项

  ☆监听地址和控制端口

  (1) listen_address=ip address

  定义主机在哪个IP 地址上监听FTP请求。即在哪个IP地址上提供FTP服务。

  (2) listen_port=port_value

  指定FTP服务器监听的端口号。默认值为21。

   2. 性能与负载控制

  ☆超时选项

  (1) idle_session_timeout=

  空闲用户会话的超时时间,若是超过这段时间没有数据的传送或是指令的输入,则会被迫断线。默认值是300s

  (2) accept_timeout=numerical value

  接受建立联机的超时设定。默认值为60s

  ☆负载选项

  (1) max_clients= numerical value

  定义FTP服务器最大的兵法连接数。当超过此连接数时,服务器拒绝客户端连接。默认值为0,表示不限最大连接数。

  (2) max_per_ip= numerical value

  定义每个IP地址最大的并发连接数目。超过这个数目将会拒绝连接。此选项的设置将会影响到网际快车、迅雷之类的多线程下载软件。默认值为0,表示不限制。

  (3) anon_max_rate=value

  设定匿名用户的最大数据传输速度,以B/s为单位。默认无。

  (4) local_max_rate=value

  设定用户的最大数据传输速度。以B/s为单位。默认无。此选项对所有的用户都生效。

  3. 用户选项

  vsftpd的用户分为3类:匿名用户、本地用户(local user)及虚拟用户(guest)

  ☆ 匿名用户

  (1) anonymous_enable=YES|NO

  控制是否允许匿名用户登录

  (2) ftp_username=

  匿名用户使用的系统用户名。默认情况下,值为ftp

  (3) no_anon_password= YES|NO

  控制匿名用户登录时是否需要密码。

  (4) anon_root=

  设定匿名用户的根目录,即匿名用户登录后,被定位到此目录下。主配置文件中默认无此项,默认值为/var/ftp/

  (5) anon_world_readable_only= YES|NO

  控制是否只允许匿名用户下载可阅读的文档。YES,只允许匿名用户下载可阅读的文件。NO,允许匿名用户浏览整个服务器的文件系统。

  (6) anon_upload_enable= YES|NO

  控制是否允许匿名用户上传文件。除了这个参数外,匿名用户要能上传文件,还需要两个条件,write_enable参数为YES;在文件系统上,FTP匿名用户对某个目录有写权限。

  (7) anon_mkdir_wirte_enable= YES|NO

  控制是否允许匿名用户创建新目录。在文件系统上,FTP匿名用户必须对新目录的上层目录拥有写权限。

  (8) anon_other_write_enbale= YES|NO

  控制匿名用户是否拥有除了上传和新建目录之外的`其他权限。如删除、更名等。

  (9) chown_uploads= YES|NO

  是否修改匿名用户所上传文件的所有权。YES,匿名用户上传得文件所有权改为另一个不同的用户所有,用户由chown_username参数指定。

  (10) chown_username=whoever

  指定拥有匿名用户上传文件所有权的用户。

  ☆本地用户

  (1) local_enable= YES|NO

  控制vsftpd所在的系统的用户是否可以登录vsftpd。

  (2) local_root=

  定义本地用户的根目录。当本地用户登录时,将被更换到此目录下。

  ☆虚拟用户

  (1) guest_enable= YES|NO

  启动此功能将所有匿名登入者都视为guest

  (2) guest_username=

  定义vsftpd的guest用户在系统中的用户名。

   4. 安全措施

  ☆用户登录控制

  (1) /etc/vsftpd.ftpusers

  Vsftpd禁止列在此文件中的用户登录FTP服务器。此机制是默认设置的。

  (2) userlist_enable= YES|NO

  此选项激活后,vsftpd将读取userlist_file参数所指定的文件中的用户列表。

  (3) userlist_file=/etc/vsftpd.user_list

  指出userlist_enable选项生效后,被读取的包含用户列表的文件。默认值是/etc/vsftpd.user_list

  (4) userlist_deny= YES|NO

  决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器。userlist_enable选项启动后才能生效。默认值为YES,禁止文中的用户登录,同时不向这些用户发出输入口令的指令。NO,只允许在文中的用户登录FTP服务器。

  ☆目录访问控制

  (1) chroot_list_enable= YES|NO

  锁定某些用户在自己的目录中,而不可以转到系统的其他目录。

  (2) chroot_list_file=/etc/vsftpd/chroot_list

  指定被锁定在主目录的用户的列表文件。

  (3) chroot_local_users= YES|NO

  将本地用户锁定在主目中。

在linux下配置FTP服务

什么是FTP?

FTP(File Transfer Protocol,文件传输协议):
是 TCP/IP 协议组中的协议之一。
FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。
其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。
在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。
此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的 2021这两个端口,其中20用于传输数据,21用于传输控制信息。

安装并启动FTP服务器vsftpd

安装

我们选择下载vsftpd作为ftp服务器,lftp作为ftp客户端。

什么是vsftpd?

vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。
vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字。
它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面。
是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。
比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。

什么是lftp?

lftp是一款类 Unix 系统下命令行界面的FTP 客户端软件。
除了FTP外,还支持FTPS、HTTP、HTTPS、SFTP、FXP等多种协议。
此外,lftp 也内含一个简单的BitTorrent客户端。
lftp 提供了一个类似Unix shell的用户界面,用户可以在互动模式下运行,也可以直接使用脚本操作。
lftp 亦支持多线程下载。

服务端安装vsftpd,dnf install vsftpd -y
客户端安装lftp,dnf install lftp -y
##服务端和客户端可以是同一台主机
关闭防火墙systemctl stop firewalld或者配置防火墙firewall-cmd --permanent --add-service=ftpfirewall-cmd --reload
关闭selinux,setenforce 0
启动vsftpd,systemctl start vsftpd
在这里插入图片描述

vsftpd基本信息

服务名称:vsftpd.service
配置目录:/etc/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
默认发布目录:/var/ftp

访问时的报错码及原因:
550   ##程序本身拒绝
553   ##文件系统权限限制
500   ##权限过大
530   ##认证失败

配置vsftpd

关于匿名用户的配置

使用命令lftp 192.168.187.129可以匿名访问ftp

1. 允许匿名访问

我们用命令lftp 192.168.187.129匿名访问ftp,表面看是访问成功了,其实不然,我们ls不能列出任何东西,这就说明我们是访问失败的!,默认不允许匿名访问!
##quit或者exit可退出ftp
在这里插入图片描述
我们更改配置文件vim /etc/vsftpd/vsftpd.conf,将第12行的参数改为YES,允许匿名访问!
保存退出,重启vsftpd,systemctl restart vsftpd
在这里插入图片描述
再访问,访问成功!
在这里插入图片描述

2. 更改匿名访问的默认发布目录

默认发布目录是/var/ftp,我们创建一个目录,并将其更改为默认目录
mkdir /luckytouch /lucky/luckyfile
在这里插入图片描述
更改配置文件vim /etc/vsftpd/vsftpd.conf,自己添加anon_root=/lucky
在这里插入图片描述
保存退出,重启vsftpd,systemctl restart vsftpd
重新访问,可以看到默认访问目录已变为/lucky
在这里插入图片描述

3. 匿名访问的上传文件控制

匿名访问默认是不能上传的,使用put命令上传文件出现550报错,被程序本身拒绝
在这里插入图片描述
更改配置文件vim /etc/vsftpd/vsftpd.conf,将anon_upload_enable=YES取消注释在这里插入图片描述
保存退出,重启vsftpd,systemctl restart vsftpd
重新访问,又出现了553的错误,文件系统权限限制
在这里插入图片描述
退出ftp给权限chmod 775 /var/ftp/pubchgrp ftp /var/ftp/pub
重启ftp,访问上传成功!
在这里插入图片描述

4. 匿名用户目录建立控制

默认不能创建目录
在这里插入图片描述
更改配置文件vim /etc/vsftpd/vsftpd.conf,将34行取消注释
在这里插入图片描述
保存退出,重启vsftpd,systemctl restart vsftpd
重新访问,创建目录成功
在这里插入图片描述

5. 匿名用户下载控制

匿名用户默认不能下载文件
在这里插入图片描述
更改配置文件vim /etc/vsftpd/vsftpd.conf,添加anon_world_readable_only=NO,意为匿名用户可以下载不可读的文件
在这里插入图片描述
保存退出,重启vsftpd,systemctl restart vsftpd
重新访问,下载成功
##默认下载到/var/ftp下
在这里插入图片描述

6. 匿名用户删除命令控制

匿名用户默认不能删除文件
在这里插入图片描述
更改配置文件vim /etc/vsftpd/vsftpd.conf,添加anon_other_write_enable=YES,给匿名用户删除的权限
在这里插入图片描述
保存退出,重启vsftpd,systemctl restart vsftpd
重新访问,删除成功
在这里插入图片描述

6. 匿名用户上传文件权限设定

更改配置文件vim /etc/vsftpd/vsftpd.conf,添加anon_umask=022,意为匿名用户上传的文件的权限是777-022-111=644即rw_r_ _r_ _
在这里插入图片描述
保存退出,重启vsftpd,systemctl restart vsftpd
重新访问,上传后查看权限,设置成功
在这里插入图片描述

7. 匿名用户上传文件的用户身份以及权限设定

匿名用户都是以ftp的身份上传的
在这里插入图片描述
更改配置文件vim /etc/vsftpd/vsftpd.conf,将52,53行取消注释,并更改53行的用户名,54行增加上传文件权限为700chown_upload_mode=0700
在这里插入图片描述
保存退出,重启vsftpd,systemctl restart vsftpd
重新访问,上传后查看权限用户身份,设置成功
在这里插入图片描述

8. 匿名用户上传下载速率控制:

为了看出实验效果我们先创建一个空的大文件,dd if=/dev/zero of=/tmp/bigfile bs=1M count=2000
在这里插入图片描述
默认是不限速的,速度很快,更改配置文件vim /etc/vsftpd/vsftpd.conf,添anon_max_rate=102400,意为速度是100k左右
在这里插入图片描述
保存退出,重启vsftpd,systemctl restart vsftpd
重新访问,上传刚刚创建的文件,设置成功
##上传速率一开始很快,慢慢就开始在设定值左右了
下载速率是速度慢慢上去到设定值
在这里插入图片描述

登录数量控制(针对所有用户皆有效)

默认情况登录没有限制,更改配置文件vim /etc/vsftpd/vsftpd.conf,添加max_clients=1,只允许同时登录一个用户
##多出来的在队列中等待,登录的退出后才可以进去
在这里插入图片描述
保存退出,重启vsftpd,systemctl restart vsftpd
多个shell重新访问,第二个即被拒绝
在这里插入图片描述
把第一个登录退掉,第二个即可继续访问
在这里插入图片描述

关于本地用户的配置

使用命令lftp 192.168.187.129 -u lucky可以以本地用户身份访问ftp,需要输密码
ls访问的是自己的家目录
在这里插入图片描述

1. 基本配置

以下部分与匿名用户的类似,上面已详细写过,不再赘述
修改配置文件vim /etc/vsftpd/vsftpd.conf

local_enable=NO|YES			家目录控制
local_root=/software		更改家目录
write_enable=NO|YES			写权限控制
local_umask=077				上传文件权限控制

2. 用户登陆控制

在黑名单的用户是不能登录ftp的:
/etc/vsftpd/ftpusers   ##永久黑名单
/etc/vsftpd/user_list   ##默认/临时黑名单

用户登陆白名单:
将userlist_deny=YES改为NO,即为设定/etc/vsftpd/user_list为白名单
#不在名单中的用户不能登陆ftp

添加lucky用户到/etc/vsftpd/user_list
并更改配置文件vim /etc/vsftpd/vsftpd.conf
将userlist_deny=YES改为NO,则/etc/vsftpd/user_list变为白名单
只有lucky可以登录ftp
在这里插入图片描述
在这里插入图片描述
此时再把lucky添加进永久黑名单/etc/vsftpd/ftpusers里,那么lucky即使在临时白名单里,也不能登录
在这里插入图片描述

3. 锁定用户到家目录

默认情况下普通用户登录也可以访问根目录,不太安全
所以修改配置文件vim /etc/vsftpd/vsftpd.conf锁定用户到自己的家目录中:chroot_local_user=YES
在这里插入图片描述
保存退出,重启vsftpd,systemctl restart vsftpd
重新访问,出现500报错,权限过大
在这里插入图片描述
所以我们减一下权限chmod u-w /home/*
重新访问,不能进入根目录,锁定成功
在这里插入图片描述
锁定用户到自己的家目录中的白名单:
##只有在名单里的才会锁定到自己的家目录
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list   ##名单
在这里插入图片描述
锁定用户到自己的家目录中的黑名单:
##只有不在名单里的才会锁定到自己的家目录
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list   ##名单
在这里插入图片描述

配置虚拟用户进行访问

配置用户及设置认证

设置用户名和密码,创建文件vim /etc/vsftpd/ftpauth
在这里插入图片描述
在文件里加入用户名和密码
在这里插入图片描述

我们用pam来提供认证功能:
PAM使用配置/etc/pam.d/下的文件,来管理对程序的认证
应用程序调用相应的配置文件,从而调用本地的认证模块。
模块放置在/lib/security下,以加载动态库的形式进。
像我们使用su命令时,系统会提示你输入root用户的密码.这就是su命令通过调用PAM模块实现的。

首先要将密码文件加密db_load -T -t hash -f ftpauth ftpauth.db
##-T:转换 -t:type -f:指定转换文件
在这里插入图片描述
配置认证文件vim /etc/pam.d/ftpauth,加入以下内容

account	 required 	pam_userdb.so 	db=/etc/vsftpd/ ftpauth
auth	 required 	pam_userdb.so 	db=/etc/vsftpd/ ftpauth
##第一行意思是必须通过认证,会自动添加后缀
##第二行意思是插件会读取名单里的信息,对比成功通过

在这里插入图片描述
编辑ftp的配置文件vim /etc/vsftpd/vsftpd.conf

在文件的最后做如下更改:
pam_service_name=auth_file		#指定认证策略文件
guest_enable=YES				#指定虚拟用户功能开启
guest_username=ftp				#虚拟用户以ftp在服务器上登录

在这里插入图片描述
至此配置完成,重启ftp后用虚拟用户访问成功!
在这里插入图片描述

指定虚拟用户家目录

创建虚拟用户各自家目录
mkdir /ftphomedir/user{a..c}/pub -p
给权限
chmod 775 /ftphomedir/user{a..c}/pub
chgrp ftp /ftphomedir/user{a..c}/pub
修改配置文件
local_root=/ftphomedir/$USER	$USER显示当前登录用户名字
user_sub_token=$USER			这一句是为了让上一句能识别$USER是什么意思

修改完后重启ftp生效

限制虚拟用户权限

创建子配置文件
mkdir /etc/vsftpd/user_conf
vim /etc/vsftpd/user_conf/usera			编辑usera的配置文件
anon_upload_enabl=YES					在/etc/vsftpd/user_conf/usera中写入

编辑ftp配置文件,在文件的最后加入
user_config_dir=/etc/vsftpd/user_conf
注释掉20多行的upload、write、mkdir
这样只有usera可以上传剩下的都不可以

修改完后重启ftp生效

以上是关于Linux下配置FTP服务器的主要内容,如果未能解决你的问题,请参考以下文章

linux下FTP服务器的安装与配置

在linux下配置FTP服务

Linux FTP配置

阿里云Linux下FTP服务器搭配配置

Linux环境下搭建FTP服务器,配置本地用户个人配置,userlist-deny=NO

Linux下FTP服务器搭建