阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux下vsftp虚拟用户配置与主动模式被动模式

299次阅读
没有评论

共计 5485 个字符,预计需要花费 14 分钟才能阅读完成。

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

本文所有配置是在 CentOS 5.8-64 位系统上进行,配置的是vsftp 虚拟用户模式,虚拟用户的特点是只能访问服务器为其提供的 FTP 服务,而不能访问系统的其它资源。所以,如果想让用户对 FTP 服务器站内具有写权限,但又不允许访问系统其它资源,可以使用虚拟用户来提高系统的安全性。

VSFTP 安装与配置

安装

使用 yum 命令来安装 vsftpd 和 DB 软件包:

yum -y install vsftpd db4-utils

建立口令库文件

建立虚拟用户口令库文件,使用文本编辑器创建一个文本文件,第一行写:用户名;第二行写:密码,依此类推:

vim logins.txt
sunkai  <-- 虚拟用户名
123456  <-- 密码

生成认证文件

使用 db_load 命令生成 vsftpd 的认证文件,将用户信息文件转换为数据库并使用 hash 加密:

db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db

赋权:

chmod 600 /etc/vsftpd/vsftpd_login.db

数据库生成后最好清空该文本文件,并在安全的地方记录用户名和密码:

rm -f logins.txt

db_load 参数解释:

  • 选项 -T 允许应用程序能够将文本文件转译载入进数据库。由于我们之后是将虚拟用户的信息以文件方式存储在文件里的,为了让 Vsftpd 这个应用程序能够通过文本来载入用户数据,必须要使用这个选项。如果指定了选项-T,那么一定要追跟子选项-t
  • 子选项 -t,追加在在-T 选项后,用来指定转译载入的数据库类型。扩展介绍下,-t可以指定的数据类型有 Btree、Hash、Queue 和 Recon 数据库。
  • 选项 -f 的参数是包含用户名和密码的文本文件,文件的内容是:奇数行用户名、偶数行密码。

建立 PAM 配置文件

建立虚拟用户所需的 PAM 配置文件,目的是对虚拟用户的安全和账户权限进行验证。

  • auth是对用户密码进行验证。
  • accout是对用户的权限进行验证。
vim /etc/pam.d/vsftpd

加入下面内容,其他行全部注释:auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

64 位系统:auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

创建账户和设置权限

创建虚拟用户

创建一个不能登录系统的用户 ftpuser 用于映射虚拟用户,用户名 ftpuser 可以随意设置:

useradd -d /home/ftpsite -s /sbin/nologin ftpuser
chmod 700 /home/ftpsite/

vsftpd.conf 中添加配置项:

guest_enable=YES
guest_username=ftpuser

guest_enable 激活(YES)时,guest_username是定义了虚拟用户在系统中的用户名。

创建宿主目录,也可以指定系统其他目录:

mkdir /home/ftpsite/sunkai

设置权限

对不同虚拟用户设置不同权限,创建虚拟用户配置文件存放位置:

mkdir /etc/vsftpd/vsftpd_user_conf
vim /etc/vsftpd/vsftpd_user_conf/sunkai    #建立用户单独配置文件,文件名就是虚拟用户名。local_root=/home/ftpsite/sunkai    #这里的目录可以是系统中其他目录,根据用途定义。file_open_mode=0777
write_enable=YES
virtual_use_local_privs=YES      #配置虚拟用户具有写权限(上传、下载、删除、重命名)

vsftpd.conf 添加配置项:

user_config_dir=/etc/vsftpd/vsftpd_user_conf

禁锢 FTP 用户在宿主目录

将需要禁锢的用户名写入 chroot_list 文件,将用户固定在 local_root 定义的目录内。当 chroot_list_enable 激活(YES)时,在 chroot_list_file 指定文件中的用户将会禁锢在宿主目录中。

vim /etc/vsftpd/chroot_list
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list   #每一行写一个用户名。

其他权限配置方案

虚拟用户和本地用户有相同的权限
virtual_use_local_privs=YES

虚拟用户和匿名用户有相同的权限,默认是 NO
virtual_use_local_privs=NO

虚拟用户具有写权限(上传、下载、删除、重命名)virtual_use_local_privs=YES
write_enable=YES

虚拟用户不能浏览目录,只能上传文件,无其他权限
virtual_use_local_privs=NO
write_enable=YES
anon_world_readable_only=YES
anon_upload_enable=YES

虚拟用户只能下载文件,无其他权限
virtual_use_local_privs=NO
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=NO

虚拟用户只能上传和下载文件,无其他权限
virtual_use_local_privs=NO
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES

虚拟用户只能下载文件和创建文件夹,无其他权限
virtual_use_local_privs=NO
write_enable=YES
anon_world_readable_only=NO
anon_mkdir_write_enable=YES

虚拟用户只能下载、删除和重命名文件,无其他权限
virtual_use_local_privs=NO
write_enable=YES
anon_world_readable_only=NO
anon_other_write_enable=YES

FTP 的主动端口与被动端口配置

