最近更新时间: 2003/09/04
本文数据主要针对 RedHat 9 的系统进行说明,要注意的是,RedHat 9 与 Red Hat Enterprise Linux (RHEL)
是完全不同的东西!RedHat 9 在 2003 年推出,在 2004 年就不再维护了!这部份网站更新到 2005 年,也没有再维护过!
因此,建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 RedHat 9 的数据呢?
鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往
鸟站首页查阅啰!
既然说 FTP 真的很危险,那么不要打开也罢!不过,偏偏很多时候我们又得使用到
FTP 的功能。这个时候选择一个比较安全的 FTP 服务器软件就很重要啦!除了 proftpd
可以取代 Wu FTP 之外,另一个蛮安全的 vsftpd 也可以用来取代喔!这个章节我们就来谈一谈
vsftpd 的设置吧!
前言
除了 proftpd 之外,事实上,这个 vsftpd 也是一个很好的 FTP 服务器软件喔!为什么这么说呢?因为
vsftpd 全名是『very secure FTP daemon』的意思,所以他的发展本来就是以安全性为考量来发展这个套件的。vsftpd
在安全性的考量上面,主要针对了『进程的权限, privilege』概念来设计的,因为我们的任何服务在
Linux 上面运作时都会取得一个 PID,而这个 PID 是有拥有者的身份的,也就是说,这个服务的
PID 在我们的 Linux 上面是具有某些『权限』的。万一这个服务的 PID 所属拥有者的身份等级太高,例如
root 的权限,那么如果不幸该 PID 有些设计上的漏洞,使得该 PID 被入侵的话,入侵者将具有该
PID 的权限,也就是 root 的身份喔!所以,近来发展的套件都会尽量的将服务取得的
PID 权限降低,使得该服务即使不小心被入侵了,入侵者也无法得到有效的系统管理权限,这样会让我们的系统较为安全的啦。
除了上面这个权限的设计之外, vsftpd 也利用 chroot 这个软件的辅助,来让登录者仅能于一些较不重要的目录当中活动,而无法使用
Linux 系统全部的功能。所谓的 chroot 这个函数,最主要的功能就是『改变根目录的所在
( change root directory )』了!举例来说,如果您想要让用户登录
A 服务后,且运行任何指令都是在 /tmp/pub 目录下,并限制用户使用 A 服务时都只能在
/tmp/pub 目录下,那么使用『 chroot /tmp/pub command
』就能够让 /tmp/pub 变成 A 服务的根目录『/』了!如此一来,用户就无法离开
/tmp/pub ,那么万一我们 A 服务的 PID 还是被入侵时,没有关系,入侵者还是仅能在
/tmp/pub 里面跑来跑去而已,而无法使用 Linux 的完整功能。这个时候,自然我们的系统也就会比较安全啦!
vsftpd 是基于上面的说明来设计的一个较为安全的 FTP 服务器软件,他具有底下的特点喔:
-
vsftpd 是以一般身份启动服务,所以对于 Linux 系统的使用权限较低,对于
Linux 系统的危害就相对的减低了。此外, vsftpd 亦利用 chroot() 这个函数进行改换根目录的动作,使得系统工具不会被
vsftpd 这支服务所误用;
-
任何需要具有较高运行权限的 vsftpd 指令均以一支特殊的上层进程
( parent process ) 所控制 ,该上层进程享有的较高运行权限功能已经被限制的相当的低,并以不影响
Linux 本身的系统为准;
-
所有来自 clients 端,想要使用这支上层进程所提供的较高运行权限之
vsftpd 指令的需求,均被视为『不可信任的要求』来处理,必需要经过相当程度的身份确认后,方可利用该上层进程的功能。例如
chown(), Login 的要求等等动作;
-
此外,上面提到的上层进程中,依然使用 chroot() 的功能来限制用户的运行权限。
由于具有这样的特点,所以 vsftpd 会变的比较安全一些咯!
另外,要架设 vsftpd 之前,还是请您得先要针对 FTP 的主动连接、被动连接以及
port 21, 20 这两个指令信道与数据信道的基础有一定程度的认识喔,会比较容易进入状况,所以,还是回到前面的
Wu
FTP 那一张节,将前言的部分看完才好呐!我这里假设您已经具有 FTP 的相关知识了,所以底下就直接来进行
vsftpd 的安装与设置吧!
套件安装:
以 RPM
安装
在目前新版的 Red Hat 9 主要的 FTP 服务器软件就是 vsftpd 这个玩意儿!所以您可以拿出光盘里面的
vsftpd 来直接以 RPM 安装即可!如果您的 Linux distribution 没有提供 vsftpd
的话,没有关系,我们也可以使用底下的 Tarball 的方式来安装呐!
以
Tarball 安装
要以 Tarball 安装,当然得先下载 Tarball 的文件了!vsftpd 的官方网站下载点为:
您可以自行找寻自己喜欢的版本来安装。我这里以 1.2.0 这一版来安装 vsftpd
在我的 Mandrake 9.0 上面喔!(注:如果是 Red Hat 的系统,原本就有 vsftpd
了,所以使用 RPM 安装比较好!至于其他没有提供 vsftpd RPM 文件的 distribution
就可以使用 Tarball 咯!)
1. 下载与解压缩:
[root@test
root]# wget \
> ftp://vsftpd.beasts.org/users/cevans/vsftpd-1.2.0.tar.gz
[root@test
root]# cd /usr/local/src
[root@test
root]# tar -zxvf /root/vsftpd-1.2.0.tar.gz
[root@test
root]# cd vsftpd-1.2.0/
# 在这个目录下有个
INSTALL 与 README 请务必察看喔!
2. 开始编译与安装
# vsftpd 缺省安装的路径为:
# 所有可运行档放置在
/usr/local/sbin 里面;
# man page
放置在 /usr/local/man/man5 与 /usr/local/man/man8
# 若 super
daemon 为 xinetd 时,会拷贝一份启动文件到 /etc/xinetd.d 去!
[root@test
vsftpd-1.2.0]# make
# 编译的过程可能有
warning 的消息,只要不是 Error 就可以不理他!
[root@test
vsftpd-1.2.0]# make install
[root@test
vsftpd-1.2.0]# cp vsftpd.conf /etc
# 将 PAM 身份认证模块给他放进去系统里面!
[root@test
vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd
# 创建 ftp
这个用户以及他的家目录:
# 若本来就存在
ftp 这个用户,那就不需要进行添加!
[root@test
vsftpd-1.2.0]# useradd -M ftp -d /var/ftp
[root@test
vsftpd-1.2.0]# mkdir -p /var/ftp
[root@test
vsftpd-1.2.0]# chown root:root /var/ftp
[root@test
vsftpd-1.2.0]# chmod 755 /var/ftp
# 创建 vsftpd
需要的特殊目录
[root@test
vsftpd-1.2.0]# mkdir -p /usr/share/empty
3. 如果需要移除时:
# 如果想要移除
vsftp 时,可以这样做
[root@test
vsftpd-1.2.0]# rm /usr/local/sbin/vsftpd
[root@test
vsftpd-1.2.0]# rm /usr/local/man/man5/vsftpd.conf.5
[root@test
vsftpd-1.2.0]# rm /usr/local/man/man8/vsftpd.8
[root@test
vsftpd-1.2.0]# rm /etc/xinetd.d/vsftpd
[root@test
vsftpd-1.2.0]# rm /etc/vsftpd.conf
# 因为刚刚安装只有安装这几个文件而已说!所以啦,
vsftpd 真的是挺安全的说!
4. 测试:
# 先确认一下
xinetd.d 有没有问题再说:
[root@test
root]# vi /etc/xinetd.d/vsftpd
service ftp
{
socket_type
= stream
wait
= no
user
= root
server
= /usr/local/sbin/vsftpd
log_on_success +=
DURATION USERID
log_on_failure +=
USERID
nice
= 10
disable
= no
}
[root@test
root]# /etc/rc.d/init.d/xinetd restart
[root@test
root]# ftp localhost
ftp localhost
Connected to
localhost.
220 (vsFTPd
1.2.0)
530 Please
login with USER and PASS.
530 Please
login with USER and PASS.
KERBEROS_V4
rejected as an authentication type
Name (localhost:root):
anonymous
# 这样就表示
vsftpd 已经可以正确的启动了,不过因为我们还没有设置好
# /etc/vsftpd.conf
,所以会有无法登录的问题!没关系,
# 等一下设置好就
OK 了! |
安装的过程真的是很简单,不过, vsftpd.conf 这个文件放置的地点在 RPM
与 Tarball 则可能有点不一样,需要给他特别留意呢!例如 Red Hat 9 缺省放置在
/etc/vsftpd/vsftpd.conf ,而 Tarball 则缺省放置在 /etc/vsftpd.conf 里面说!
Server 端的设置
其实在 Server 端的设置蛮容易的,因为整个 vsftpd 的设置档几乎可以说只有一个,那就是
vsftpd.conf 这个文件了。底下我们就来谈一谈整个 vsftpd 的套件结构与如何设置编辑
vsftpd.conf 这个设置档吧! ^_^
vsftpd
的套件结构
vsftpd 的套件结构很简单,设置档与运行档实在是不多,无论如何,我们还是得要了解一下:
-
/etc/vsftpd.conf 或 /etc/vsftpd/vsftpd.conf:这个就是
vsftpd 的主要设置档了!也是等一下我们要设置的主要项目说。在这个设置档里面,所有的设置项目都是以『参数=设置值』来设置的,注意一下,等号两边没有空白喔!至于
vsftpd.conf 的详细说明,其实在 vsftpd.conf 里面就已经相当的清晰了,如果还想要有其他的支持,可以使用『man
5 vsftpd.conf』来查阅喔!
-
/etc/pam.d/vsftpd 与 /etc/ftpusers
或 /etc/vsftpd.ftpusers:这个与 Wu FTP 是相同的作用啦!利用
pam 模块来进行身份确认的动作说!那么怎么知道使用 /etc/vsftpd.ftpusers 或
/etc/ftpusers 呢?看 /etc/pam.d/vsftpd 的内容即可!
[root@test
root]# vi /etc/pam.d/vsftpd
#%PAM-1.0
auth
required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers
onerr=succeed
auth
required pam_stack.so service=system-auth
auth
required pam_shells.so
account
required pam_stack.so service=system-auth
session
required pam_stack.so service=system-auth |
上面的斜体字是同一行,注意到斜体字那一行,可以发现
file="文件名"
那个文件名就是『限制用户无法使用 vsftpd 』的主要设置文件啰!
-
/etc/vsftpd.chroot_list:这个文件不见得会使用到,且与实体用户有关!当我们在
vsftpd.conf 里面设置好了实体用户的用户没有被 chroot 到自己的家目录下(也就是用户登录后不只能到自己的家目录,还可以跳到其他目录),不过,某些用户您想让他无法离开家目录时,缺省在
/etc/vsftpd.chroot_list 这个文件里面,就可以将该用户限制在自己的家目录内了!一行一个帐号。
-
/etc/vsftp.banned_emails:这个文件与匿名登录有关,不过也不见得会用到!当您允许匿名者
(anonymous) 登录您的 FTP 主机,不过却不允许某些 email address 登录,那么就可以将该
email address 写入到这个文件里面去喔!
-
/usr/local/sbin/vsftpd 或
/usr/sbin/vsftpd:这就是 vsftpd 的主要运行档咯!不要怀疑, vsftpd
只有这一个运行档而已啊!
-
/var/ftp:这个是
vsftpd 的缺省匿名者登录的根目录喔!
大致上就只有这几个文件需要注意而已呢!
vsftpd.conf
设置值说明
vsftpd.conf 是 vsftpd 的主要设置文件,在这里我们约略来说明一下常见的
vsftpd.conf 里面的各个设置参数吧!
关于主机的设置值
connect_from_port_20=YES
(NO)
还记得 wu
ftp 那篇文章提到的,关于主动连接的 ftp-data 吗?
这个设置项目在启动主动连接的
port 20 咯!
listen_port=21
使用的 vsftpd
命令信道的 port number 设置,如果您想要使用非
正规的 ftp
port,在这个设置项目修改吧!
dirmessage_enable=YES
(NO)
当用户进入某个目录时,会显示该目录需要注意的内容,显示的
文件缺省是
.message ,当然,可以使用底下的设置项目来修订!
message_file=.message
当 dirmessage_enable=YES
时,可以设置这个项目来让 vsftpd
寻找该文件来显示消息!您也可以设置其他文件名喔!
listen=YES
(NO)
若设置为
YES 表示 vsftpd 是以 standalone 的方式来启动的!
pasv_enable=YES
(NO)
启动被动式连接(passive
mode),一定要设置为 YES 的啦!
use_localtime=YES
(NO)
是否使用主机的时间?!缺省使用
GMT 时间(格林威治),会比台湾
时间晚 8
小时,一般来说,建议设置为 YES 吧!
write_enable=YES
(NO)
是否允许用户具有写入的权限?!这包括删除与修改等功能喔!
connect_timeout=60
单位是秒,如果
client 尝试连接我们的 vsftpd 命令信道超过 60 秒,
则不等待,强制断线咯。
accept_timeout=60
当用户以被动式
PASV 来进行数据传输时,如果主机激活 passive port
并等待 client
超过60 秒,那么就给他强制断线!您可以修改 60 这个数值。
data_connection_timeout=300
如果 client
与 Server 间的数据发送在 300 秒内都无法发送成功,
那 Client
的连接就会被我们的 vsftpd 强制剔除!
idle_session_timeout=300
如果用户在
300 秒内都没有命令动作,强制脱机!
max_clients=0
如果 vsftpd
是以 stand alone 方式启动的,那么这个设置项目可以设置
同一时间,最多有多少
client 可以同时连上 vsftpd 哩!?
max_per_ip=0
与上面 max_clients
类似,这里是同一个 IP 同一时间可允许多少连接?
pasv_max_port=0
pasv_min_port=0
上面两个是与
passive mode 使用的 port number 有关,如果您想要使用
65400 到
65410 这 11 个 port 来进行被动式数据的连接,可以这样设置
pasv_max_port=65410
以及 pasv_min_port=65400
ftpd_banner=一些文本说明
当用户无法顺利连上我们的主机,例如连接数量已经超过
max_clients
的设置了,那么
client 的画面就会显示『一些文本说明』的字样,您可以修改
关于实体用户登录者的设置值
guest_enable=YES
(NO)
若这个值设置为
YES 时,那么任何非 anonymous 登录的帐号,均会被
假设成为
guest (访客) 喔!
local_enable=YES
(NO)
这个设置值必须要为
YES 时,在 /etc/passwd 内的帐号才能以
实体用户的方式登录我们的
vsftpd 主机喔!
local_max_rate=0
实体用户的传输速度限制,单位为
bytes/second, 0 为不限制。
chroot_local_user=YES
(NO)
将用户限制在自己的家目录之内(chroot)!这个设置在
vsftpd
当中缺省是
NO,因为有底下两个设置项目的辅助喔!
所以不需要启动他!
chroot_list_enable=YES
(NO)
是否激活将某些实体用户限制在他们的家目录内?!缺省是
NO ,
不过,如果您想要让某些用户无法离开他们的家目录时,
可以考虑将这个设置为
YES ,并且规划下个设置值
chroot_list_file=/etc/vsftpd.chroot_list
如果 chroot_list_enable=YES
那么就可以设置这个项目了!他里面可以规定
那一个实体用户会被限制在自己的家目录内而无法离开!(chroot)
一行一个帐号即可!
userlist_deny=YES
(NO)
若此设置值为
YES 时,则当用户帐号被列入到某个文件时,在该文件内
的用户将无法登录
vsftpd 服务器!该文件文件名与下列设置项目有关。
userlist_file=/etc/vsftpd.user_list
若上面 userlist_deny=YES
时,则这个文件就有用处了!在这个文件内的
帐号都无法使用
vsftpd 喔!
关于匿名者登录的设置值
anonymous_enable=YES
(NO)
设置为允许
anonymous 登录我们的 vsftpd 主机!缺省是 YES ,底下的所有
相关设置都需要将这个设置为
anonymous_enable=YES 之后才会生效!
anon_world_readable_only=YES
(NO)
仅允许 anonymous
具有下载可读文件的权限,缺省是 YES。
anon_other_write_enable=YES
(NO)
是否允许
anonymous 具有写入的权限?缺省是 NO!如果要设置为 YES,
那么开放给
anonymous 写入的目录亦需要调整权限,让 vsftpd 的 PID
拥有者可以写入才行!
anon_mkdir_write_enable=YES
(NO)
是否让
anonymous 具有创建目录的权限?默认值是 NO!如果要设置为 YES,
那么 anony_other_write_enable
必须设置为 YES !
anon_upload_enable=YES
(NO)
是否让
anonymous 具有上传数据的功能,缺省是 NO,如果要设置为 YES ,
则 anon_other_write_enable=YES
必须设置。
deny_email_enable=YES
(NO)
将某些特殊的
email address 抵挡住,不让那些 anonymous 登录!
如果以 anonymous
登录主机时,不是会要求输入密码吗?密码不是要您
输入您的
email address 吗?如果你很讨厌某些 email address ,
就可以使用这个设置来将他取消登录的权限!需与下个设置项目配合:
banned_email_file=/etc/vsftpd.banned_emails
如果 deny_email_enable=YES
时,可以利用这个设置项目来规定那个
email address
不可登录我们的 vsftpd 喔!在上面设置的文件内,
一行输入一个
email address 即可!
no_anon_password=YES
(NO)
当设置为
YES 时,表示 anonymous 将会略过密码检验步骤,
而直接进入
vsftpd 服务器内喔!所以一般缺省都是 NO 的!
anon_max_rate=0
这个设置值后面接的数值单位为
bytes/秒 ,限制 anonymous 的传输速度,
如果是 0
则不限制(由最大带宽所限制),如果您想让 anonymous 仅有
30 KB/s 的速度,可以设置『anon_max_rate=30000』
anon_umask=077
限制 anonymous
的权限!如果是 077 则 anonymous 发送过来的文件
权限会是
-rw------- 喔!
关于系统安全的设置值:
ascii_download_enable=YES
(NO)
如果设置为
YES ,那么 client 就可以使用 ASCII 格式下载文件。
一般来说,由于启动了这个设置项目可能会导致
DoS 的攻击,因此缺省是NO。
ascii_upload_enable=YES
(NO)
与上一个设置类似的,只是这个设置针对上传而言!缺省是
NO。
async_abor_enable=YES
(NO)
如果您的
FTP client 会下达 "async ABOR" 这个指令时,这个设置才需要激活
一般来说,由于这个设置并不安全,所以通常都是将他取消的!
check_shell=YES
(NO)
如果您想让拥有任何奇怪的
shell 的用户(在 /etc/passwd 的 shell 字段)
可以使用
vsftpd 的话,这个设置可以设置为 NO 喔!
one_process_model=YES
(NO)
这个设置项目比较危险一点~当设置为
YES 时,表示每个创建的连接
都会拥有一支
process 在负责,可以增加 vsftpd 的性能。不过,
除非您的系统比较安全,而且硬件配备比较高,否则容易耗尽系统资源喔!
一般建议设置为
NO 的啦!
tcp_wrappers=YES
(NO)
当然我们都习惯支持
TCP Wrappers 的啦!所以设置为 YES 吧!
xferlog_enable=YES
(NO)
当设置为
YES 时,用户上传与下载文件都会被纪录起来。记录文件
与下一个设置项目有关:
xferlog_file=/var/log/vsftpd.log
如果上一个
xferlog_enable=YES 的话,这里就可以设置了!
这个是注册表的文件名啦!
xferlog_std_format=YES
(NO)
是否设置为
wu ftp 相同的注册表格式?!缺省为 NO ,因为注册表会比较容易读!
不过,如果您有使用
wu ftp 注册表的分析软件,这里才需要设置为 YES
nopriv_user=nobody
我们的 vsftpd
缺省以 nobody 作为此一服务运行者的权限。因为 nobody 的权限
相当的低,因此即使被入侵,入侵者仅能取得
nobody 的权限喔!
pam_service_name=vsftpd
这个是 pam
模块的名称,我们放置在 /etc/pam.d/vsftpd 即是这个咚咚! |
上面这些是相当常见的 vsftpd 的设置参数,还有很多参数我没有列出来,您可以使用
man 5 vsftpd.conf 查阅喔!不过,基本上上面这些参数已经够我们设置 vsftpd
啰!
最简单的
vsftpd.conf 设置
如果您很懒的去设置 vsftpd 的话,那么可以使用很简单的设置值来规划您的
FTP 服务器。底下就是 Red Hat 9 的缺省 vsftpd 的设置值,您可以使用这样的设置值来启动您的
FTP 服务器即可。这样的设置值有几个用处:
-
任何在 /etc/vsftpd.ftpusers 里面的用户帐号均无法使用
vsftpd 喔!
-
开放 anonymous 与 实体用户 登录
vsftpd ;
-
实体用户登录主机时,可以跳至任何具有登录权限的目录当中(没有
chroot );
-
使用 port 20 作为主动连接时的
ftp-data 发送端口口;
-
利用 /etc/hosts.allow(deny) 来管理登录权限;
-
当 Client 上传/下载文件时,该信息会记录在
/var/log/vsftpd.log 里面;
-
其他的设置均已默认值来规范(如被动式
port number 等等)。
[root@test
root]# vi /etc/xinetd.d/vsftpd
service ftp
{
socket_type
= stream
wait
= no
user
= root
server
= /usr/local/sbin/vsftpd
server_args
= /etc/vsftpd.conf
# 上面这个请依照您的主机环境来设置!尤其是
server_args 请设置您的
# vsftpd.conf
所在目录的完整文件名(含目录名称)!
log_on_success +=
DURATION USERID
log_on_failure +=
USERID
nice
= 10
disable
= no
}
[root@test
root]# vi /etc/vsftpd/vsftpd.conf
# (或 /etc/vsftpd.conf)
# 关于主机与安全性的设置
use_localtime=YES
dirmessage_enable=YES
connect_from_port_20=YES
xferlog_enable=YES
xferlog_std_format=YES
pam_service_name=vsftpd
tcp_wrappers=YES
# 关于 anonymous
的设置
anonymous_enable=YES
# 关于 real
user 的设置
local_enable=YES
write_enable=YES
local_umask=022
userlist_enable=YES
# 以上设置值的意义请往前翻到
vsftpd.conf
设置值的意义 章节去察看!
[root@test
root]# /etc/rc.d/init.d/xinetd restart |
这样您的最简易的 FTP 服务器就已经设置完成了!简单的很吧!而且还相当的安全呢!
针对仅有开放实体用户登录的设置
好了,这里我们再使用其他的设置值来修正我们的 vsftpd.conf 这个设置档。因为开放
anonymous 毕竟不太安全,所以我们将 anonymous 的登录权限关闭,并且仅让 real
user (实体用户) 登录我们的 vsftpd 时,要如何设置呢?我的要求如下:
-
使用台湾本地的时间而不是 GMT 时间;
-
所有在 /etc/passwd 里面出现的实体帐号均能登录 vsftpd
主机;
-
但是系统帐号 (如 root 等, UID 小于 500 的帐号)均不能使用
vsftpd ;
-
而且由于 badbird 与 nogoodbird 这两个帐号用户比较不乖,我要让这两个用户被关在自己的家目录当中(chroot);
-
并且限制数据的传输速度为 100 Kbytes/second;
-
当用户进入 /home 这个目录时,显示:『一般用户家目录』的字样在
Client 端的屏幕上;
-
用户可以进行上传、下载以及修改文件等等动作。
1. 基础设置档
[root@test
root]# vi /etc/vsftpd/vsftpd.conf
(或 /etc/vsftpd.conf)
# 关于主机与安全性的设置
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
pam_service_name=vsftpd
tcp_wrappers=YES
# 关于 anonymous
的设置
anonymous_enable=NO
# 关于 Real
User 的设置
local_enable=YES
write_enable=YES
local_umask=022
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
userlist_deny=YES
userlist_file=/etc/vsftpd.user_list
local_max_rate=100000
# 以上设置值的意义请往前翻到
vsftpd.conf
设置值的意义 章节去察看!
2. 限制实体用户在自己的家目录内
(chroot) 的设置档
[root@test
root]# vi /etc/vsftpd.chroot_list
badbird
nogoodbird
# 没有写到这个文件内的其他用户,就可以离开自己的家目录,
# 而到其他目录里面去浏览了!
3. 以 PAM 模块限制某些帐号无法登录主机的设置:
[root@test
root]# vi /etc/pam.d/vsftpd
# 会发现这样的字句:
auth .....
file=/etc/vsftpd.ftpusers ....
# 那个 file=..
后面接的文件名就是以 PAM 模块抵挡的帐号内容了!
[root@test
root]# vi /etc/vsftpd.ftpusers
# 底下列出的帐号将无法使用
vsftpd 喔!与 wu ftp 的 /etc/ftpusers 相同功能
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
4. 以 userlist_file
抵挡某些帐号的登录:
# 事实上,这个功能与上面的
PAM 功能相似啦!只是 PAM 是插件的,而
# 这个设置是
vsftpd 缺省提供的就是了!
[root@test
root]# vi /etc/vsftpd.user_list
# 这个文件的设置与上面
/etc/vsftpd.ftpusers 相同即可!
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
5. 设置进入目录时,显示的消息:
[root@test
root]# vi /home/.message
一般用户家目录
6. 重新启动
xinetd 啰!
[root@test
root]# /etc/rc.d/init.d/xinetd restart |
上面的设置里面有很多重复的地方,比方说 /etc/vsftpd.ftpusers
与 /etc/vsftpd.user_list 就是重复的设置了!不过,这样是比较安全啦!因为
PAM 模块是插件的程序,而另一个文件则是 vsftpd 提供的功能!但是请特别留意,因为很多用户可能会一不小心仅修改了其中一个文件,另一个文件则忘记修订,会很麻烦喔!
^_^!至于也是重点之一的 /etc/vsftpd.chroot_list 就可以将用户限制在他们自己的家目录内了!设置上很容易吧!附带说明,上面的文件名都与
vsftpd.conf 的设置有关!
看过了上面关于实体用户的设置之后,咦!那么如何让
root 可以登录 vsftpd 主机呢?!呵呵!就是将 /etc/vsftpd.ftpusers 与 /etc/vsftpd.user_list
这两个文件里面的 root 拿掉就可以啦!不过,本人可是不建议这么搞的喔!
针对仅有开放匿名用户登录的设置
好了,上面一章节谈的是仅开放 Real User ,那么这个章节我们就来谈一谈,没有
Real user 仅有 anonymous 的登录说!我想要的功能是这样的:
-
使用台湾本地的时间,而非 GMT 时间;
-
仅开放 anonymous 的登录;
-
文件传输的速限为 30 Kbytes/second;
-
允许 anonymous 上传文件到 /var/ftp/upload 这个目录当中,并且允许
anonymous 创建目录;
-
数据连接的过程 (不是命令信道!) 只要超过 60 秒没有回应,就强制
Client 断线!
-
只要 anonymous 超过十分钟没有动作,就予以断线;
-
被动式连接的端口口为 65400 到 65420 这几个 port number
即可;
-
最大同时上线人数限制为 50 人,且同一 IP 来源最大连接数量为
5 人;
-
不许使用 ASCII 格式上传或下载!
-
不许以 linux.vbird.org 这个网址为 email address 的密码输入!
OK!这样要如何设置呢!?
1. 基础设置档
[root@test
root]# vi /etc/vsftpd/vsftpd.conf
(或 /etc/vsftpd.conf)
# 与主机与安全性有关的设置
use_localtime=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
data_connection_timeout=60
idle_session_timeout=600
max_clients=50
max_per_ip=5
ascii_upload_enable=NO
ascii_download_enable=NO
connect_from_port_20=YES
pasv_min_port=65400
pasv_max_port=65420
pam_service_name=vsftpd
tcp_wrappers=YES
nopriv_user=ftp
# 关于 anonymous
的设置
anonymous_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
deny_email_enable=YES
banned_email_file=/etc/vsftpd.banned_emails
anon_max_rate=30000
# 关于 real
user 的设置
local_enable=NO
# 以上设置值的意义请往前翻到
vsftpd.conf
设置值的意义 章节去察看!
2. 创建抵挡不当
email address 的文件
[root@test
root]# vi /etc/vsftpd.banned_emails
linux.vbird.org
# 一行写一个
email 名称喔!
3. 创建可以上传的目录!
# 因为我们的
nopriv_user 设置为 ftp ,所以上传的目录拥有者为 ftp 喔
[root@test
root]# mkdir -p /var/ftp/upload
[root@test
root]# chown ftp /var/ftp/upload
4. 重新启动
xinetd 啰!
[root@test
root]# /etc/rc.d/init.d/xinetd restart |
经过上面的说明之后,您就可以很清楚的知道了 Real user 与 anonymous 在
vsftpd 当中的设置了,那么您就可以很轻易的就架设出一部 vsftpd 服务器了呢!赶紧尝试看看吧!
^_^
Client 端的设置:
Client 端并没有什么好设置的地方,主要就是 ftp 的使用了,请参考
wu
FTP 主机设置一节!
安全相关方面
有关安全性的设置方面,当然就是与登录以及防火墙有关啰!那就来谈一谈吧!
防火墙抵挡
要激活 vsftpd 自然就得要开放防火墙啰!所以您如果想要对 Internet 开放您的
FTP 服务器,就必须至少要有这一段 iptables 防火墙规则在您的规则列当中:
/sbin/iptables
-A INPUT -p TCP -i eth0 --dport 21 -j ACCEPT |
当然,您可以设置的更严密,请参考简易防火墙一文来设置
iptables 喔!此外,您的 TCP Wrappers 如果想要抵挡 192.168.1.2 这个 IP 来源的话,可以这样做:
[root@test
root]# vi /etc/hosts.deny
vsftpd: 192.168.1.2 |
这个应该没有问题吧! ^_^
Super
daemon 的管理
Super daemon 可以用来管理 Client 端的登录权限呢,这个重点没有忘记吧!
^_^ !那么我们如何设置呢?!举个简单的例子好了:假设我们的 vsftpd 只允许同一个
IP 来源可以拥有五个登录权限,而同一时间最多可以有 200 个 vsftpd 的连接,当超过
200 个 vsftpd 的连接时,将在 Client 端的画面当中显示『很抱歉,服务器忙碌中』的字样,该如何设置?
[root@test
root]# vi /etc/xinetd.d/vsftpd
# vsftpd is
the secure FTP server.
service ftp
{
disable
= no
socket_type
= stream
wait
= no
user
= root
server
= /usr/local/sbin/vsftpd
server_args
= /etc/vsftpd.conf
# 上面这个
server 的设置请依照您的主机环境来设置!
# 至于 server_args
则请写入您的 vsftpd 的设置档完整文件名即可!
per_source
= 5 # 与同一 IP 的连接数目有关
instances
= 200 # 同一时间最多的连接数目
no_access
= 192.168.1.3
banner_fail
= /etc/vsftpd.busy_banner
# 上面这个文件就是当主机忙碌中,则在
Client 端显示的内容!
log_on_success +=
PID HOST DURATION
log_on_failure +=
HOST
}
[root@test
root]# vi /etc/vsftpd.busy.banner
421 很抱歉,服务器忙碌中!
[root@test
root]# /etc/rc.d/init.d/xinetd restart |
这样设置就可以啦!很简单的一个设置动作,就可以让您的
vsftpd 变的更安全一些喔!
问题解决方案
如果发生 vsftpd 的问题怎么办?!有几个可能的解决方案喔:
-
如果在 Client 端上面发现无法连接成功,请检查:
-
iptables 防火墙的规则当中,是否开放了 client 端的
port 21 登录?
-
在 /etc/hosts.deny 当中,是否将 client 的登录权限挡住了?
-
在 /etc/xinetd.d/vsftpd 当中,是否设置错误,导致
client 的登录权限被取消了?
-
如果 Client 已经连上 vsftpd 服务器,但是却显示『 XXX file can't be opend
』的字样,请检查:
-
最主要的原因还是在于在 vsftpd.conf 当中设置了检查某个文件,但是您却没有将该文件设置起来,所以,请检查
vsftpd.conf 里面所有设置的文件文件名,使用 touch 这个指令将该文件创建起来即可!
-
如果 Client 已经连上 vsftpd 服务器,却无法使用某个帐号登录,请检查:
-
在 vsftpd.conf 里面是否设置了使用 pam 模块来检验帐号,以及利用
userlist_file 来管理帐号?
-
请检查 /etc/vsftpd.ftpusers 以及 /etc/vsftpd.user_list
文件内是否将该帐号写入了?!
-
如果 Client 无法上传文件,该如何是好?
-
最可能发生的原因就是在 vsftpd.conf 里面忘记加上这个设置『write_enable=YES』这个设置,请加入;
-
是否所要上传的目录『权限』不对,请以 chmod 或 chown
来修订;
-
是否 anonymous 的设置里面忘记加上了底下三个参数:
-
anon_other_write_enable=YES
-
anon_mkdir_write_enable=YES
-
anon_upload_enable=YES
-
是否因为设置了 email 抵挡机制,又将 email address
写入该文件中了!?请检查!
-
是否设置了不许 ASCII 格式发送,但 Client 端却以 ASCII
发送呢?请在 client 端以 binary 格式来发送文件!
上面是蛮常发现的错误,如果还是无法解决您的问题,请您务必分析一下这两个文件:/var/log/vsftpd.log
与 /var/log/messages ,里面有相当多的重要数据,可以提供给您进行调试喔!
对于 FTP 服务器软件选择的建议
在玩过了 Wu FTP, ProFTPD
以及 vsFTPD 之后,发现其实三个服务器各有优缺点啦!没有说哪一个特别的好,因为各有其利用的主机环境说!不过,其实我们还是有选择的思考方向啦。
-
考虑较为单纯的 FTP 设计,而且要求安全性:如果我们不要个别控制每个目录的流量、不必控制上传/下载比例、不必针对不同的实体用户或者是访客进行不同的权限设置,仅分
anonymous 与 real user 两种身份来让用户登录主机的话,那么上上之选应该是
vsftpd 这个服务器才对!因为他设置上真的比较简单,而且在整体套件的设计上又比较安全喔!
-
多样化的设计,安全性要求亦不低:虽然
Wu FTP 与 Proftpd 可以达到的 FTP 服务器设置是一样的,不过 Proftpd 的设置又比
Wu FTP 简单一些,有点类似 Apache 的目录管理设置,此外,
Proftpd 也可以达到控制上/下传比例、流量控制、针对不同的目录设置不一样的权限等设计,也比
Wu FTP 安全一些,所以,在多样化的 FTP 设计考量下,可以选择 Proftpd 喔!
-
考虑主机的要求:某些主机本来就是含有
Wu FTP 或者是 vsftpd 等不同的 FTP 服务器软件,您又不想重新安装其他的服务器软件,那么使用您的
Linux distributions 所提供的 FTP 软件来架设您的 FTP 即可啊!不需要考虑其他的
FTP 软件咯。不过,请记得将您的 FTP 软件更新到最新版喔!避免被恶意攻击说!
事实上,也就是说,以 vsftpd 为主要的考虑依据,但是如果觉得 vsftpd 无法满足您的
FTP 服务器设计需求,就改以 Proftpd 来设计,最后,如果您也是懒人一族,使用
Wu FTP 就算了吧! ^_^
参考资源:
修改历史:
2003/09/03:首次完成
2003/09/04:
加入 FTP 服务器软件的选择建议