MENU

FTP服务

• 2019 年 06 月 12 日 • 默认分类

FTP服务简介

FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。
FTP(File Transfer Protocol: 文件传输协议)作用: Internet 上用来传送文件的协议

常见FTP服务器:

  1. windows:Serv-U FTP Server,filezilla_server
  2. Linux:ProFTPD:(Professional FTP daemon)一个Unix平台上或是类Unix平台上(如Linux,
    FreeBSD等)的FTP服务器程序。

主角:vsftpd
VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全。
特点: 它是一个安全、高速、稳定的FTP服务器;

模式: C/S 模式

默认使用20、21号端口,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端发出的相关FTP命令与参数

FTP协议有两种工作模式:
主动模式:FTP服务器主动向客户端发起连接请求。
被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式)。
用户列表文件ftpusers和user_list

  • Ftpusers文件:此文件中的用户将禁止登陆ftp服务器,不管该用户是否在user_list文件中出现,默认已包含root、bin等系统运行用户。
  • User_list文件:此文件中包含的用户可能被禁止登陆,也可能被允许登陆,取决于配置文件中vsftpd.conf的设置,当存在userlist_enable=yes,user_list列表文件就生效,若userlist_deny=yes,则仅禁止此列表中的用户登录,若指定userlist_deny=no,则仅允许列表中的用户登录

Vsftp主配置文件路径:/etc/vsftpd/vsftpd.conf
Vsftp常用参数和作用:

常用参数作用.png

部署匿名访问ftp

注意事项:
Linux系统ftp匿名用户对应的系统用户为ftp,windows对应的是anonymous,其宿主目录为/var/ftp/也就是匿名访问vsftpd服务时所在的ftp根目录。基于安全考虑,ftp根目录的权限不允许匿名用户或其他用户具有写入权限(否则会500错误),默认开启了user_list_enable=yes列表这个列表就是黑名单,在user_list语句下加入user_deny=no那么列表就是白名单

1.使用yum方式安装vsftp程序,关闭防火墙和selinux

yum install -y vsftpd        //yum方式安装vsftpd
systemctl stop firewalld        //关闭防火墙
setenforce 0            //关闭selinux

2.过滤配置文件空行和注释行

cat /etc/vsftpd/vsftpd.conf | grep -v "^#" > /etc/vsftpd/vsftpd.conf 
  1. 编辑配置文件,开启匿名访问,设置匿名访问权限
    注意:如果复制内容参数后不要留空格,否则启动服务报错
vim /etc/vsftpd/vsftpd.conf     //编辑vsftp配置文件
-------------输入以下内容-----------------
anonymous_enable=YES        //开启匿名访问
anon_upload_enable=yes        //开启匿名访问上传权限
anon_umask=022            //设置umask值,文件644,目录755        
anon_root=/    var/ftp/pub        //设置匿名访问的根目录
anon_mkdir_write_enable=yes    //开启匿名创建目录的权限
anon_other_write_enable=yes    //开启匿名其他权限(删除,重命名)

--------------------------以下保持默认-----------------------

local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO 
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES 
tcp_wrappers=YES

4.保存配置文件的修改并退出,重启vsftpd服务
又或者直接黏贴这个配置文件

vsftpd.conf实现匿名用户上传下载删除配置文件

允许匿名用户和本地用户登陆。

anonymous_enable=YES
local_enable=YES

本地用户的登录名为本地用户名,口令为此本地用户的口令;本地用户可以在自 己家目录中进行读写操作;本地用户可以离开自家目录切换至有权限访问的其他目录,并在权限允许的情况下进行上传/下载

write_enable=YES

若是启动这项功能,则使用匿名登入时,不会询问密码。默认值为NO

no_anon_password=YES

定义匿名登入的使用者名称。默认值为ftp

ftp_username=ftp

使用匿名登入时,所登入的目录。默认值为/var/ftp。注意ftp目录不能是777的权限属性,即匿名用户的家目录不能有777的权限

anon_root=/var/ftp

如果设为YES,则允许匿名登入者有上传文件(非目录)的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为NO

anon_upload_enable=YES

