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

vsftpd简介及搭建配置

151次阅读
没有评论

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

一、简介

FTP(文件传输协议)全称是:Very Secure FTP Server。Vsftpd 是 linux 类操作系统上运行的 ftp 服务器软件。

vsftp 提供三种登陆方式:1. 匿名登录  2. 本地用户登录  3. 虚拟用户登录

vsftpd 的特点:1. 较高的安全性需求    2. 带宽的限制    3. 创建支持虚拟用户    4. 支持 IPV6    5. 中等偏上的性能    6. 可分配虚拟 IP    7. 高速

Ftp 会话时采用了两种通道:

控制通道:与 Ftp 服务器进行沟通的通道,链接 Ftp 发送 ftp 指令都是通过控制通道来完成的。

数据通道:数据通道和 Ftp 服务器进行文件传输或则列表的通道

二、工作原理

Ftp 协议中控制连接均是由客户端发起,而数据连接有两种工作方式:Port 和 Pasv 方式

Port 模式(主动模式)–> 默认

Ftp 客户端首先和 Ftp server 的 tcp 21 端口建立连接,通过这个通道发送命令,客户端要接受数据的时候在这个通道上发送 Port 命令,Port 命令包含了客户端用什么端口(一个大于 1024 的端口)接受数据,在传送数据的时候,服务器端通过自己的 TCP 20 端口发送数据。这个时候数据连接由 server 向 client 建立一个连接。

Port 交互流程:

client 端:client 链接 server 的 21 端口,并发送用户名密码和一个随机在 1024 上的端口及 port 命令给 server,表明采用主动模式,并开放那个随机的端口。

server 端:server 收到 client 发来的 Port 主动模式命令与端口后,会通过自己的 20 端口与 client 那个随机的端口连接后,进行数据传输。

Pasv 模式(被动方式)

建立控制通道和 Port 模式类似,当客户端通过这个通道发送 Pasv 命令的时候,Ftp server 打开了一个位于 1024 和 5000 之间的随机端口并且通知客户端在这个端口上进行传输数据请求,然后 Ftp server 将通过这个端口进行数据传输。这个时候数据连接由 client 向 server 建立连接。

Pasv 交互流程

Clietn:client 连接 server 的 21 号端口,发送用户名密码及 pasv 命令给 server,表明采用被动模式。

server:server 收到 client 发来的 pasv 被动模式命令之后,把随机开放在 1024 上的端口告诉 client,client 再用自己的 20 端口与 server 的那个随机端口进行连接后进行数据传输。

如果从 C / S 模型这个角度来说,PORT 对于服务器来说是 OUTBOUND,而 PASV 模式对于服务器是 INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,这一点非常关键,如果设置错了,那么客户将无法连接。

三、安装 vsftpd 及相关软件

yum -y install vsftpd*  pam*  db4*

vsftpd:ftp 软件      pam:认证模块      DB4:支持文件数据库

四、vsftpd 的用户管理:

  FTP 服务器对用户的管理,在默认的情况下是根据“/etc/passwd 系统用户配置文件”及“/etc/group 系统用户组配置文件”来进行配置。

  在 FTP 服务器中,匿名用户的用户名和密码都是 ftp;这个用户可以在您的操作系统中的 /etc/passwd 中能找得到;如:

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

在 ftp 用户这行中,我们看到七个字段,每个字段写字段之间用: 号分割;

1.ftp 是用户名

2.x 是密码字段,隐藏的

3.14 是用户的 UID 字段,可以自己来设定,不要和其它用户的 UID 相同,否则会造成系统安全问题;

4.50 用用户组的 GID,可以自己设定,不要和其它用户组共用 FTP 的 GID,否则会造成系统全全问题;

5.FTP User 是用户说明字段

6./var/ftp 是 ftp 用户的家目录,可以自己来定义

7./sbin/nologin 这是用户登录 SHELL,这个也是可以定义的,/sbin/nologin 表示不能登录系统;系统虚拟帐号(也被称为伪用户)一般都是这么设置。比如我们把 ftp 用户的 /sbin/nologin 改为 /bin/bash,这样 ftp 用户通过本地或者远程工具 ssh 或 telnet 以真实用户身份登录到系统。这样做对系统来说是不安全的;如果您认为一个用户没有太大的必要登录到系统,就可以只给他 FTP 帐号的权限,也就是说只给他 FTP 的权限,而不要把他的 SHELL 设置成 /bin/bash 等

