共计 17557 个字符,预计需要花费 44 分钟才能阅读完成。
1.ftp 简介
(1) 生活中的 ftp
在互联网中我们需要传输数据,尤其是要传输大型数据。有一个服务是要着重去介绍的:ftp。其实我们以前很早就接触它了。只是大家可能不怎么关注,迅雷的基本模型就是 ftp,不过是要高级的多。
事实上 ftp 应该是一种传输协议,之前它采用的是明文传输,如果在复杂的网络环境这样使用的话是非常危险的。为了更安全的使用这个协议,现在我们要采取更安全的软件 vsftpd 来提供服务。
(2)ftp 的功能介绍
1. 它有着不同等级的用户身份: 服务器本地用户;访客;匿名用户 ;
2. 命令记录与日志记录;
3. 限制用户的家目录;
以上三点将会在我们接下来的实验中体现出来,总之是一个宗旨:我们的服务器功能尽量单一,给客户提供功能的同时要保证服务器的安全。
(3)ftp 的工作流程
首先我们要知道 ftp 使用的协议是 TCP 协议,因为大型数据的传输是要建立起稳定的链接的。ftp 的服务器使用两个链接,分别是 命令管道和数据管道 ,这样做是非常正确的,因为即使是在计算机的操作系统上也是把代码段和数据段分开的,这会非常的高效。
命令管道端口:21
数据传输端口:20
玩转 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
2.ftp 服务器的搭建
(1)首先我们来看看 ftp 服务器的安装包:
安装完了之后我们要清楚两个东西:
1.ftp 服务器的配置文件目录:/etc/vsftpd
2.ftp 服务器的默认发布目录: /var/ftp/pub (这个是可以修改的)
(2)这次我们要体现 ftp 服务器配置的安全意识,所以把 selinux 打开,修改配置文件/etc/sysconfig/selinux :
(3)我们直接开启服务看看能够提供什么功能��
另外一台客户机去访问该服务器:
访问是不被允许的,难道是我们服务器的防火墙没有刷:
再次访问试试:
这次就可以登录了,遇到这种问题一般是火墙没有刷掉。关于服务器所开放的功能,我们要去看看 vsftpd 的配置文件 vsftpd.conf。但是大家要注意的是:我们刚刚使用的是匿名用户登录,这其实是不太好的。如果每个人都可以去下载你的数据,带宽很容易被耗尽,最关键的是太不安全。所以一般情况下我们是不会开放匿名用户登录的,这里是为了实验。
这个是配置文件的一部分,我们要配置一定的服务就是要设置这些关键字的值,例如 12 行的 anonymous_enable = YES 就是代表所有人都可以访问 ftp。
ftp 的配置文件比较复杂(这个是列举网友总结下来的):
1.登录和对匿名用户的设置
write_enable=YES // 是否对登录用户开启写权限。属全局性设置。默认 NO
local_enable=YES // 是否允许本地用户登录 FTP 服务器。默认为 NO
anonymous_enable=YES // 设置是否允许匿名用户登录 FTP 服务器。默认为 YES
ftp_username=ftp // 定义匿名用户的账户名称,默认值为 ftp。
no_anon_password=YES // 匿名用户登录时是否询问口令。设置为 YES,则不询问。默认 NO
anon_world_readable_only=YES // 匿名用户是否允许下载可阅读的文档,默认为 YES。
anon_upload_enable=YES // 是否允许匿名用户上传文件。只有在 write_enable 设置为 YES,该配置项才有效。而且匿名用户对相应的目录必须有写限。
anon_mkdir_write_enable=YES // 是否允许匿名用户创建目录。只有在 write_enable 设置为 YES 时有效。且匿名用户对上层目录有写入的权限。
anon_other_write_enable=NO // 若设置为 YES,则匿名用户会被允许拥有多于上传和建立目录的权限,还会拥有删除和更名权限。默认值为 NO。
2.设置欢迎信息
用户登录 FTP 服务器成功后,服务器可向登录用户输出预设置的欢迎信息。
ftpd_banner=Welcome to my FTP server.
// 该配置项用于设置比较简短的欢迎信息。若欢迎信息较多,则可使用 banner_file 配置项。
banner_file=/etc/vsftpd/banner
// 设置用户登录时,将要显示输出的文件。该设置项将覆盖 ftpd_banner 的设置。
dirmessage_enable=YES
// 设置是否显示目录消息。若设置为 YES,则当用户进入特定目录(比如 /var/ftp/linux)时,将显示该目录中的由 message_file 配置项指定的文件(.message)中的内容。
message_file=.message // 设置目录消息文件。可将显示信息存入该文件。该文件需要放在 相应的目录(比如 /var/ftp/linux)下
3.设置用户登录后所在的目录
local_root=/var/ftp
// 设置本地用户登录后所在的目录。默认配置文件中没有设置该项,此时用户登录 FTP 服务器后,所在的目录为该用户的主目录,对于 root 用户,则为 /root 目录。
anon_root=/var/ftp
// 设置匿名用户登录后所在的目录。若未指定,则默认为 /var/ftp 目录。
4.控制用户是否允许切换到上级目录
在默认配置下,用户可以使用“cd..”命名切换到上级目录。比如,若用户登录后所在的目录为 /var/ftp,则在“ftp>”命令行 下,执行“cd..”命令后,用户将切换到其上级目录 /var,若继续执行该命令,则可进入 Linux 系统的根目录,从而可以对整个 Linux 的文件系统 进行操作。
若设置了 write_enable=YES,则用户还可对根目录下的文件进行改写操作,会给系统带来极大的安全隐患,因此,必须防止用户切换到 Linux 的根目录,相关的配置项如下:
chroot_list_enable=YES
// 设置是否启用 chroot_list_file 配置项指定的用户列表文件。设置为 YES 则除了列在 j /etc/vsftpd/chroot_list 文件中的的帐号外,所有登录的用户都可以进入 ftp 根目录之外的目录。默认 NO
chroot_list_file=/etc/vsftpd/chroot_list
// 用于指定用户列表文件,该文件用于控制哪些用户可以切换到 FTP 站点根目录的上级目录。
chroot_local_user=YES
// 用于指定用户列表文件中的用户,是否允许切换到上级目录。默认 NO
注意:要对本地用户查看效果,需先设置 local_root=/var/ftp
具体情况有以下几种:
1)当 chroot_list_enable=YES,chroot_local_user=YES 时,在 /etc/vsftpd/chroot_list 文件中列出的用户,可以切换到上级目录;未在文件中列出的用户,不能切换到站点根目录的上级目录。
2)当 chroot_list_enable=YES,chroot_local_user=NO 时,在 /etc/vsftpd/chroot_list 文件中列出的用户,不能切换到站点根目录的上级目录;未在文件中列出的用户,可以切换到上级目录。
3)当 chroot_list_enable=NO,chroot_local_user=YES 时,所有用户均不能切换到上级目录。
4)当 chroot_list_enable=NO,chroot_local_user=NO 时,所有用户均可以切换到上级目录。
5)当用户不允许切换到上级目录时,登录后 FTP 站点的根目录“/”是该 FTP 账户的主目录,即文件的系统的 /var/ftp 目录。
5.设置访问控制
(1)设置允许或不允许访问的主机(见 TBP14)
tcp_wrappers=YES 用来设置 vsftpd 服务器是否与 tcp wrapper 相结合,进行主机的访问控制。默认设置为 YES,vsftpd 服务器会检查 /etc/hosts.allow 和 /etc /hosts.deny 中的设置,以决定请求连接的主机是否允许访问该 FTP 服务器。这两个文件可以起到简易的防火墙功能。
比如,若要仅允许 192.168.168.1~192.168.168.254 的用户,可以访问连接 vsftpd 服务器,则可在 /etc/hosts.allow 文件中添加以下内容:
vsftpd:192.168.168.0/255.255.255.0:allow
all:all:deny
(2)设置允许或不允许访问的用户
对用户的访问控制由 /etc/vsftpd/user_list 和 /etc/vsftpd/ftpusers 文件来控制实现。相关配置命令如下:
userlist_enable=YES
// 决定 /etc/vsftpd/user_list 文件是否启用生效。YES 则生效,NO 不生效。
userlist_deny=YES
// 决定 /etc/vsftpd/user_list 文件中的用户是允许访问还是不允许访问。若设置为 YES,则 /etc/vsftpd/user_list 文件中的用户将不允许访问 FTP 服务器;若设置为 NO,则只有 vsftpd.user_list 文件中的用户,才能访问 FTP 服务器。
6.设置访问速度
anon_max_rate=0
// 设置匿名用户所能使用的最大传输速度,单位为 b /s。若设置为 0,则不受速度限制,此为默认值。
local_max_rate=0
// 设置本地用户所能使用的最大传输速度。默认为 0,不受限制。
7.定义用户配置文件
在 vsftpd 服务器中,不同用户还可使用不同的配置,这要通过用户配置文件来实现。
user_config_dir=/etc/vsftpd/userconf // 用于设置用户配置文件所在的目录。
设 置了该配置项后,当用户登录 FTP 服务器时,系统就会到 /etc/vsftpd/userconf 目录下读取与当前用户名相同的文件,并根据文件中的配置 命令,对当前用户进行更进一步的配置。比如,利用用户配置文件,可实现对不同用户进行访问的速度进行控制,在各用户配置文件中,定义 local_max_rate 配置,以决定该用户允许的访问速度。
8.与连接相关的设置
listen=YES
// 设置 vsftpd 服务器是否以 standalone 模式运行。以 standalone 模式运行是一种较好的方式,此时 listen 必须设置为 YES,此为 默认值,建议不要更改。很多与服务器运行相关的配置命令,需要此运行模式才有效。若设置为 NO,则 vsftpd 不是以独立的服务运行,要受 xinetd 服 务的管理控制,功能上会受限制。
max_clients=0
// 设置 vsftpd 允许的最大连接数,默认为 0,表示不受限制。若设置为 150 时,则同时允许有 150 个连接,超出的将拒绝建立连接。只有在以 standalone 模式运行时才有效。
max_per_ip=0
// 设置每个 IP 地址允许与 FTP 服务器同时建立连接的数目。默认为 0,不受限制。通常可对此配置进行设置,防止同一个用户建立太多的连接。只有在以 standalone 模式运行时才有效。
listen_address=IP 地址
// 设置在指 定的 IP 地址上侦听用户的 FTP 请求。若不设置,则对服务器所绑定的所有 IP 地址进行侦听。只有在以 standalone 模式运行时才有效。对于只绑定了 一个 IP 地址的服务器,不需要配置该项,默认情况下,配置文件中没有该配置项。若服务器同时绑定了多个 IP 地址,则应通过该配置项,指定在哪个 IP 地址上 提供 FTP 服务,即指定 FTP 服务器所使用的 IP 地址。
注意:设置此值前后,可以通过 netstat -tnl 对比端口的监听情况
accept_timeout=60
// 设置建立被动(PASV)数据连接的超时时间,单位为秒,默认值为 60。
connect_timeout=60
// PORT 方式下建立数据连接的超时时间,单位为秒。
data_connection_timeout=300
// 设置建立 FTP 数据连接的超时时间,默认为 300 秒。
idle_session_timeout=600
// 设置多长时间不对 FTP 服务器进行任何操作,则断开该 FTP 连接,单位为秒,默认为 600 秒。即设置发呆的逾时时间,在这个时间内,若没有数据传送或指令的输入,则会强行断开连接。
pam_service_name=vsftpd
// 设置在 PAM 所使用的名称,默认值为 vsftpd。
setproctitle_enable=NO|YES
// 设置每个与 FTP 服务器的连接,是否以不同的进程表现出来,默认值为 NO,此时只有一个名为 vsftpd 的进程。若设置为 YES,则每个连接都会有一个 vsftpd 进程,使用“ps -ef|grep ftp”命令可查看到详细的 FTP 连接信息。安全起见,建议关闭。
9.FTP 工作方式与端口设置
(1)FTP 工作方式简介
FTP 的工作方式有两种,一种是 PORT FTP,另一种是 PASV FTP。下面介绍其工作方式。
二者的区别在于 PORT FTP 的数据传输端口是由 FTP 服务器指定的,而 PASV FTP 则是由 FTP 客户端指定的,而且每次数据连接所使用的端口号都不同。正因为如此,所以在 CuteFTP 等 FTP 客户端软件中,其连接类型设置项中有 PORT 和 PASV 两种选择。
当 FTP 服务器设置为 PASV 工作模式时,客户端也必须设置为 PASV 连接类型。若客户端连接类型设置为 PORT,则能建立 FTP 连接,但在执行 ls 或 get 等需要数据请求的命令时,将会出现无响应并最终报告无法建立数据连接。
(2)与端口相关的配置
listen_port=21
// 设置 FTP 服务器建立连接所侦听的端口,默认值为 21。
连接非标准端口示例:ftp www.sunflower.org 7000
connect_from_port_20=YES
// 默认值为 YES,指定 FTP 数据传输连接使用 20 端口。若设置为 NO,则进行数据连接时,所使用的端口由 ftp_data_port 指定。
ftp_data_port=20
// 设置 PORT 方式下 FTP 数据连接所使用的端口,默认值为 20。
pasv_enable=YES|NO
// 若设置为 YES,则使用 PASV 工作模式;若设置为 NO,使用 PORT 模式。默认为 YES,即使用 PASV 模式。
pasv_max_port=0
// 设置在 PASV 工作方式下,数据连接可以使用的端口范围的上界。默认值为 0,表示任意端口。
pasv_mim_port=0
// 设置在 PASV 工作方式下,数据连接可以使用的端口范围的下界。默认值为 0,表示任意端口。
10.设置传输模式
FTP 在传输数据时,可使用二进制(Binary)方式,也可使用 ASCII 模式来上传或下载数据。
ascii_download_enable=YES // 设置是否启用 ASCII 模式下载数据。默认为 NO。
ascii_upload_enable=YES // 设置是否启用 ASCII 模式上传数据。默认为 NO。
11.设置上传文档的所属关系和权限
(1)设置匿名上传文档的属主
chown_uploads=YES
// 用于设置是否改变匿名用户上传的文档的属主。默认为 NO。若设置为 YES,则匿名用户上传的文档的属主将被设置为 chown_username 配置项所设置的用户名。
chown_username=whoever
// 设置匿名用户上传的文档的属主名。只有 chown_uploads=YES 时才有效。建议不要设置为 root 用户。但系统默 root
(2)新增文档的权限设定
local_umask=022
// 设置本地用户新增文档的 umask,默认为 022,对应的权限为 755。umask 为 022,对应的二进制数为 000 010 010,将其取反为 111 101 101,转换成十进制数,即为权限值 755,代表文档的所有者(属主)有读写执行权,所属组有读和执行权,其他用户有读和执行权。022 适合于大多数情 况,一般不需要更改。若设置为 077,则对应的权限为 700。
anon_umask=022 // 设置匿名用户新增文档的 umask。默认 077
file_open_mode=0755 // 设置上传文档的权限。权限采用数字格式。默认 0666
12.日志文件
xferlog_enable=YES // 是否启用上传 / 下载日志记录。默认为 NO
xferlog_file=var/log/vsftpd.log // 设置日志文件名及路径。需启用 xferlog_enable 选项
xferlog_std_format=YES // 日志文件是否使用标准的 xferlog 日志文件格式(与 wu-ftpd 使用的格式相同)。默认为 NO
13.其他设置
text_userdb_names=NO
// 设置在执行 ls 命令时,是显示 UID、GID 还是显示出具体的用户名或组名称。默认为 NO,以 UID 和 GID 方式显示,若希望显示用户名和组名称,则设置为 YES。
ls_recurse_enable=YES
// 若设置为 YES,则允许执行“ls –R”这个命令,默认值为 NO。在配置文件中该配置项被注释掉了,与此类似的还有一些配置,需要启用时,将注释符去掉并进行 YES 或 NO 的设置即可
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-07/104451p2.htm
4. 匿名用户家目录的修改
有的时候我们并不想让匿名用户访问默认发布目录,而是让它访问我们另外设置的目录,要做如下修改:
(1)首先我们要创建新的默认发布目录,并且创建了 5 个文件:
(2)修改配置文件:
(3)但是我们发现它的安全上下文并不是 ftp 的,这样即使开放服务匿名用户也是看不到的,所以我们要修改他们的安全上下文:
看到这里并不能算结束,因为我们把 selinux 也打开了,所要还要查看 ftp 选项的布尔值,当它允许匿名登录时才可以:
重启服务看看效果:
显示的刚好就是我们传见的五个文件,说明此时 ftp 的匿名发布目录已经更改为了 /ftp/pub。
通知:
因为 ftp 的配置示例挺复杂的,分几个帖子讲解。但是我尽量会把示例讲的清楚,所有的示例运用自如的话,是可以满足企业的工作要求的。
1.ftp 简介
(1) 生活中的 ftp
在互联网中我们需要传输数据,尤其是要传输大型数据。有一个服务是要着重去介绍的:ftp。其实我们以前很早就接触它了。只是大家可能不怎么关注,迅雷的基本模型就是 ftp,不过是要高级的多。
事实上 ftp 应该是一种传输协议,之前它采用的是明文传输,如果在复杂的网络环境这样使用的话是非常危险的。为了更安全的使用这个协议,现在我们要采取更安全的软件 vsftpd 来提供服务。
(2)ftp 的功能介绍
1. 它有着不同等级的用户身份: 服务器本地用户;访客;匿名用户 ;
2. 命令记录与日志记录;
3. 限制用户的家目录;
以上三点将会在我们接下来的实验中体现出来,总之是一个宗旨:我们的服务器功能尽量单一,给客户提供功能的同时要保证服务器的安全。
(3)ftp 的工作流程
首先我们要知道 ftp 使用的协议是 TCP 协议,因为大型数据的传输是要建立起稳定的链接的。ftp 的服务器使用两个链接,分别是 命令管道和数据管道 ,这样做是非常正确的,因为即使是在计算机的操作系统上也是把代码段和数据段分开的,这会非常的高效。
命令管道端口:21
数据传输端口:20
玩转 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
2.ftp 服务器的搭建
(1)首先我们来看看 ftp 服务器的安装包:
安装完了之后我们要清楚两个东西:
1.ftp 服务器的配置文件目录:/etc/vsftpd
2.ftp 服务器的默认发布目录: /var/ftp/pub (这个是可以修改的)
(2)这次我们要体现 ftp 服务器配置的安全意识,所以把 selinux 打开,修改配置文件/etc/sysconfig/selinux :
(3)我们直接开启服务看看能够提供什么功能��
另外一台客户机去访问该服务器:
访问是不被允许的,难道是我们服务器的防火墙没有刷:
再次访问试试:
这次就可以登录了,遇到这种问题一般是火墙没有刷掉。关于服务器所开放的功能,我们要去看看 vsftpd 的配置文件 vsftpd.conf。但是大家要注意的是:我们刚刚使用的是匿名用户登录,这其实是不太好的。如果每个人都可以去下载你的数据,带宽很容易被耗尽,最关键的是太不安全。所以一般情况下我们是不会开放匿名用户登录的,这里是为了实验。
这个是配置文件的一部分,我们要配置一定的服务就是要设置这些关键字的值,例如 12 行的 anonymous_enable = YES 就是代表所有人都可以访问 ftp。
ftp 的配置文件比较复杂(这个是列举网友总结下来的):
1.登录和对匿名用户的设置
write_enable=YES // 是否对登录用户开启写权限。属全局性设置。默认 NO
local_enable=YES // 是否允许本地用户登录 FTP 服务器。默认为 NO
anonymous_enable=YES // 设置是否允许匿名用户登录 FTP 服务器。默认为 YES
ftp_username=ftp // 定义匿名用户的账户名称,默认值为 ftp。
no_anon_password=YES // 匿名用户登录时是否询问口令。设置为 YES,则不询问。默认 NO
anon_world_readable_only=YES // 匿名用户是否允许下载可阅读的文档,默认为 YES。
anon_upload_enable=YES // 是否允许匿名用户上传文件。只有在 write_enable 设置为 YES,该配置项才有效。而且匿名用户对相应的目录必须有写限。
anon_mkdir_write_enable=YES // 是否允许匿名用户创建目录。只有在 write_enable 设置为 YES 时有效。且匿名用户对上层目录有写入的权限。
anon_other_write_enable=NO // 若设置为 YES,则匿名用户会被允许拥有多于上传和建立目录的权限,还会拥有删除和更名权限。默认值为 NO。
2.设置欢迎信息
用户登录 FTP 服务器成功后,服务器可向登录用户输出预设置的欢迎信息。
ftpd_banner=Welcome to my FTP server.
// 该配置项用于设置比较简短的欢迎信息。若欢迎信息较多,则可使用 banner_file 配置项。
banner_file=/etc/vsftpd/banner
// 设置用户登录时,将要显示输出的文件。该设置项将覆盖 ftpd_banner 的设置。
dirmessage_enable=YES
// 设置是否显示目录消息。若设置为 YES,则当用户进入特定目录(比如 /var/ftp/linux)时,将显示该目录中的由 message_file 配置项指定的文件(.message)中的内容。
message_file=.message // 设置目录消息文件。可将显示信息存入该文件。该文件需要放在 相应的目录(比如 /var/ftp/linux)下
3.设置用户登录后所在的目录
local_root=/var/ftp
// 设置本地用户登录后所在的目录。默认配置文件中没有设置该项,此时用户登录 FTP 服务器后,所在的目录为该用户的主目录,对于 root 用户,则为 /root 目录。
anon_root=/var/ftp
// 设置匿名用户登录后所在的目录。若未指定,则默认为 /var/ftp 目录。
4.控制用户是否允许切换到上级目录
在默认配置下,用户可以使用“cd..”命名切换到上级目录。比如,若用户登录后所在的目录为 /var/ftp,则在“ftp>”命令行 下,执行“cd..”命令后,用户将切换到其上级目录 /var,若继续执行该命令,则可进入 Linux 系统的根目录,从而可以对整个 Linux 的文件系统 进行操作。
若设置了 write_enable=YES,则用户还可对根目录下的文件进行改写操作,会给系统带来极大的安全隐患,因此,必须防止用户切换到 Linux 的根目录,相关的配置项如下:
chroot_list_enable=YES
// 设置是否启用 chroot_list_file 配置项指定的用户列表文件。设置为 YES 则除了列在 j /etc/vsftpd/chroot_list 文件中的的帐号外,所有登录的用户都可以进入 ftp 根目录之外的目录。默认 NO
chroot_list_file=/etc/vsftpd/chroot_list
// 用于指定用户列表文件,该文件用于控制哪些用户可以切换到 FTP 站点根目录的上级目录。
chroot_local_user=YES
// 用于指定用户列表文件中的用户,是否允许切换到上级目录。默认 NO
注意:要对本地用户查看效果,需先设置 local_root=/var/ftp
具体情况有以下几种:
1)当 chroot_list_enable=YES,chroot_local_user=YES 时,在 /etc/vsftpd/chroot_list 文件中列出的用户,可以切换到上级目录;未在文件中列出的用户,不能切换到站点根目录的上级目录。
2)当 chroot_list_enable=YES,chroot_local_user=NO 时,在 /etc/vsftpd/chroot_list 文件中列出的用户,不能切换到站点根目录的上级目录;未在文件中列出的用户,可以切换到上级目录。
3)当 chroot_list_enable=NO,chroot_local_user=YES 时,所有用户均不能切换到上级目录。
4)当 chroot_list_enable=NO,chroot_local_user=NO 时,所有用户均可以切换到上级目录。
5)当用户不允许切换到上级目录时,登录后 FTP 站点的根目录“/”是该 FTP 账户的主目录,即文件的系统的 /var/ftp 目录。
5.设置访问控制
(1)设置允许或不允许访问的主机(见 TBP14)
tcp_wrappers=YES 用来设置 vsftpd 服务器是否与 tcp wrapper 相结合,进行主机的访问控制。默认设置为 YES,vsftpd 服务器会检查 /etc/hosts.allow 和 /etc /hosts.deny 中的设置,以决定请求连接的主机是否允许访问该 FTP 服务器。这两个文件可以起到简易的防火墙功能。
比如,若要仅允许 192.168.168.1~192.168.168.254 的用户,可以访问连接 vsftpd 服务器,则可在 /etc/hosts.allow 文件中添加以下内容:
vsftpd:192.168.168.0/255.255.255.0:allow
all:all:deny
(2)设置允许或不允许访问的用户
对用户的访问控制由 /etc/vsftpd/user_list 和 /etc/vsftpd/ftpusers 文件来控制实现。相关配置命令如下:
userlist_enable=YES
// 决定 /etc/vsftpd/user_list 文件是否启用生效。YES 则生效,NO 不生效。
userlist_deny=YES
// 决定 /etc/vsftpd/user_list 文件中的用户是允许访问还是不允许访问。若设置为 YES,则 /etc/vsftpd/user_list 文件中的用户将不允许访问 FTP 服务器;若设置为 NO,则只有 vsftpd.user_list 文件中的用户,才能访问 FTP 服务器。
6.设置访问速度
anon_max_rate=0
// 设置匿名用户所能使用的最大传输速度,单位为 b /s。若设置为 0,则不受速度限制,此为默认值。
local_max_rate=0
// 设置本地用户所能使用的最大传输速度。默认为 0,不受限制。
7.定义用户配置文件
在 vsftpd 服务器中,不同用户还可使用不同的配置,这要通过用户配置文件来实现。
user_config_dir=/etc/vsftpd/userconf // 用于设置用户配置文件所在的目录。
设 置了该配置项后,当用户登录 FTP 服务器时,系统就会到 /etc/vsftpd/userconf 目录下读取与当前用户名相同的文件,并根据文件中的配置 命令,对当前用户进行更进一步的配置。比如,利用用户配置文件,可实现对不同用户进行访问的速度进行控制,在各用户配置文件中,定义 local_max_rate 配置,以决定该用户允许的访问速度。
8.与连接相关的设置
listen=YES
// 设置 vsftpd 服务器是否以 standalone 模式运行。以 standalone 模式运行是一种较好的方式,此时 listen 必须设置为 YES,此为 默认值,建议不要更改。很多与服务器运行相关的配置命令,需要此运行模式才有效。若设置为 NO,则 vsftpd 不是以独立的服务运行,要受 xinetd 服 务的管理控制,功能上会受限制。
max_clients=0
// 设置 vsftpd 允许的最大连接数,默认为 0,表示不受限制。若设置为 150 时,则同时允许有 150 个连接,超出的将拒绝建立连接。只有在以 standalone 模式运行时才有效。
max_per_ip=0
// 设置每个 IP 地址允许与 FTP 服务器同时建立连接的数目。默认为 0,不受限制。通常可对此配置进行设置,防止同一个用户建立太多的连接。只有在以 standalone 模式运行时才有效。
listen_address=IP 地址
// 设置在指 定的 IP 地址上侦听用户的 FTP 请求。若不设置,则对服务器所绑定的所有 IP 地址进行侦听。只有在以 standalone 模式运行时才有效。对于只绑定了 一个 IP 地址的服务器,不需要配置该项,默认情况下,配置文件中没有该配置项。若服务器同时绑定了多个 IP 地址,则应通过该配置项,指定在哪个 IP 地址上 提供 FTP 服务,即指定 FTP 服务器所使用的 IP 地址。
注意:设置此值前后,可以通过 netstat -tnl 对比端口的监听情况
accept_timeout=60
// 设置建立被动(PASV)数据连接的超时时间,单位为秒,默认值为 60。
connect_timeout=60
// PORT 方式下建立数据连接的超时时间,单位为秒。
data_connection_timeout=300
// 设置建立 FTP 数据连接的超时时间,默认为 300 秒。
idle_session_timeout=600
// 设置多长时间不对 FTP 服务器进行任何操作,则断开该 FTP 连接,单位为秒,默认为 600 秒。即设置发呆的逾时时间,在这个时间内,若没有数据传送或指令的输入,则会强行断开连接。
pam_service_name=vsftpd
// 设置在 PAM 所使用的名称,默认值为 vsftpd。
setproctitle_enable=NO|YES
// 设置每个与 FTP 服务器的连接,是否以不同的进程表现出来,默认值为 NO,此时只有一个名为 vsftpd 的进程。若设置为 YES,则每个连接都会有一个 vsftpd 进程,使用“ps -ef|grep ftp”命令可查看到详细的 FTP 连接信息。安全起见,建议关闭。
9.FTP 工作方式与端口设置
(1)FTP 工作方式简介
FTP 的工作方式有两种,一种是 PORT FTP,另一种是 PASV FTP。下面介绍其工作方式。
二者的区别在于 PORT FTP 的数据传输端口是由 FTP 服务器指定的,而 PASV FTP 则是由 FTP 客户端指定的,而且每次数据连接所使用的端口号都不同。正因为如此,所以在 CuteFTP 等 FTP 客户端软件中,其连接类型设置项中有 PORT 和 PASV 两种选择。
当 FTP 服务器设置为 PASV 工作模式时,客户端也必须设置为 PASV 连接类型。若客户端连接类型设置为 PORT,则能建立 FTP 连接,但在执行 ls 或 get 等需要数据请求的命令时,将会出现无响应并最终报告无法建立数据连接。
(2)与端口相关的配置
listen_port=21
// 设置 FTP 服务器建立连接所侦听的端口,默认值为 21。
连接非标准端口示例:ftp www.sunflower.org 7000
connect_from_port_20=YES
// 默认值为 YES,指定 FTP 数据传输连接使用 20 端口。若设置为 NO,则进行数据连接时,所使用的端口由 ftp_data_port 指定。
ftp_data_port=20
// 设置 PORT 方式下 FTP 数据连接所使用的端口,默认值为 20。
pasv_enable=YES|NO
// 若设置为 YES,则使用 PASV 工作模式;若设置为 NO,使用 PORT 模式。默认为 YES,即使用 PASV 模式。
pasv_max_port=0
// 设置在 PASV 工作方式下,数据连接可以使用的端口范围的上界。默认值为 0,表示任意端口。
pasv_mim_port=0
// 设置在 PASV 工作方式下,数据连接可以使用的端口范围的下界。默认值为 0,表示任意端口。
10.设置传输模式
FTP 在传输数据时,可使用二进制(Binary)方式,也可使用 ASCII 模式来上传或下载数据。
ascii_download_enable=YES // 设置是否启用 ASCII 模式下载数据。默认为 NO。
ascii_upload_enable=YES // 设置是否启用 ASCII 模式上传数据。默认为 NO。
11.设置上传文档的所属关系和权限
(1)设置匿名上传文档的属主
chown_uploads=YES
// 用于设置是否改变匿名用户上传的文档的属主。默认为 NO。若设置为 YES,则匿名用户上传的文档的属主将被设置为 chown_username 配置项所设置的用户名。
chown_username=whoever
// 设置匿名用户上传的文档的属主名。只有 chown_uploads=YES 时才有效。建议不要设置为 root 用户。但系统默 root
(2)新增文档的权限设定
local_umask=022
// 设置本地用户新增文档的 umask,默认为 022,对应的权限为 755。umask 为 022,对应的二进制数为 000 010 010,将其取反为 111 101 101,转换成十进制数,即为权限值 755,代表文档的所有者(属主)有读写执行权,所属组有读和执行权,其他用户有读和执行权。022 适合于大多数情 况,一般不需要更改。若设置为 077,则对应的权限为 700。
anon_umask=022 // 设置匿名用户新增文档的 umask。默认 077
file_open_mode=0755 // 设置上传文档的权限。权限采用数字格式。默认 0666
12.日志文件
xferlog_enable=YES // 是否启用上传 / 下载日志记录。默认为 NO
xferlog_file=var/log/vsftpd.log // 设置日志文件名及路径。需启用 xferlog_enable 选项
xferlog_std_format=YES // 日志文件是否使用标准的 xferlog 日志文件格式(与 wu-ftpd 使用的格式相同)。默认为 NO
13.其他设置
text_userdb_names=NO
// 设置在执行 ls 命令时,是显示 UID、GID 还是显示出具体的用户名或组名称。默认为 NO,以 UID 和 GID 方式显示,若希望显示用户名和组名称,则设置为 YES。
ls_recurse_enable=YES
// 若设置为 YES,则允许执行“ls –R”这个命令,默认值为 NO。在配置文件中该配置项被注释掉了,与此类似的还有一些配置,需要启用时,将注释符去掉并进行 YES 或 NO 的设置即可
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-07/104451p2.htm
上篇最后我们讲到了匿名用户家目录的修改,今天来看看匿名用户还可以做什么操作。
1. 匿名用户创建和删除目录
其实所有的功能都是上篇所列举的那些参数所控制的,通常大家在记不清的时候都可以查看 man 手册(man vsftpd.conf),里面列举了所有可以修改的参数。关于匿名用户创建和删除目录的参数如下所示:
把这两个参数设置为 YES,匿名用户就可已创建目录了,记得每次修改完配置文件都要重新启动 /etc/init.d/vsftpd 服务。
发现还是无法创建,怎么回事?其实我们考虑问题一定要全面。虽然配置文件修改了,但是查看默认发布目录可发现目录对于匿名用户没有写的权限,而且上图的错误提示也已经告诉了我们,所以我们还要更改目录的权限再重启服务。
这里我们不仅要修改目录的权限,还要修改目录的安全上下文,如果有疑惑来看看以前的安全上下文是 public_content_t,并没有写的权限,所以我们要对它进行修改。
此时匿名用户就可以创建目录了,但是现实中我们一定要慎重选择这个选项。
既然可以传见目录,那我们也可以让匿名用户上传和下载文件,修改配置文件:
然后我们发现匿名用户就可以上传文件了。。
然后我们来删除文件:
这样看来基本功能似乎都有了,我们来进行一些细节的讨论。大家在用迅雷下载东西的时候有时候会发现速度总是快不起来。但事实上你的带宽非常的大,所以很有可能是服务器端对匿名用户的上传下载速度做了限制。今天我们来看看对上传的限制:
我们先来看看修改之前的速度,对比起来会非常明细:
速度非常的快,来不及截图,基本是 30M 每秒。然后我们来限制匿名用户的上传速度:
修改配置文件(这个速度的单位是 KB):
发现速度确实变慢了,才 10K 每秒,呵呵。这样别人带宽再快也会像蜗牛一样下载东西了。2. 本地用户设置
上面的配置是针对匿名用户进行的,通常我们也要对本地用户进行限制,首先把之前所有的配置恢复原样。
以服务器的本地用户 test 为例登录:
此刻它进入的是 test 的家目录,我们可以对本地用户的默认发布目录进行修改.
再次登录试试:
此刻就进入了 /var/ftp 目录了,并且也可以进行上传和下载:
小结:
上述两个帖子分别设置了匿名用户和本地用户的登录及操作,但是这些功能还是不够全面。下节将会介绍黑名单和白名单,以及内网用户和外网用户访问 ftp 时的一些限制。下次再说。这次我们来讲解黑名单,白名单以及内网和外网的 ftp 的访问的不同设置。
1. 黑名单
有的时候我们不想让某些本地用户登录,这个时候就要设置黑名单了,它在 /etc/vsftpd 下:
如何添加一个用户到黑名单:
(1)首先我们把一个用户(westos)添加到 ftpusers:
重启服务(并且刷掉火墙)后看是否可以登录:
westos 登录需要输入密码,但是不能登录,此刻为黑名单。
(2)我们在把 westos 添加到 user_list 中看看:
看到上面的那个提示了么,当 userlist_deny=NO 时,只允许写入的用户登录 ftp,即为白名单,当它的值为 YES 的时候,永远不允许写入的用户登录 ftp,即为黑名单。系统默认为 YES,我们等会儿会进行修改。
再次启动服务,然后查看是否可以登录:
依然是无法登录,看来 westos 真的是添加到了黑名单中了。
接下来我们尝试白名单,按照刚才所说,要修改配置文件 vsftpd.conf:
此刻就可以登录成功了。
2. 内网访问和外网访问:
对于 ftp 服务,有的时候我们既想对内部人员开放,又想对外部人员开放,并且希望他们的权限是不一样的。这样才更符合实际应用,接下来我们要考虑这些问题:
(1)首先是对于内网和外网要有不同的网卡:
添加另外一块网卡:
配置两块网卡对应的配置文件,其中我们把 eth1 对应的网为外网:
vsftpd.conf;
vsftpd1.conf:
为了安全期见我们不能让用户更改目录,这样做是很好的。既然我们提供的 ftp 服务,那么用户就只能访问 ftp 所提供的目录,如果可以任意跳转到系统的其他目录会非常的危险。我们要设置配置文件:
3. 虚拟用户
什么是虚拟用户,对于外网的用户,它当然不知道我们服务器上的本地用户有什么,如果是以前的配置,显然就不能让外网的人员访问 ftp 服务。所以我们为他们设置了虚拟用户。
在 vsftpd 目录下添加虚拟用户:
虚拟用户分别为 user1 和 user2,密码都是 123.
生成 hash 加密文件
在 /etc/pam.d 目录下生成密码检测文件 ftpps:
上面是密码检测,下面是用户名检测:
给外部用户登录时的检测:
允许匿名用户登录:
前面的权限和虚拟用户以及密码设置完后,我们先看看服务是否能够打开:
创建虚拟用户的访问目录:
我们的 selinux 开启,仔细看看安全上下文是不对的,要进行修改:
然后我们修改配置文件:
创建权限目录:/etc/vsftpd/config,
在其下创建文件 user1。
user1 的权限:
修改 user1 所在默认发布目录的上下文:
重启服务:
然后就可以用虚拟用户 user1 登录,进入服务之后服务器让它以 westos 的什么运行,但是却具有 user1 的权限。类似了还可以 user2 的身份及权限登录。这样就大大的增强了 ftp 服务的功能。
总结:
最后这个讲得有些复杂,希望大家多多练习。我也得再温习一下了。