如果设为YES,则允许匿名登入者下载可阅读的档案(可以下载到本机阅读,不能直接在FTP服务器中打开阅读)。默认值为YES

anon_world_readable_only=YES

如果设为YES,则允许匿名登入者有新增目录的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为NO

anon_mkdir_write_enable=YES

如果设为YES,则允许匿名登入者更多于上传或者建立目录之外的权限,譬如删除或者重命名。(如果anon_upload_enable=NO,则匿名用户不能上传文件,但可以删除或者重命名已经存在的文件;如果anon_mkdir_write_enable=NO,则匿名用户不能上传或者新建文件夹,但可以删除或者重命名已经存在的文件夹。)默认值为NO

anon_other_write_enable=YES

设置是否改变匿名用户上传文件(非目录)的属主。默认值为NO

chown_uploads=NO

设置匿名用户上传文件(非目录)的属主名。建议不要设置为root

chown_username=username

设置匿名登入者新增或上传档案时的umask 值。默认值为077,则新建档案的对应权限为700

anon_umask=077

standalone (must config)

设置vsftpd服务器是否以standalone模式运行。以standalone模式运行是一种较好的方式,此时listen必须设置为YES,此为默认值。建议不要更改,有很多与服务器运行相关的配置命令,需要在此模式下才有效。若设置为NO,则vsftpd不是以独立的服务运行,要受到xinetd服务的管控,功能上会受到限制

listen=YES

设置vsftpd允许的最大连接数,默认值为0,表示不受限制。若设置为100时,则同时允许有100个连接,超出的将被拒绝。只有在standalone模式运行才有效。

max_clients=0

设置每个IP允许与FTP服务器同时建立连接的数目。默认值为0,表示不受限制。只有在standalone模式运行才有效

max_per_ip=0

设置FTP服务器在指定的IP地址上侦听用户的FTP请求。若不设置,则对服务器绑定的所有IP地址进行侦听。只有在standalone模式运行才有效

listen_address=IP地址

:wq            //保存并退出
systemctl restart vsftpd    //重启vsftpd服务

这一步及其容易出错,我们切记千万别动指定的ftp目录/var/ftp权限
一动就玩完,我们只需要在ftp的目录下再次创建一个目录并且授予其读取写入的权限即可

5.使用windows访问ftp验证

验证.png

注意:如果windows访问ftp提示以下错误:

报错.png

解决办法:

解决办法.png

基于系统用户的ftp

注意事项:

7.3以上系统用户不能设置属性为/sbin/nologin,否则用户无法登陆

7.3以下可以设置系统属性为/sbin/nologin

ftp根目录的权限不允许匿名用户或其他用户具有写入权限(否则会500错误),其他用户全局配置加入allow_writeable_chroot=YES、更改目录的属主、更改755权限即可解决,匿名无法解决

基于系统用户和基于虚拟用户不能同时配置,也就是说pam_service_name参数只能存在一个,要么使用本地系统用户验证pam文件,要么使用虚拟用户pam验证文件否则会出现无法登陆的情况

默认userlist_enable=yes等于userlist列表是黑名单,如果要设置为白名单再下面添加一条userlist_deny=no,然后在userlist文件中添加允许访问的用户,windows匿名用户为anonymous,linux匿名用户为ftp

1.创建用户wangwu,设置不能登录系统,设置用户的家目录

useradd -s /sbin/nologin wangwu -d /ftp/wangwu/    //创建wangwu用户,设置家目录
passwd wangwu                     //为wangwu设置密码
tail /etc/passwd                    //查看用户信息

2.创建用户的ftp根目录,设置目录的属主,使其具有写入权限

mkdir -p /ftp/wangwu        //创建wangwu的根目录
chown wangwu /ftp/wangwu/        //修改目录的属主为wangwu

3.设置用户的登录密码

passwd wangwu        //设置wangwu用户密码

4.编辑配置文件,开启本地用户访问

vim /etc/vsftpd/vsftpd.conf 
-------------------------------添加以下内容------------------------------
local_enable=YES        //开启本地用户访问
chroot_local_user=Yes    //设置用户禁锢在家目录
allow_writeable_chroot=YES    //根目录有写入无法登陆,加入此项
local_umask=022        //设置上传文件和创建目录权限,文件644目录755
local_root=/ftp/        //设置本地用户ftp根目录