匿名用户的属组:/etc/group

ftp:x:50:

第一个字段为:ftp: 用户组、第二个字段为:x: 密码段、第三个字段为:50:GID

可以根据对比用户配置文件以及用户组配置文件中的 UID 得知 是否为隶属关系。

五、vsftpd 的配置

)因为 vsftpd 默认的宿主用户是 root,不符合安全性要求,所以将新建立的 vsftpd 服务的宿主用户的 shell 改为“/sbin/nologin 意思是禁止登录系统”:useradd vsftpd -s /sbin/nologin

2.)建立 vsftpd 虚拟宿主用户:useradd virtusers  -s /sbin/nologin

此次主要介绍虚拟用户,顾名思义虚拟用户在系统中是不纯在的,它们集体寄托于方才创建的“virtusers”用户,那么这个用户就相当于一个虚拟用户组了,因为这个用户的权限将影响到后续讲到的虚拟用户。

3.)调整 vsftpd 的配置文件(编辑所有的配置文件前最好养成备份的习惯)

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.backup.conf

vim /etc/vsftpd/vsftpd.conf

# 设置为 NO 代表不允许匿名
anonymous_enable=YES
 
# 设定本地用户可以访问,主要是虚拟宿主用户,如果设为 NO 那么所欲虚拟用户将无法访问。
local_enable=YES
 
# 可以进行写的操作
write_enable=YES
 
# 设定上传文件的权限掩码
local_umask=022
 
# 禁止匿名用户上传
anon_upload_enable=NO
 
# 禁止匿名用户建立目录
anon_mkdir_write_enable=NO
 
# 设定开启目录标语功能
dirmessage_enable=YES
 
# 设定开启日志记录功能
xferlog_enable=YES
 
# 设定端口 20 进行数据连接
connect_from_port_20=YES
 
# 设定禁止上传文件更改宿主
chown_uploads=NO
 
# 设定 vsftpd 服务日志保存路劲。注意:改文件默认不纯在,需手动 touch,且由于这里更改了 vsftpd 服务的宿主用户为手动建立的 vsftpd,则必
须注意给予该用户对日志的读取权限否则服务启动失败。
xferlog_file=/var/log/vsftpd.log
 
# 设定日志使用标准的记录格式
xferlog_std_format=YES
 
# 设定空闲链接超时时间,这里使用默认 / 秒。
#idle_session_timeout=600
 
# 设定最大连接传输时间,这里使用默认,将具体数值留给每个用户具体制定,默认 120/ 秒
data_connection_timeout=3600
 
# 设定支撑 vsftpd 服务的宿主用户为手动建立的 vsftpd 用户。注意:一旦更改宿主用户,需一起与该服务相关的读写文件的读写赋权问题.
nopriv_user=vsftpd
 
# 设定支持异步传输的功能
#async_abor_enable=YES
 
# 设置 vsftpd 的登陆标语
ftpd_banner=hello 欢迎登陆
 
# 禁止用户登出自己的 ftp 主目录
chroot_list_enable=NO
 
# 禁止用户登陆 ftp 后使用 ls -R 命令。该命令会对服务器性能造成巨大开销,如果该项运行当多个用户使用该命令会对服务器造成威胁。
ls_recurse_enable=NO
 
# 设定 vsftpd 服务工作在 standalone 模式下。所谓 standalone 模式就是该服务拥有自己的守护进程,在 ps - A 可以看出 vsftpd 的守护进程名。如果
不想工作在 standalone 模式下,可以选择 SuperDaemon 模式,注释掉即可,在该模式下 vsftpd 将没有自己的守护进程,而是由超级守护进程 Xinetd 全权代理,> 与此同时,vsftpd 服务的许多功能,将得不到实现。
listen=YES
 
# 设定 userlist_file 中的用户将不能使用 ftp
userlist_enable=YES
 
 
# 设定 pam 服务下的 vsftpd 验证配置文件名。因此,PAM 验证将参考 /etc/pam.d/ 下的 vsftpd 文件配置。
pam_service_name=vsftpd
 
