linux ftp部署 一. 安装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