大多数的 TCP 服务是使用单个的连接,一般是客户端向服务器的一个已知端口发起连接,然后使用这个连接进行通讯。但 FTP 协议却是例外,它使用双向的多个连接,而且使用的端口很难预计。

FTP 协议连接和端口

  • 一个控制连接(control connection):用于传递客户端和服务器端之间的命令响应。使用 TCP 21 端口,生存期是整个 FTP 会话时间。
  • N 个数据连接(data connection):用于传输数据,这种连接是在数据传输时建立的,一旦数据传输完毕就关闭,每次使用的端口也不一定相同。而且,这种数据 连接既可能是客户端发起的,也可能是服务器端发起的。
  • FTP 协议使用一个标准的端口 20 作为 ftp-data 端口,但是这个端口只用于连接的源地址是服务器端的情况,在这个端口上根本就没有监听进程。

主动与被动模式

FTP 的数据连接和控制连接一般是相反方向,即服务器向客户端发起一个用于数据传输的连接。连接的端口是由服务器端和客户端协商确定的,这就是 vsftpd 的主动模式(port  mod)。FTP 协议的这个特征对 iptables 防火墙和 NAT 的配置增加了很多困难。在 FTP 被动模式 (passive mod) 下,数据连接是由客户程序发起的,和主动模式相反。

选择模式的原则

  • 客户端 没有防火墙时,用主动模式连接即可。
  • 服务器端 没有防火墙时,用被动模式即可。
  • 双方 都有防火墙时,vsftpd 设置被动端口范围,服务器端防火墙打开被动端口范围,客户端用被动模式连接即可。

是否采取被动模式取决于客户程序:

  • 在 ftp 命令行中使用 passive 命令就可以关闭 / 打开被动模式。
  • 在 Windows 命令行模式下使用 ftp 命令连接服务器,用的是主动模式。
  • 在浏览器方式下连接 ftp 服务器,可以修改访问使用模式:
    Linux 下 vsftp 虚拟用户配置与主动模式被动模式
  • 用 FileZilla Client 软件连接服务器,在“编辑”-“设置”-“连接”选项内设置使用模式:
    Linux 下 vsftp 虚拟用户配置与主动模式被动模式

iptables 中配置 vsftp 的方法

使用主动模式

配置 iptables 防火墙:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 20,21 -m state --state NEW -j ACCEPT

使用被动模式

方法 1

加载模块ip_conntrack_ftp,优点:不影响 ftp 的配置,缺点:客户端会感觉到连接有些延迟。

  • /etc/sysconfig/iptables-config 中添加:IPTABLES_MODULES="ip_conntrack_ftp"
  • 加载模块:/sbin/modprobe ip_conntrack_ftp
  • 开机启动,在 /etc/rc.local 添加:/sbin/modprobe ip_conntrack_ftp

注意:如果需要修改 FTP 21 端口为 2121:

  • vsftpd.conf 中增加:listen_port=2121
  • 加载模块:/sbin/modprobe ip_conntrack_ftp ports=2121

最后需要在 iptables 开放 21 端口:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
方法 2

在 vsftpd 配置文件中配置被动端口,优点:对连接速度没有影响。缺点:限制了客户端并发连接的数量。

/etc/vsftpd/vsftpd.conf 中添加:

pasv_enable=YES
pasv_min_port=3000
pasv_max_port=3005

在 iptables 中开放这段端口:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 3000:3005 -j ACCEPT

解除 SELinux 阻止

如果开启了 SELinux,执行以下命令:

setsebool -P ftpd_disable_trans 1
service vsftpd restart

更多 Vsftpd 相关教程见以下内容

Linux CentOS 6.5 下搭建 vsftpd ftp 服务器  http://www.linuxidc.com/Linux/2016-07/133319.htm

CentOS 安装 vsftpd-3.0.2 及安全配置  http://www.linuxidc.com/Linux/2016-12/138040.htm

openSUSE 13.2/13.1 下安装配置 FTP 服务器 vsftpd  http://www.linuxidc.com/Linux/2014-12/110070.htm

CentOS7 基于虚拟用户的 vsftpd  http://www.linuxidc.com/Linux/2016-11/137150.htm

Ubuntu 14.04 配置 vsftpd 实现 FTP 服务器 – 通过 FTP 连接 AWS  http://www.linuxidc.com/Linux/2016-08/133933.htm

FTP 协议详解与 vsftpd 在 Linux 上的安装配置 http://www.linuxidc.com/Linux/2016-09/134831.htm

CentOS 6.7 安装 vsftpd 服务器  http://www.linuxidc.com/Linux/2017-04/142612.htm

CentOS 7.3 安装配置 Vsftpd 文件服务器  http://www.linuxidc.com/Linux/2017-06/144886.htm

Vsftpd3.0–FTP 服务器搭建之本地用户篇  http://www.linuxidc.com/Linux/2017-04/142699.htm

CentOS7 基于虚拟用户的 vsftpd  http://www.linuxidc.com/Linux/2016-11/137150.htm

Ubuntu 16.04 下 vsftpd 安装配置实例  http://www.linuxidc.com/Linux/2017-06/144807.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149455.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5485字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中