Vsftpd

Vsftpd 文件传输服务

ftp是典型的C/S结构,由服务端跟客户端两个部分共同实现文件传输功能

一、Ftp工作原理

ftp采用TCP协议的20、21端口与客户端进行通信

  • 20端口:用于建立数据连接并传输文件数据

  • 21端口:用于建立控制连接,并传输ftp控制命令

二、ftp的传输模式

1、主动模式

首先由客户端向服务端的21端口建立ftp控制连接,当需要传送数据时,服务端从 20 端口主动向客户端发起连接。

在主动模式下, FTP客户端从任意端口5150(端口号>1023)发起一个FTP请求, 并携带自己监听的端口号5151(发送的端口号+1=监听端口号);随后服务器返回确认, 然后从服务器本地的20端口主动发起连接请求到客户端的监听端口5151, 最后客户端返回确认。

img

2、被动模式

首先由客户端向服务端的21端口建立ftp控制连接,当需要传送数据时,客户端向服务端的非20端口发送请求并建立连接数据

在被动模式中,命令连接和数据连接都由客户端来发起,如上图所示,客户端用随机命令端口5150向服务器的21命令端口发送一个PASV请求,然后服务器返回数据端口3267,告诉客户端我在哪个端口监听数据连接。然后客户端向服务器的监听端口3268发起数据连接,最后服务器回复确认。

vsftpd默认是被动模式。所以客户端要设置被动模式连接,如果到现在还没连接成功的看客户端有没有设置被动传输模式。

img

三、FTP 常见的服务端及客户端

1、常见的服务端程序

  • IIS、Serv-U
  • wu-ftpd、Proftpd
  • vsftpd(Very Secure FTP Daemon)

2、常见的 FTP 客户端程序

  • ftp 命令
  • CuteFTP、FlashFXP、LeapFTP、Filezilla
  • gftp、kuftp

四、部署 FTP 服务

1、把光盘挂载到/mnt下

mount /dev/cdrom /mnt

2、添加本地yum源

cd /etc/yum.repos.d && mkdir repo.bak
mv * repo.bak
vim  vsftp.repo
[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0

3、安装FTP 服务

yum -y install vsftpd

五、匿名用户访问

1、备份原 ftp 配置文件

cd /etc/vsftpd/
mv vsftpd.conf vsftpd.conf.bak
cat vsftpd.conf.bak |grep -v "^#"|grep -v "^$" > vsftpd.conf

2、修改配置文件

anonymous_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_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=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

image-20210721102519177

3、给予数据根目录写权限

cd /var/ftp
chmod o+w pub

4、启动服务

systemctl start vsftpd
systemctl enable vsftpd

5、ftp://IP可匿名登录访问

image-20210721104350645

image-20210721104441947

六、user_list文件限制用户登录

1、编辑/etc/vsdtpd/user_list文件,把允许登录服务的用户添加进文件

image-20210721105532858

Ps 此 ftpusers 文件中的所有用户都将禁止登陆,不管 user_list 文件中是否出现。

image-20210721105635423

image-20210721111138269

2、添加用户赋予密码

image-20210721105905780

3、编辑配置文件追加以下内容(记得把 anonymous_enable 配置改为 NO)

vim vsftpd.conf
userlist_enable=YES        # 启用 user_list 用户列表文件
userlist_deny=NO           # 不禁用 user_list 列表中用户登陆

4、重启vsftpd服务

systemctl restart vsftpd

5、测试 nlemon 用户不可以登陆访问

image-20210721111253312

6、验证 ylemon 用户可以登陆访问

image-20210721111328263

七、虚拟用户登录(常用)

vsftpd提供了三种认证方式,分别是:匿名用户认证、本地用户认证和虚拟用户认证。从安全的角度来说,虚拟用户最安全也是最常用的认证方式,下面开始配置虚拟用户。

1、创建vusers.list文件

vim /etc/vsftpd/vusers.list
tom
123123
jerry
456456

2、db_load 创建用户的数据库文件

cd /etc/vsftpd/
db_load -T -t hash -f vusers.list vusers.db
chmod 600 /etc/vsftpd/vusers.*

3、添加映射的本地用户

useradd -d /var/ftproot -s /sbin/nologin virtual
chmod 755 /var/ftproot/

4、添加编辑文件vsftpd.vu

vim /etc/pam.d/vsftpd.vu
#%PAM-1.0
# 此句用于检查用户密码,数据库文件不要写后缀.db
auth     required  /lib64/security/pam_userdb.so  db=/etc/vsftpd/vusers

# 此句用于检查用户是否在有效期内,数据库支持虚拟用户的PAM认证文件。
account  required  /lib64/security/pam_userdb.so  db=/etc/vsftpd/vusers

5、编辑配置文件

vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
allow_writeable_chroot=YES               # 必须,如果不加入此配置则无法登陆
local_enable=YES                         # 必须,本地系统用户访问
write_enable=YES                         # 必须,任何形式的写入方式
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
tcp_wrappers=YES
anon_umask=022                           # 必须,虚拟用户上传的默认权限掩码值
local_umask=022                          # 必须,本地用户上传的默认权限掩码值
guest_enable=YES                         # 必须,开启虚拟用户模式
guest_username=virtual                   # 必须,指定虚拟用户账号
pam_service_name=vsftpd.vu               # 必须,指定pam文件
user_config_dir=/etc/vsftpd/vusers_dir   # 必须,指定虚拟用户的权限配置目录

6、创建vusers_dir目录下的虚拟用户

mkdir /etc/vsftpd/vusers_dir
touch /etc/vsftpd/vusers_dir/tom
touch /etc/vsftpd/vusers_dir/jerry

7、为虚拟用户设置不同的权限

tom 权限设置

vim /etc/vsftpd/vusers_dir/tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

jerry 权限设置

# 如果不进行权限设置的话,默认该用户只有 登录、浏览、下载 的权限。

8、验证虚拟用户权限

  • 使用Tom虚拟用户登录服务,Tom可以登录、浏览、下载、上传、创建、删除
  • Jerry用户只能登录、浏览、下载、但无法上传

八、Vsftpd的常用配置项

1、修改 vsftpd 服务的监听地址、端口

image-20210721175156029

2、允许使用 FTP 服务器的被动模式

image-20210721175244990

3、限制 FTP 连接的并发数、传输速率

image-20210721175304895

posted @ 2023-05-11 15:33  ArMinLi  阅读(79)  评论(0编辑  收藏  举报