# 设定支持 TCPwrappers
tcp_wrappers=YES
 
################################################# 以下是关于虚拟用户支持的重要配置项目,默认.conf 配置文件中是不包含这些项目的,需手动添加。
# 启用虚拟用户功能
guest_enable=YES
 
# 指定虚拟的宿主用户
guest_username=virtusers
 
# 设定虚拟用户的权限符合他们的宿主用户
virtual_use_local_privs=YES
 
# 设定虚拟用户个人 vsftp 的配置文件存放路劲。这个被指定的目录里,将被存放每个虚拟用户个性的配置文件,注意的地方是:配置文件名必须
和虚拟用户名相同。
user_config_dir=/etc/vsftpd/vconf
 
# 禁止反向域名解析,若是没有添加这个参数可能会出现用户登陆较慢,或则客户链接不上 ftp 的现象
reverse_lookup_enable=NO

4.)建立 vsftpd 的日志文件,并更改属主为 vsftpd 的服务宿主用户

touch /var/log/vsftpd.log

chown vsftpd.vsftpd /var/log/vsftpd.log

六、配置虚拟用户

1.)建立虚拟用户配置文件的存放路径

mkdir /etc/vsftpd/vconf/

2.)建立一个虚拟用户名单文件,用来记录虚拟用户的账号和密码, 格式为:一行用户名,一行密码。

vim /opt/vsftp/passwd

test
123456
test1
654321

3.)生成虚拟用户数据文件

db_load -T -t hash -f  /opt/vsftp/passwd  /opt/vsftp/passwd.db

需要注意的是,以后对虚拟用户的增删操作完之后需要再次执行上述命令,使其生成新的数据文件。

七、设置 PAM 验证文件,并制定虚拟用户数据库文件进行读取

对原验证文件备份后进行更改:cp /etc/pam.d/vsftpd  /etc/pam.d/vsftpd.backup

cat /etc/pam.d/vsftpd

#%PAM-1.0
#####32 位系统配置
#auth    sufficient      /lib/security/pam_userdb.so    db=/etc/vsftpd/xnpasswd
#account sufficient      /lib/security/pam_userdb.so    db=/etc/vsftpd/xnpasswd
#####64 位系统配置
auth    sufficient      /lib64/security/pam_userdb.so    db=/opt/vsftp/passwd
account sufficient      /lib64/security/pam_userdb.so    db=/opt/vsftp/passwd

# 以上两条是手动添加的,内容是对虚拟用户的安全和帐户权限进行验证。
# 这里的 auth 是指对用户的用户名口令进行验证。
# 这里的 accout 是指对用户的帐户有哪些权限哪些限制进行验证。
auth      required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth      required    pam_shells.so
auth      include      system-auth
account    include      system-auth
session    include      system-auth
session    required    pam_loginuid.so

八、虚拟用户的配置

1.)定制虚拟用户模板配置文件(虚拟用户的配置文件名需要和虚拟用户一致,因为在登录 ftp 时输入相应的用户名之后会根据名称去加载相应的配置文件)

vim /etc/vsftpd/vconf/test

local_root=/opt/vsftp/file
# 指定虚拟用户仓库的具路径
anonymous_enable=NO
# 设定不允许匿名访问
write_enable=YES
# 允许写的操作
local_umask=022
# 上传文件的权限掩码
anon_upload_enable=NO
# 不允许匿名上传
anon_mkdir_write_enable=NO
# 不允许匿名用户建立目录
idle_session_timeout=300
# 设定空闲链接超时时间
data_connection_timeout=1000
# 设定单次传输最大时间
max_clients=0
# 设定并发客户端的访问数量
max_per_ip=0
# 设定客户端的最大线程数
local_max_rate=0
# 设定用户的最大传输速率,单位 b /s

2.)建立虚拟用户的仓库目录并更改相应属主 / 组且赋予相应权限

mkdir -p /opt/vsftpd/file

chown virtusers:virtusers /opt/vsftpd/file

chmod 755 /opt/vsftpd/file

3.)随便建立个文件方便后续检测是否安装成功:touch  /opt/vsftpd/file/abc

九、启动方式

