基于vsftpd传输文件

本文介绍了FTP协议的基础知识,包括其工作模式。重点讲解了在Linux上使用vsftpd部署FTP服务器,详细阐述了vsftpd的三种认证模式:匿名开放模式、本地用户模式和虚拟用户模式,并提供了配置过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述


一.什么是文件传输协议?

FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20,21号端口,端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接收客户端发出的相关FTP命令与参数。普遍部署于内网中,具有容易搭建、方便管理的特点,某些FTP客户端工具还可以支持文件的多点下载及断点续传技术。


二.两种工作模式是什么?

主动模式:FTP服务器主动向客户端发起连接请求
被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式)


三.部署

vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,开源免费,很高的安全性,进行安装

[root@tong ~]#yum -y install vsftpd
......
[root@tong ~]# grep -v "#" /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES      //允许匿名用户访问
local_enable=YES       //允许本地用户登陆FTP
write_enable=YES  
local_umask=022    //本地用户上传文件的umask值
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


四.Vsftpd三种认证模式

vsftpd允许用户以三种认证模式登录到FTP服务器


1.匿名开放模式
  • 是一种最不安全的认证模式,任何人都可以无需密码验证而直接登陆到FTP服务器
[root@server ~]# grep -v "#" /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES             //允许匿名访问模式
anon_umask=022              //匿名用户上传文件的umask值
anon_upload_enable=YES   //允许匿名用户上传文件
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
[root@server ~]# ls -ld /var/ftp/pub/               //显示只有root用户能够对此目录进行写入
drwxr-xr-x. 2 root root 6 Oct 31 03:45 /var/ftp/pub/
[root@server ~]# chown -Rf ftp /var/ftp/pub/    //修改属主为ftp
[root@server ~]# ls -ld /var/ftp/pub/
drwxr-xr-x. 2 ftp root 6 Oct 31 03:45 /var/ftp/pub/

客户端访问

[root@client ~]# ftp 192.168.85.129
Connected to 192.168.85.129 (192.168.85.129).
220 (vsFTPd 3.0.2)
Name (192.168.85.129:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> mkdir file2
257 "/pub/file2" created
ftp> rm -rf file2
550 Remove directory operation failed.
ftp> remove file2
?Invalid command
ftp> rmdir file2
250 Remove directory operation successful.

2.本地用户模式
  • 通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,配置较简单,但是如果被黑客破解了账户的信息,就可以畅通无阻的登陆FTP服务器,从而控制整台服务器

编辑服务器配置

[root@server ~]# grep -v "#" /etc/vsftpd/vsftpd.conf 
anonymous_enable=No    //禁止匿名访问模式
local_enable=YES    //允许本地用户模式
write_enable=YES   //设置可写权限
local_umask=022    //本地用户模式创建文件的umask值
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   //启动“禁止用户名单”,名单文件为ftpusers和user_list
tcp_wrappers=YES

关于禁止用户名单如下,禁止里面的用户进行登陆行为

[root@server ~]# cat /etc/vsftpd/user_list 
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@server ~]# cat /etc/vsftpd/ftpusers 
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

在采用本地用户模式登陆FTP服务器后,默认访问的是该用户的家目录,该目录的默认所有者,所属组都是该用户自己。

[root@client ~]# ftp 192.168.85.129
Connected to 192.168.85.129 (192.168.85.129).
220 (vsFTPd 3.0.2)
Name (192.168.85.129:root): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir dir1
257 "/home/user1/dir1" created

3.虚拟用户模式

这是三种模式中最安全的一种认证模式,需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,这些账户信息在服务器系统中实际上是不存在的,仅仅是为了FTP服务程序进行认证使用,所以即使黑客破解了账户信息也无法登陆控制服务器。

主要步骤:
1.创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码(db_load命令);
2.创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户;
3.建立用于支持虚拟用户的PAM文件;
4.通过pam_service_name参数将PAM认证文件的名称修改为vsftpd.vu;
5.为虚拟用户设置不同的权限;
6.设置SELinux域允许策略,然后使用虚拟用户模式登陆FTP服务器。

配置过程:

[root@server vsftpd]# vim vuser.list
[root@server vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[root@server vsftpd]# file vuser.db 
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
[root@server vsftpd]# chmod 600 vuser.db 
[root@server vsftpd]# rm -rf vuser.list 
[root@server vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@server vsftpd]# ls -ld /var/ftproot/
drwx------. 2 virtual virtual 62 Jan 23 16:15 /var/ftproot/
[root@server vsftpd]# chmod -Rf 755 /var/ftproot/
[root@server vsftpd]# cd
[root@server ~]# vim /etc/pam.d/vsftpd.vu
[root@server ~]# vim /etc/vsftpd/vsftpd.conf
[root@server ~]# mkdir /etc/vsftpd/vusers_dir/
[root@server ~]# cd /etc/vsftpd/vusers_dir/
[root@server vusers_dir]# touch xiaobai
[root@server vusers_dir]# touch xiaohong
[root@server vusers_dir]# vim xiaobai
[root@server vusers_dir]# vim /etc/vsftpd/vsftpd.conf 
[root@server vusers_dir]# systemctl restart vsftpd
[root@server vusers_dir]# systemctl enable vsftpd
[root@server vusers_dir]# getsebool -a |grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off

测试结果

[root@client ~]# ftp 192.168.85.129
Connected to 192.168.85.129 (192.168.85.129).
220 (vsFTPd 3.0.2)
Name (192.168.85.129:root): xiaohong
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir testfile
550 Permission denied.
ftp> exit
221 Goodbye.
[root@client ~]# ftp 192.168.85.129
Connected to 192.168.85.129 (192.168.85.129).
220 (vsFTPd 3.0.2)
Name (192.168.85.129:root): xiaobai
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir testfile
257 "/testfile" created
ftp> rmdir testfile
250 Remove directory operation successful.
ftp> exit
221 Goodbye.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值