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

Linux FTP服务器之 vsftpd配置使用

152次阅读
没有评论

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

What is FTP

大伙都知道 FTP 就是文件传输协议,File Transfer Protocol, 此协议诞生于互联网发展初期,历史悠久,主要用于文件共享,工作在 TCP/IP 应用层。

How it works

FTP 主要工作在两种模式,一种是主动模式,也有人叫标准模式 Standard; 另一种是被动模式,也叫 pasv 模式(passive),在这里所言主动与被动皆相对于服务器而言。

在主动模式下,客户端首先随机启动一个端口如 2021 向服务器 TCP21 端口发起连接, 此过程就是我们常说的 tcp 三次握手,此过程即是 FTP 的控制连接过程,一旦连接建立除非服务端定义的超时时间或其他的连接策略,否则连接会一直保持下去。之后客户端根据需求向服务端发送相应的命令请求,服务端收到命令请求会根据本地的配置来验证客户端是否有相应的权限,如果有则通过 20 端口向客户端 2022 端口返回相应数据,如果 2022 端口非空闲则发送给 2023,以此类推,直到找到空闲的端口为止;如果经查此人无此权限,则返回给相应的错误信息。

下图为我用 Dia 画的一个简单示意图,真的是不画图不知道,一画才顿感自己的知识掌握的程度是如此令人汗颜,愧哉愧哉,看着马哥讲解 PPT 上信手拈来,如此轻松,真的到自己来有点无从下手之感,归根结底还是知识掌握不扎实,动手太少,书到用时方恨少,不能做到拳不离手,曲不离口又何来如马哥般的烂熟于心?向马可致敬,为自己之前的眼高手低做深刻检讨,从现在开始,坚持博客总结,小伙伴们,能把自己的知识倒给别人跟自己会使用真是不是一个境界。子曰:学而时习之,不变乐乎;有朋自远方来,不亦悦乎;人不知而不愠,不亦君子乎?扯远了。。。言归正传。。。

Linux FTP 服务器之 vsftpd 配置使用

在主动模式下,有个缺陷,如果客户端开启了防火墙,未放行外来不明端口那么就悲剧了,连接建立却无法进行数据通信。于是乎被动模式就此诞生了:此模式下,客户端与服务端建立控制连接后,由服务端主动向客户端发出一个通知包告之自己数据服务工作在哪个端口,等待客户端有数据请求时连接上来。通常是这样的格式,e.g 100,56 客户端计算出 100*256+56=25656 然后随机打开一个端口去连接服务器 25656 端口建立数据连接通道。

 

Linux FTP 服务器之 vsftpd 配置使用

此模式下仍旧会有问题产生,因为众所周知,通常情况下为了安全考虑,服务器一般是处于防火墙内的,而每次服务器通知给客户端的数据连接端口都是随机产生的,这样一来服务端的防火墙开放的端口就不好控制了,解决这个问题就需要防火墙的连接跟踪功能了,防火墙可以自动追踪到和这个连接相关的连接,打上 related 标签,这样只要是相关的连接,防火墙都会信任放行了,关于这个会在以后 iptables 应用中详细解释。

用户类型

FTP 服务器支持的用户账号类型主要有三种

1. 匿名用户 anonymous

2. 系统用户:提供服务的系统自身存在的用户

3. 虚拟用户

不过其实不管是哪种类型的用户,事实上最终都是系统用户,匿名用户和虚拟用户其实是映射到系统的一个用户上来,以这个用户的身份来访问系统共享出来的资源的。

安装配置

提供 ftp 服务的软件有很多,这里以红帽提供的 vsftpd 为例,vsftpd 是 Very Secured ftp Deamon 的缩写,由此可见安全是他的强项。

安装比较简单,我们直接用 yum 安装就好了,软件很小

yum –y install vsftpd

安装完成可以用 rpm –ql vsftpd 查看都生成了哪些文件

[root@ha1 ~]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd.log
/etc/pam.d/vsftpd
/etc/rc.d/init.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd
/usr/share/doc/vsftpd-2.0.5
/usr/share/doc/vsftpd-2.0.5/AUDIT
/usr/share/doc/vsftpd-2.0.5/BENCHMARKS

我们可以看到 vsftpd 的配置文件是 /etc/vsftpd/vsftpd.conf, 下面对配置文件的常用选项作简单说明:

anonymous_enable=yes|no 是否启用匿名用户

write_enable=yes|no 系统用户是否可以上传文件

anon_upload_enable=yes|no 是否允许匿名用户上传文件,此功能必须要先让对应的文件夹 ftp 用户具有 rwx 权限,由于 vsftpd 文件权限受 SELinux 控制,可用 setfacl –m u:ftp:rwx /path/to/dir 给权限,不过一般匿名用户不会给这么大的权限