5.保存配置文件的修改并退出,重启vsftpd服务

:wq            //保存并退出
systemctl restart vsftpd    //重启vsftpd服务

6.使用windows访问ftp,使用用户账号进行验证

虚拟用户的FTP

注意事项:

基于虚拟用户如果全局配置中设置了匿名的其他权限,在虚拟用户的权限文件什么权限也没有,最终用户将有全局配置的匿名权限,要限制虚拟用户权限,取消全局配置里面的anon的权限,然后在用户权限文件中添加相应的权限
用户验证的列表文件权限一定要设置为600,否则无法验证成功
虚拟用户有anon_upload_enable=yes上传权限不加umask值的话上传后权限为600,只能上传不能下载,需要在主配置文件或者单独用户权限文件中添加anon_umask=022值;

部署基于虚拟用户的ftp
1.在vsftpd目录创建一个虚拟用户文件,写入用户名和密码,基数为为用户名,偶数为密码

vim vuser.list

文件.png

2.使用db_load工具将明文密码文件转换为hash加密文件

db_load -T -t hash -f vuser.list vuser.db        //将虚拟用户文件加密
chmod 600 vuser.db                    //更改权限只有root可以查看写入

3.创建一个虚拟用户映射到的一个本地用户,并设置虚拟用户的家目录,权
限等

useradd -s /sbin/nologin -d /var/ftproot xuni        //创建映射用户,设置家目录
chmod -R 755 /var/ftproot/                //修改家目录权限为755

4.建立用于支持虚拟用户的pm文件,新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数库文件的路径,但不用写数据库文件的后缀

vim /etc/pam.d/vsftpd.vu
-----------------写入以下内容------------------------
auth required   pam_userdb.so db=/etc/vsftpd/vuser
account required   pam_userdb.so db=/etc/vsftpd/vuser

5.修改配置文件添加pam认证文件、开启虚拟用户访问、设置映射的虚拟用户、

vim /etc/vsftpd/vsftpd.conf
--------------------添加以下内容----------------------
guest_enable=yes            //启用虚拟用户的访问
guest_username=xuni            //设置虚拟用户映射的本地用户
pam_service_name=vsftpd.vu        //设置用于认证的pam文件
allow_writeable_chroot=YES        //根目录有写入无法登陆,加入此项

6.为不同虚拟用户设置不同的权限,例如qqq有上传、创建、修改、查看、删除的权限,而只允许www有查看的权限

mkdir /etc/vsftpd/vusers_dir        //创建目录存放虚拟用户的权限文件
cd /etc/vsftpd/vusers_dir/        //切换到权限文件目录    
touch www                //创建www用户的权限文件不需要任何内容
vim qqq                //新建一个qqq用户的权限文件

--------------------添加以下内容----------------------------

anon_upload_enable=yes        //允许用户上传文件
anon_mkdir_write_enable=yes        //允许用户创建目录
anon_other_write_enable=yes        //允许用户有其他权限(重命名、删除等)

7.修改配置文件,添加虚拟用户的权限文件存放路径

vim /etc/vsftpd/vsftpd.conf            //编辑主配置文件
--------------------添加以下内容-----------------------------
user_config_dir=/etc/vsftpd/vusers_dir    //指定权限文件的存放路径
8.重启服务,登录ftp验证
systemctl restart vsftpd    //重启vsftpd服务

FTP访问控制

1.主机访问控制:通过tcp_wrappers=YES实现,设置vsftpd是否与tcp wrapper相结合来进行主机的访问控制。默认值为YES。如果启用,则vsftpd服务器会检查/etc/hosts.allow 和/etc/hosts.deny 中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。这两个文件可以起到简易的防火墙功能。
比如:若要仅允许192.168.1.1—192.168.1.254的用户可以连接FTP服务器,则在/etc/hosts.allow文件中添加以下内容:
vsftpd:192.168.1. :allow
vsftpd:all :deny
2.对于用户的访问控制可以通过/etc目录下的vsftpd/user_list和ftpusers文件来实现。

返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码