一. 安装FTP软件
yum -y install vsftpd
二. 常见功能调试
在 CentOS 的默认值当中,vsftpd 是同时开放实体用户与匿名用户的,CentOS 的默认值如下:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 1. 与匿名者有关的信息:
anonymous_enable=YES <==支持匿名者的登入使用 FTP 功能
# 2. 与实体用户有关的设定
local_enable=YES <==支持本地端的实体用户登入
write_enable=YES <==允许用户上传数据 (包括档案与目录)
local_umask=022 <==建立新目录 (755) 与档案 (644) 的权限
# 3. 与服务器环境有关的设定
dirmessage_enable=YES <==若目录下有 .message 则会显示该档案的内容
xferlog_enable=YES <==启动登录文件记录,记录于 /var/log/xferlog
connect_from_port_20=YES <==支持主动式联机功能
xferlog_std_format=YES <==支持 WuFTP 的登录档格式
listen=YES <==使用 stand alone 方式启动 vsftpd
pam_service_name=vsftpd <==支持 PAM 模块的管理
userlist_enable=YES <==支持 /etc/vsftpd/user_list 档案内的账号登入管控!
tcp_wrappers=YES <==支持 TCP Wrappers 的防火墙机制
如上默认设置FTP可以达到如下功能:
- 你可以使用 anonymous 这个匿名账号或其他实体账号 (/etc/passwd) 登入;
- anonymous 的家目录在 /var/ftp ,且无上传权限,亦已经被 chroot 了;
- 实体用户的家目录参考 /etc/passwd,并没有被 chroot,可前往任何有权限可进入的目录中;
- 任何于 /etc/vsftpd/ftpusers 内存在的账号均无法使用 vsftpd (PAM);
- 可利用 /etc/hosts.{allow|deny} 来作为基础防火墙;
- 当客户端有任何上传/下载信息时,该信息会被纪录到 /var/log/xferlog 中;
- 主动式联机的埠口为 port 20;
- 使用格林威治时间 (GMT)。
修改时间使用本地时间
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 在这个档案当中的最后一行加入这一句即可
use_localtime=YES
三. 针对仅实体登录账号的设定
虽然在 CentOS 的默认情况当中实体用户已经可以使用 FTP 的服务了,不过我们可能还需要一些额外的功能来限制实体用户。 举例来说,限制用户无法离开家目录 (chroot)、限制下载速率、限制用户上传文件时的权限 (mask) 等等。 底下我们先列出一些希望达到的功能,然后再继续进行额外功能的处理:
- 希望使用北京时间取代 GMT 时间;
- 用户登入时显示一些欢迎信息;
- 系统账号不可登入主机 (亦即 UID 小于 500 以下的账号);
- 一般实体用户可以进行上传、下载、建立目录及修改文件等动作;
- 用户新增的文件、目录之 umask 希望设定为 002;
- 其他主机设定值保留默认值即可。
主配置文件调试
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 1. 与匿名者相关的信息,在这个案例中将匿名登录取消:
anonymous_enable=NO
# 2. 与实体用户相关的信息:可写入,且 umask 为 002 !
local_enable=YES
write_enable=YES
local_umask=002
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list <==这个文件必须存在!默认有此文件!
# 3. 与服务器环境有关的设定
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
banner_file=/etc/vsftpd/welcome.txt <==这个文件必须存在!需手动建立!
[root@www ~]# /etc/init.d/vsftpd restart
欢迎信息调试
[root@www ~]# vim /etc/vsftpd/welcome.txt
欢迎使用本站FTP功能,这个是测试服务。
建立限制系统账号登入的文件
#针对系统账号来给予抵挡的机制,其实有两个档案,一个是 PAM 模块管的,一个是 vsftpd 主动提供的, 在预设的情况下这两个档案分别是:
/etc/vsftpd/ftpusers:就是 /etc/pam.d/vsftpd 这个档案的设定所影响的;
/etc/vsftpd/user_list:由 vsftpd.conf 的 userlist_file 所设定。
#这两个档案的内容是一样的~并且这两个档案必须要存在才行。请你参考你的 /etc/passwd 配置文件, 然后将 UID 小于 500 的账号名称给他同时写到这两个档案内!一行一个账号!
[root@www ~]# vim /etc/vsftpd/user_list
root
bin
对用户进行根目录锁定
# 1. 修改 vsftpd.conf 的参数值:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 增加是否设定针对某些使用者来 chroot 的相关设定!
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# 2. 建立不被 chroot 的使用者账号列表,即使没有任何账号,此档案也是要存在!
[root@www ~]# vim /etc/vsftpd/chroot_list
jet
#此档案中存在的用户的根目录不会被锁定
[root@www ~]# /etc/init.d/vsftpd restart
限制用户的带宽
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 增加底下这一个参数即可:
local_max_rate=1000000 <==记住喔,单位是 bytes/second
[root@www ~]# /etc/init.d/vsftpd restart
限制最大同时上线人数与同一 IP 的 FTP 联机数
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 增加底下的这两个参数:
max_clients=10
max_per_ip=1
[root@www ~]# /etc/init.d/vsftpd restart
建立严格的可使用 FTP 的账号列表
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 这几个参数必须要修改成这样:
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
[root@www ~]# /etc/init.d/vsftpd restart
四. 针对仅匿名用户登录设置
底下我们将针对匿名用户来设定,且不开放实体用户。一般来说,这种设定是给类似大专院校的 FTP 服务器来使用。
使用北京时间,而非 GMT 时间;
提供欢迎信息,说明可提供下载的信息;
仅开放 anonymous 的登入,且不需要输入密码;
文件传输的速限为 1 Mbytes/second;
数据连接的过程 (不是命令通道!) 只要超过 60 秒没有响应,就强制 Client 断线!
只要 anonymous 超过十分钟没有动作,就予以断线;
最大同时上线人数限制为 50 人,且同一 IP 来源最大联机数量为 5 人;
[root@www ~]# mkdir /var/ftp/linux
[root@www ~]# mkdir /var/ftp/gnu
配置主配置文件
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 将这个档案的全部内容改成这样:
# 1. 与匿名者相关的信息:
anonymous_enable=YES
no_anon_password=YES <==匿名登录时,系统不会检验密码 (通常是email)
anon_max_rate=1000000 <==最大带宽使用为 1MB/s 左右
data_connection_timeout=60 <==数据流联机的 timeout 为 60 秒
idle_session_timeout=600 <==若匿名者发呆超过 10 分钟就断线
max_clients=50 <==最大联机与每个 IP 的可用联机
max_per_ip=5
# 2. 与实体用户相关的信息,本案例中为关闭他的情况!
local_enable=NO
# 3. 与服务器环境有关的设定
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
banner_file=/etc/vsftpd/anon_welcome.txt
[root@www ~]# /etc/init.d/vsftpd restart
建立欢迎信息
[root@www ~]# vim /etc/vsftpd/anon_welcome.txt
欢迎光临本站所提供的 FTP 服务!
本站主要提供 Linux 操作系统相关档案以及 GNU 自由软件喔!
有问题请与站长联络!谢谢大家!
主要的目录为:
linux 提供 Linux 操作系统相关软件
gnu 提供 GNU 的自由软件
uploads 提供匿名的您上传数据
让匿名者可上传/下载自己的资料 (权限开放最大)
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 新增底下这几行啊!
write_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
[root@www ~]# /etc/init.d/vsftpd restart
[root@www ~]# mkdir /var/ftp/uploads
[root@www ~]# chown ftp /var/ftp/uploads
让匿名者仅具有上传权限,不可下载匿名者上传的东西
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 将这几行给他改一改先!记得要拿掉 anon_other_write_enable=YES
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
chown_uploads=YES <==新增的设定值在此!
chown_username=daemon
[root@www ~]# /etc/init.d/vsftpd restart
被动式联机端口的限制
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 增加底下这几行即可啊!
pasv_min_port=65400
pasv_max_port=65410
[root@www ~]# /etc/init.d/vsftpd restart
iptables设置建议
# 1. 加入模块:虽然 iptables.rule 已加入模块,不过系统档案还是修改一下好了:
[root@www ~]# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
# 加入模块即可!两个模块中间有空格键隔开!然后重新启动 iptables 服务啰!
[root@www ~]# /etc/init.d/iptables restart
# 2. 修改 iptables.rule 的脚本如下:
[root@www ~]# vim /usr/local/virus/iptables/iptables.rule
iptables -A INPUT -p TCP -i $EXTIF --dport 21 --sport 1024:65534 -j ACCEPT
# 找到上面这一行,并将前面的批注拿掉即可!并且新增底下这一行喔!
iptables -A INPUT -p TCP -i $EXTIF --dport 65400:65410 --sport 1024:65534 -j ACCEPT
[root@www ~]# /usr/local/virus/iptables/iptables.rule