anon_mkdir_enable=yes|no 是否允许匿名用户创建文件夹

anon_other_write_enable=yes|no 是否允许匿名用户删除文件

dirmessage_enable=yes|no 此选项启用,可以对应目录下创建一个.message 文件,里面定义想要显示的内容,当用户切换到此目录时,屏幕会打印出.message 内定义好的内容

local_enable=yes|no 是否允许本地系统用户通过 ftp 登陆

chroot_local_user=yes 禁锢所有本地系统用户在其家目录, 如果需要禁锢部分用户可分别定义

chroot_local_enable=no|yes 此项若为 yes 则自定义的 chroot_list 中的用户是不被禁锢的, 如果是 no 则定义的用户是被禁锢的

chroot_list_enable=yes

chroot_list_file=/etc/vsftpd/chroot_list

xferlog_enable=yes|no

xferlog_file=/path/to/file

listen=YES 服务使用独立守护进程, 如果为 NO 则为瞬时守护进程, 需要在 /etc/xinet.d/ 下为其提供相应格式的脚本或配置文件

pam_service_name=vsftpd pam 认证的配置文件, 本例表示 /etc/pam.d/vsftpd , 用户列表文件 /etc/vsftpd/ftpuser

userlist_enable=YES 用户列表文件 /etc/vsftpd/user_list

userlist_deny=YES|NO 如果此项为 Yes 则 user_list 中定义的用户不可以登陆 ftp, 反之亦然.

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2013-11/92211p2.htm

推荐阅读

玩转 vsftpd 服务器的四大高级配置:http://www.linuxidc.com/Linux/2013-09/90565.htm

vsFTPd 配置教程:http://www.linuxidc.com/Linux/2013-09/90562.htm

Ubuntu 实用简单的 FTP 架设 http://www.linuxidc.com/Linux/2012-02/55346.htm

Ubuntu 上架设 FTP 服务器和 Apache 服务器 http://www.linuxidc.com/Linux/2011-04/35295.htm

Ubuntu 13.04 安装 LAMP\vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm

RHEL6 平台下 SeLinux 和 vsftpd 的匿名上传的简单案例 http://www.linuxidc.com/Linux/2013-04/82300.htm

Linux 系统 vsftpd 源码安装 http://www.linuxidc.com/Linux/2013-03/81475.htm

vsftpd 的安全配置案例分析 http://www.linuxidc.com/Linux/2012-12/76501.htm

配置 FTP 支持 SSL 加密传输

我们知道 ftp 在整个数据传输过程中都是明文的, 就连认证过程也不例外, 这样势必就会留下安全隐患, 一般我们实现 ftp 加密传输有两种方式, 一种是 openssl 自带的子系统 sftp 是基于 ssh 方式实现 ftp 的加密传输, 这个系统安装完成就已经自带了, 这里介绍另一种通过自签证书方式实现:

首先要配置服务器为证书服务器并颁发证书(这里简单说下过程, 以后会有详细博文细说自签证书原理及生成过程)

1. 切换到 CA 目录并创建所需目录和文件

cd /etc/pki/CA

mkdir certs newcerts crl

touch index.txt

echo 01 > serial

2. 生成服务器私钥

[root@ha1 CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)

Generating RSA private key, 2048 bit long modulus

………………………………………+++

…………………………………………………+++

e is 65537 (0x10001)

3. 生成服务器自签证书