ftp 守护进程的启动方式有两种,standalone 和(xinetd/inetd)

1.)xinetd 模式:大多数较新的系统采用的是 xinetd 超级服务守护进程,它是 inetd(因特网守护进程)的替代品。在 linux 中一些不主要的服务,并没有作为单独的守护进程在开机时启动,而是将他们的监听端口交给一个独立的进程 xinetd 集中监听,当收到客户端的请求之后,xinted 进程就临时启动相应服务器并把端口移交给相应的服务,客户端断开之后,相应的服务进程结束,xinetd 继续监听。

有的系统可能会需要安装 xinetd:yum install xinetd

若是在 /etc/xinetd.d/ 中没有 vsftpd 则需要新建,并添加如下内容:

service ftp 
 
{

socket_type = stream
 
wait = no
 
user = root
 
server = /usr/sbin/vsftpd 
 
 
nice = 10
 
disable = no

}

释掉”/etc/vsftpd.conf“中的 listen=YES 之后重启,以 xinetd 启动  /etc/rc.d/init.d/xinetd restart

2.)standalone 模式:运行期间一直驻留在内存中,对接入信号反应较快但是占用了些系统资源,因此常常用于需求较高的服务。

standalone 模式运行 ftp:

此模式便于实现 PAM 验证功能,进入这种模式首先关闭 xinetd 下的 vsftpd,设置”disable=yes“,或则注释掉 /etc/initd.conf 中的相应的行,然后取消 /etc/vsftpd/vsftpd.conf 中 listen=YES 的注释。

启动:service vsftpd restart

十、从其他机器登陆 ftp 进行测试

建议关闭 iptables 与 selinux 进行测试。

# 需要先下载客户端 yum -y install ftp

Name (192.168.1.67:root):test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,1,67,23,40).
150 Here comes the directory listing.
-rwxr-xr-x 2 500 500 4096 May 05 03:53 abc
226 Directory send OK.

可能会出现的错误:

1.)500 OOPS: 错误

有可能是你的 vsftpd.con 配置文件中有不能被实别的命令,还有一种可能是命令的 YES 或 NO 后面有空格

2.)若是提示权限问题,检测配置文件无误后执行:setsebool -P ftp_home_dir=1

vsftpd 对于权限的要求并不严格,对于指定 ftp 的宿主用户 vsftpd 也只是需要有日志文件的权限,其他地方默认即可,而虚拟用户的宿主则需要有相关的虚拟用户仓库路径的权限,且新版本下针对仓库的上级目录貌似不能是 777 权限可以是 755。

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

Linux CentOS 6.5 下搭建 vsftpd ftp 服务器  https://www.linuxidc.com/Linux/2016-07/133319.htm
CentOS 安装 vsftpd-3.0.2 及安全配置  https://www.linuxidc.com/Linux/2016-12/138040.htm
openSUSE 13.2/13.1 下安装配置 FTP 服务器 vsftpd  https://www.linuxidc.com/Linux/2014-12/110070.htm
CentOS7 基于虚拟用户的 vsftpd  https://www.linuxidc.com/Linux/2016-11/137150.htm
Ubuntu 14.04 配置 vsftpd 实现 FTP 服务器 – 通过 FTP 连接 AWS  https://www.linuxidc.com/Linux/2016-08/133933.htm
FTP 协议详解与 vsftpd 在 Linux 上的安装配置 https://www.linuxidc.com/Linux/2016-09/134831.htm
CentOS 6.7 安装 vsftpd 服务器  https://www.linuxidc.com/Linux/2017-04/142612.htm
CentOS 7.3 安装配置 Vsftpd 文件服务器  https://www.linuxidc.com/Linux/2017-06/144886.htm
Vsftpd3.0–FTP 服务器搭建之本地用户篇  https://www.linuxidc.com/Linux/2017-04/142699.htm
CentOS7 基于虚拟用户的 vsftpd  https://www.linuxidc.com/Linux/2016-11/137150.htm
Ubuntu 16.04 下 vsftpd 安装配置实例  https://www.linuxidc.com/Linux/2017-06/144807.htm
CentOS7 搭建 vsftpd 详细教程  https://www.linuxidc.com/Linux/2017-12/149909.htm

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