[root@ha1 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ‘.’, the field will be left blank.

—–

Country Name (2 letter code) [GB]:CN

State or Province Name (full name) [Berkshire]:SH

Locality Name (eg, city) [Newbury]:SH

Organization Name (eg, company) [My Company Ltd]:linux

Organizational Unit Name (eg, section) []:Tech

Common Name (eg, your name or your server’s hostname) []:linux.org

Email Address []:

4. 切换到 vsftpd 目录创建 ssl 证书存放目录

[root@ha1 CA]# mkdir /etc/vsftpd/ssl

[root@ha1 CA]# cd /etc/vsftpd/ssl

5. 生成 ftp 服务器私钥

[root@ha1 ssl]# (umask 077;openssl genrsa -out vsftpd.key 2048)

Generating RSA private key, 2048 bit long modulus

……………………………………………………………………+++

…………………………………….+++

e is 65537 (0x10001)

6. 生成证书申请

[root@ha1 ssl]# openssl req -new -key vsftpd.key -out vsftpd.csr

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ‘.’, the field will be left blank.

—–

Country Name (2 letter code) [GB]:CN

State or Province Name (full name) [Berkshire]:SH

Locality Name (eg, city) [Newbury]:SH

Organization Name (eg, company) [My Company Ltd]:linux

Organizational Unit Name (eg, section) []:Tech

Common Name (eg, your name or your server’s hostname) []:ftp.linux.org

Email Address []:

Please enter the following ‘extra’ attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

7. 申请并颁发证书

[root@ha1 ssl]# openssl ca -in vsftpd.csr -out vsftpd.crt

Using configuration from /etc/pki/tls/openssl.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

Serial Number: 1 (0x1)

Validity

Not Before: Oct 28 10:34:34 2013 GMT

Not After : Oct 28 10:34:34 2014 GMT

Subject:

countryName = CN

stateOrProvinceName = SH

organizationName = linux

organizationalUnitName = Tech

commonName = ftp.linux.org

X509v3 extensions:

X509v3 Basic Constraints:

CA:FALSE

Netscape Comment:

OpenSSL Generated Certificate

X509v3 Subject Key Identifier:

B6:78:71:21:4B:B0:F5:28:B5:9E:1C:E4:07:62:31:6D:FB:0C:43:B1

X509v3 Authority Key Identifier:

keyid:92:68:7A:CF:82:BF:8B:A8:73:1A:5B:60:3D:94:6C:8E:77:18:6A:A1

Certificate is to be certified until Oct 28 10:34:34 2014 GMT (365 days)

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

8. 编辑配置文件, 让 vsftpd 支持 ssl

vim /etc/vsftpd/vsftpd.conf

#SSL support

ssl_enable=YES

ssl_sslv3=YES

ssl_sslv2=YES

ssl_tlsv1=YES

allow_anon_ssl=NO 匿名用户不启用 ssl 连接

force_local_data_ssl=YES 强制系统用户登陆时数据传输必须使用 ssl 连接

force_local_logins_ssl=YES 强制系统用户登陆认证必须使用 ssl 连接

rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt

rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key

9. 重启服务使配置生效

service vsftpd restart

下面就可以用客户端来登陆验证一下:

Openstack 是我添加的本地用户, 可以看到我没有使用 ssl 时系统是不让我登陆的.

 

Linux FTP 服务器之 vsftpd 配置使用Linux FTP 服务器之 vsftpd 配置使用

 

现在改用 ssl 方式连接, 可以从下图看到已经成功连接了,第一次连接时会询问是否信任证书,接受就好了,忘记截图了。

Linux FTP 服务器之 vsftpd 配置使用Linux FTP 服务器之 vsftpd 配置使用

当然匿名用户不使用加密连接也是木有问题的:

Linux FTP 服务器之 vsftpd 配置使用Linux FTP 服务器之 vsftpd 配置使用

本人水平有限,有疏忽不对的地方欢迎指正。

What is FTP

大伙都知道 FTP 就是文件传输协议,File Transfer Protocol, 此协议诞生于互联网发展初期,历史悠久,主要用于文件共享,工作在 TCP/IP 应用层。

How it works

FTP 主要工作在两种模式,一种是主动模式,也有人叫标准模式 Standard; 另一种是被动模式,也叫 pasv 模式(passive),在这里所言主动与被动皆相对于服务器而言。

在主动模式下,客户端首先随机启动一个端口如 2021 向服务器 TCP21 端口发起连接, 此过程就是我们常说的 tcp 三次握手,此过程即是 FTP 的控制连接过程,一旦连接建立除非服务端定义的超时时间或其他的连接策略,否则连接会一直保持下去。之后客户端根据需求向服务端发送相应的命令请求,服务端收到命令请求会根据本地的配置来验证客户端是否有相应的权限,如果有则通过 20 端口向客户端 2022 端口返回相应数据,如果 2022 端口非空闲则发送给 2023,以此类推,直到找到空闲的端口为止;如果经查此人无此权限,则返回给相应的错误信息。

下图为我用 Dia 画的一个简单示意图,真的是不画图不知道,一画才顿感自己的知识掌握的程度是如此令人汗颜,愧哉愧哉,看着马哥讲解 PPT 上信手拈来,如此轻松,真的到自己来有点无从下手之感,归根结底还是知识掌握不扎实,动手太少,书到用时方恨少,不能做到拳不离手,曲不离口又何来如马哥般的烂熟于心?向马可致敬,为自己之前的眼高手低做深刻检讨,从现在开始,坚持博客总结,小伙伴们,能把自己的知识倒给别人跟自己会使用真是不是一个境界。子曰:学而时习之,不变乐乎;有朋自远方来,不亦悦乎;人不知而不愠,不亦君子乎?扯远了。。。言归正传。。。

Linux FTP 服务器之 vsftpd 配置使用

在主动模式下,有个缺陷,如果客户端开启了防火墙,未放行外来不明端口那么就悲剧了,连接建立却无法进行数据通信。于是乎被动模式就此诞生了:此模式下,客户端与服务端建立控制连接后,由服务端主动向客户端发出一个通知包告之自己数据服务工作在哪个端口,等待客户端有数据请求时连接上来。通常是这样的格式,e.g 100,56 客户端计算出 100*256+56=25656 然后随机打开一个端口去连接服务器 25656 端口建立数据连接通道。

 

Linux FTP 服务器之 vsftpd 配置使用

此模式下仍旧会有问题产生,因为众所周知,通常情况下为了安全考虑,服务器一般是处于防火墙内的,而每次服务器通知给客户端的数据连接端口都是随机产生的,这样一来服务端的防火墙开放的端口就不好控制了,解决这个问题就需要防火墙的连接跟踪功能了,防火墙可以自动追踪到和这个连接相关的连接,打上 related 标签,这样只要是相关的连接,防火墙都会信任放行了,关于这个会在以后 iptables 应用中详细解释。

用户类型

FTP 服务器支持的用户账号类型主要有三种

1. 匿名用户 anonymous

2. 系统用户:提供服务的系统自身存在的用户

3. 虚拟用户

不过其实不管是哪种类型的用户,事实上最终都是系统用户,匿名用户和虚拟用户其实是映射到系统的一个用户上来,以这个用户的身份来访问系统共享出来的资源的。

安装配置

提供 ftp 服务的软件有很多,这里以红帽提供的 vsftpd 为例,vsftpd 是 Very Secured ftp Deamon 的缩写,由此可见安全是他的强项。

安装比较简单,我们直接用 yum 安装就好了,软件很小

yum –y install vsftpd

安装完成可以用 rpm –ql vsftpd 查看都生成了哪些文件

[root@ha1 ~]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd.log
/etc/pam.d/vsftpd
/etc/rc.d/init.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd
/usr/share/doc/vsftpd-2.0.5
/usr/share/doc/vsftpd-2.0.5/AUDIT
/usr/share/doc/vsftpd-2.0.5/BENCHMARKS

我们可以看到 vsftpd 的配置文件是 /etc/vsftpd/vsftpd.conf, 下面对配置文件的常用选项作简单说明:

anonymous_enable=yes|no 是否启用匿名用户

write_enable=yes|no 系统用户是否可以上传文件

anon_upload_enable=yes|no 是否允许匿名用户上传文件,此功能必须要先让对应的文件夹 ftp 用户具有 rwx 权限,由于 vsftpd 文件权限受 SELinux 控制,可用 setfacl –m u:ftp:rwx /path/to/dir 给权限,不过一般匿名用户不会给这么大的权限

anon_mkdir_enable=yes|no 是否允许匿名用户创建文件夹

anon_other_write_enable=yes|no 是否允许匿名用户删除文件

dirmessage_enable=yes|no 此选项启用,可以对应目录下创建一个.message 文件,里面定义想要显示的内容,当用户切换到此目录时,屏幕会打印出.message 内定义好的内容

local_enable=yes|no 是否允许本地系统用户通过 ftp 登陆

chroot_local_user=yes 禁锢所有本地系统用户在其家目录, 如果需要禁锢部分用户可分别定义

chroot_local_enable=no|yes 此项若为 yes 则自定义的 chroot_list 中的用户是不被禁锢的, 如果是 no 则定义的用户是被禁锢的

chroot_list_enable=yes

chroot_list_file=/etc/vsftpd/chroot_list

xferlog_enable=yes|no

xferlog_file=/path/to/file

listen=YES 服务使用独立守护进程, 如果为 NO 则为瞬时守护进程, 需要在 /etc/xinet.d/ 下为其提供相应格式的脚本或配置文件

pam_service_name=vsftpd pam 认证的配置文件, 本例表示 /etc/pam.d/vsftpd , 用户列表文件 /etc/vsftpd/ftpuser

userlist_enable=YES 用户列表文件 /etc/vsftpd/user_list

userlist_deny=YES|NO 如果此项为 Yes 则 user_list 中定义的用户不可以登陆 ftp, 反之亦然.

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2013-11/92211p2.htm

推荐阅读

玩转 vsftpd 服务器的四大高级配置:http://www.linuxidc.com/Linux/2013-09/90565.htm

vsFTPd 配置教程:http://www.linuxidc.com/Linux/2013-09/90562.htm

Ubuntu 实用简单的 FTP 架设 http://www.linuxidc.com/Linux/2012-02/55346.htm

Ubuntu 上架设 FTP 服务器和 Apache 服务器 http://www.linuxidc.com/Linux/2011-04/35295.htm

Ubuntu 13.04 安装 LAMP\vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm

RHEL6 平台下 SeLinux 和 vsftpd 的匿名上传的简单案例 http://www.linuxidc.com/Linux/2013-04/82300.htm

Linux 系统 vsftpd 源码安装 http://www.linuxidc.com/Linux/2013-03/81475.htm

vsftpd 的安全配置案例分析 http://www.linuxidc.com/Linux/2012-12/76501.htm

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