Chinaunix首页 | 论坛 | 博客
  • 博客访问: 953199
  • 博文数量: 214
  • 博客积分: 10173
  • 博客等级: 上将
  • 技术积分: 1867
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-18 13:48
文章分类

全部博文(214)

文章存档

2012年(1)

2010年(13)

2009年(5)

2008年(98)

2007年(97)

分类: LINUX

2008-07-01 08:37:59

vsFTPd 服务器初学者指南


目录

1、vsFTPd,目前常用FTP服务器套件;
2、ftp 用户管理解说;
2.1、匿名ftp 用户和用户组的理解;
2.2、匿名ftp 用户和ftp用户组是否可以删除;

3、vsFTPd的安装;
4、vsFTPd的服务器的启动和关闭;
4.1、vsFTPd服务器启动和关闭的通用方法;
4.2、在Fedora/Redhat/CentOS中vsFTPd 服务器的启动和关闭:

5、vsFTPd的服务器和防火墙及SELINUX的关系;
6、500 OOPS: vsftpd: refusing to run with writable anonymous root
7、关于vsFTPd配置文件的说明;
8、关于vsFTPd服务器的一些常用功能的实现;
8.1、关于匿名上传下载的实现;
8.2、关于添加本地用户及打开读写权限示例;
8.4、如何实现虚拟路径?
8.5、打开vsFTP服务器的日志功能;
8.6、如何定制欢迎信息;
8.7、硬盘空间有限,如何把帐号ftp默认的路径/var/ftp更改到别处?
8.8、如何让vsFTP服务器限制链接数,以及每个IP最大的链接数?
8.9、如何限制传输速度?
8.10、如何有选择的把用户限制在家目录中呢?



+++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++

1、vsFTPd,目前常用FTP服务器套件;

vsFTPd是一款在Linux发行版中最受推崇的FTP服务器程序;特点是小巧轻快,安全易用;能让其自身特点得发发挥和掌握,也然最主要的是会用;

目前在开源操作系统中常用的FTPD套件主要有ProFTPD、PureFTPd和wuftpd等;至于哪个FTP服务器套件更好,哪个是你最熟悉的,哪个就是最好的;

2、ftp 用户管理解说;

FTP服务器对用户的管理,在默认的情况下是根据 /etc/passwd及/etc/group 来进行的,所以我们一定要了解Linux系统用户和用户组的管理,用户和用户组的管理是一切应用的的基础,有的弟兄不想去了解基础的东西,就想一步成架好各种服务器,事实证明这种学习方法是最不明智的;虽然在您可能在几分钟启动了ftp服务器,但遇到问题时,您不一定能知道是哪里出错;所以基础还是极为重要的;

推荐文章: 《Linux 用户(user)和用户组(group)管理概述》

2.1、匿名ftp 用户和用户组的理解;

当我们访问各大FTP上访问时,可能我们不去想我们以什么身份登录的,如果他的FTP允许匿名登录的话;比如我们在浏览器上打入;

ftp://mirrors.kernel.org

ftp://ftp:ftp@mirrors.kernel.org


我们会发现上面的两行最终都能访问,而且显示的结果也完全一样,最终都跳到 ftp://mirrors.kernel.org 地址;那我们访问这个FTP时,是不是有用户和密码呢?是的,也是需要在的,只是在服务器端允许匿名访问,而匿名访问的用户名和密码都是ftp,只是我们因为匿名访问,没有感觉到他有用户名和密码罢了。第二个地址就是以ftp用户,密码也是ftp来访问 ftp://mirrors.kernel.org;

如果我们以ftp命令连接 mirrors.kernel.org 时,我们会发现需要输入用户ftp,密码ftp才能访问;

在FTP服务器中,匿名用户的用户名和密码都是ftp ;这个用户可以在您的操作系统中的 /etc/passwd 中能找得到;可能有类似下面的一行;

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin


说明:

/etc/passwd 是系统用户的配置文件;/etc/group是系统用户组配置文件,您可以通过 《Linux 用户(user)和用户组(group)管理概述》 及其相关文档中了解一些用户管理的一些基础知识;

在ftp用户这行中,我们看到七个字段,每个字段写字段之间用:号分割;

ftp 是用户名
x 是密码字段,是隐藏的;
14 是用户的UID字段,可以自己来设定,不要和其它用户的UID相同,否则会造成系统安全问题;
50 用用户组的GID,可以自己设定,不要和其它用户组共用FTP的GID,否则会造成系统全全问题;
FTP User 是用户说明字段;
/var/ftp 是ftp用户的家目录,可以自己来定义;
/sbin/nologin 这是用户登录SHELL ,这个也是可以定义的,/sbin/nologin 表示不能登录系统;系统虚拟帐号(也被称为伪用户)一般都是这么设置。比如我们把ftp用户的/sbin/nologin 改为 /bin/bash ,这样ftp用户通过本地或者远程工具ssh或telnet以真实用户身份登录到系统。这样做对系统来说是不安全的;如果您认为一个用户没有太大的必要登录到系统,就可以只给他FTP帐号的权限,也就是说只给他FTP的权限,而不要把他的SHELL设置成 /bin/bash 等;

关于ftp用户组的理解:

我们查看 /etc/group 的时候,会发现类似这样一条;

ftp:x:50:


/etc/group 是用户组的管理配置文件,上面这行表示用户组ftp,x是密码段,50是GID;我们对照在/etc/passwd中的ftp那行得知ftp用户是属于ftp用户组的,因为ftp用户那行中的GID和ftp用户组的GID是相同的;

2.2、匿名ftp 用户和ftp用户组是否可以删除

在一般情况下是不能把/etc/passwd和/etc/group 中有把ftp用户和用户组的行删除的,因为FTP服务器是需要他们来对FTP用户实现管理,在默认的情况下。

虽然不能删除,但对/etc/passwd及/etc/group中的ftp用户及ftp用户组的一些相关的东西是能修改的;比如我们可以把ftp用户的家目录改掉,也可以把ftp用户的UID改掉 ... ... 前提是你对用户管理有所了解,系统用户管理是一切应用基础之一,可能初学Linux的弟兄并不了解用户管理的重要性,但慢慢您就会发现这个道理;

3、vsFTPd的安装;

在最新的各大发行版中的安装盘中都有vsFTPd的软件包,您用相应发行版提供的软件包管理工具就能安装上;当然您可以到各大发行版的FTP镜像中找到vsftpd的软件包;当然也能用软件包的管理工具在线安装;vsftpd的软件包本来不大,花不了多长时间,两分钟就够了吧;因为本文是初学者教程,我严重推荐您用发行版提供的软件来安装,不推荐您自己来编译源码包的安装方式;

如果您用的是Fedora 或Redhat 系统,可以用下面的命令在线安装;

[root@localhost ~]# yum install vsftpd


如果是debian 类系统,可以用apt 来在线安装;

[root@localhost ~]# apt-get install vsftpd


如果您是RPM的系统,也可以找到vsftpd-xxxx.rpm 的包来通过rpm命令来安装;

[root@localhost ~]# rpm -ivh vsftpd*.rpm


您可以下载源码包来安装

比如我们下载的是 vsftpd-2.0.3.tar.gz ;

[root@localhost ~]# tar zxvf vsftpd-2.0.3.tar.gz
[root@localhost ~]# cd vsftpd-2.0.3
[root@localhost ~]# make ;make install
[root@localhost ~]# cp vsftpd.conf /etc


然后修改/etc/vsftpd.conf ,在配置文件的最后一行加入下面一行;

listen=yes


源码包安装的方法,如果您的系统是RPM包管理的系统,可以删除/etc/xinetd.d/vsftpd 这个文件;然后启动xinetd 服务器;

[root@localhost ~]# /etc/init.d/xinetd restart
停止 xinetd: [ 确定 ]
启动 xinetd: [ 确定 ]


vsFTPd运行有两种模式,在RPM包管理的系重审统,大多是由Fedora/Redhat 开发而来,对于这样的系统有xinted服务器一说;对于非RPM包管理的系统,一般没有xinted这一说。为了保证本文档的统一,我们都不要用xinetd模式,而用initd运行模式来启动和管理服务器,也就是独立运行模式; 至于什么是xinted和inted 模式,您可以参考《 用vsFTPd自架Linux网络安装服务器》

4、vsFTPd的服务器的启动和关闭;

vsFTPd服务器启动和关闭是极容易的;我们可以直接把服务器运行调到后台运行;这是几乎所有服务器管理的运行方式;

4.1、vsFTPd服务器启动和关闭的通用方法;

运行vsftpd命令,要用到root权限,如果您当前操作用户并非是root,可以用su切换到root权限;关于root权限的切换,您有两种方式,一种是su,另一种是sudo;请参考: 《Linux 系统中的超级权限的控制》

vsFTPd服务器的运行;

[root@localhost ~]# /usr/sbin/vsftpd &
[root@localhost ~]# /usr/local/sbin/vsftpd &


vsFTPd服务器是否运行起来;

我们可以通过pgrep vsftpd 来查看vsftpd是否运行起来;

[root@localhost ~]# pgrep vsftpd
4248


上面显示vsFTPd服务器运行起来了,您可以通过ftp命令、lftp工具或gftp或其它的FTP客户端来测试连接;

vsFTPd 服务器关闭:

我们用pkill vsftpd 来杀死vsftpd进程,这样就把vsFTPd关闭,用psgrep vsftpd 来查看进程,如果没有进程,证明vsFTPd已经关掉;当然也要用到root权限。

[root@localhost ~]# pkill vsftpd
[root@localhost ~]# pgrep vsftpd




4.2、在Fedora/Redhat/CentOS中vsFTPd 服务器的启动和关闭:

在Fedora/Redhat/CentOS中,也可以用下面的方法来启动vsFTPd;当然也要用到root权限;

[root@localhost beinan]# /etc/init.d/vsftpd start
为 vsftpd 启动 vsftpd: [ 确定 ]


重新启动vsFTPd用下面的命令;

[root@localhost beinan]# /etc/init.d/vsftpd restart
关闭 vsftpd: [ 确定 ]
为 vsftpd 启动 vsftpd: [ 确定 ]


关掉vsFTPd服务器,应该用下面的命令;

[root@localhost beinan]# /etc/init.d/vsftpd stop
关闭 vsftpd: [ 确定 ]




5、vsFTPd的服务器和防火墙及SELINUX的关系;(重要)

我在论坛上看到有些弟兄说vsFTPd服务器启动正常,但却不能访问或用户不能上传文件,我感觉应该是防火墙或SELINUX的事;可能FTPD服务器被防火墙或SELINUX的安全机制防住了。所以您必须要让防火墙通过ftp,当然也要让SELINUX通过ftp服务器才行;

在Fedora/Redhat/CentOS中,您要设置一下防火墙,可以把防火墙关掉,或者在自定义中让ftp “通过”防火墙;

[root@localhost ~]# system-config-securitylevel-tui


或者运行一下如下的命令,清除防火墙规则(通用);

[root@localhost beinan]# iptables -F


关于SELINUX服务器的解说 ,可能老手或新手对SELINUX都有点麻烦,建议您SELINUX;或者让vsFTPd服务器跳过SELINUX启动;也就是说要用到 4.1、vsFTPd服务器启动和关闭的通用方法;;这在Fedora/Redhat/CentOS中这样启动vsFTPd服务器是有效的;

当然您可也可以关掉SELINUX,在/etc/selinux/config 配置文件如下;

/etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=Disabled #这样就把SELINUX服务器关掉了,请重新启动系统;
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted




6、500 OOPS: vsftpd: refusing to run with writable anonymous root

如果我们已经把vsFTPd服务器启动好了,但登录测试是会出现类似下面的提示;

500 OOPS: vsftpd: refusing to run with writable anonymous root

这表示ftp用户的家目录的权限不对,应该改过才对;

[root@localhost ~]# more /etc/passwd |grep ftp
ftp:x:1000:1000:FTP User:/var/ftp:/sbin/nologin


我们发现ftp用户的家目录在/var/ftp,就是这个/var/ftp的权限不对所致,这个目录的权限是不能打开所有权限的;是您运行了chmod 777 /var/ftp所致;如果没有ftp用户这个家目录,当然您要自己建一个;

如下FTP用户的家目录是不能针对所有用户、用户组、其它用户组完全开放;
[root@localhost ~]# ls -ld /var/ftp
drwxrwxrwx 3 root root 4096 2005-03-23 /var/ftp


修正这个错误,应该用下面的办法;

[root@localhost ~]# chown root:root /var/ftp
[root@localhost ~]# chmod 755 /var/ftp


有的弟兄可能会说,那匿名用户的可读、可下载、可上传怎么办呢?这也简单,在/var/ftp下再建一个目录,权限是777的就行了,再改一改vsftpd.conf就OK了;没有什么难的;

vsFTPd出于安全考虑,是不准让ftp用户的家目录的权限是完全没有限制的,您可以去读一下vsFTPd的文档就明白的了;否则也不能称为最安全的FTP服务器了,对不对?


7、关于vsFTPd配置文件的说明;

vsftpd.conf是vsFTPd服务器的配置文件,此文件一般是/etc/vsftpd.conf或/etc/vsftpd/vsftpd.conf ,以系统为准吧。。

vsftpd.conf配置文件就是vsFTPd服务器的全局控制文件,此配置文件中,每行应该算做一个规则;前面带有#号的服务器不会解释,这和apache 的配置文件类似;#后所接的内容一般是说明性的,或者是关掉某些功能的选项;

vsftpd.conf 这个配置文件并不包括所有您想实现的功能,有些功能的实现,我们要自己动手来解决,我们要学会查vsFTPd的文档和FAQ等,虽然是英文的,但都是比较简单的;我们要习惯看洋文文档,为什么呢?因为Linux本来就是洋人厉害,重量级的软件都是洋人的。呵,兄弟不要抱怨,谁让我们落后了呢?

注意:修改完配置文件后,一定要重启vsFTPd服务器才能生效,切记~~


8、关于vsFTPd服务器的一些常用功能的实现;

8.1、关于匿名上传下载的实现;

关于匿名上传,其实也比较简单,首先我们要修改一下vsftpd.conf ,此文件位于 /etc/目录下,可能是/etc/vsftpd.conf,也可能是/etc/vsftpd/vsftpd.conf文件。以您的系统环境为准;

首先:我们要改一下vsftpd.conf,确保有以下几行;

anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_umask=022


其次:在ftp用户家目录的下建一个文件夹,并修改其权限为完全开放;

ftp用户的家目录在哪?我们前面已经说了,要通过/etc/passwd来查看;也可以通过finger ftp来查看;

[root@localhost beinan]# finger ftp
Login: ftp Name: FTP User
Directory: /var/ftp Shell: /sbin/nologin


这说明ftp用户的家目录在/var/ftp ,我们要在这个目录下建一个目录,然后把他的权限设置为任何用户可读可写可执行就行了;一般的情况下,在发行版中,有一个/var/ftp/pub的目录,如果没有,您也可以自己建一个;把配置文件改好后,只要把/var/ftp下的任何一个目录的权限打开,都可以用来匿名上传和下载;

比如您想让匿名用户上传和下载都在/var/ftp/pub,就可以把/var/ftp/pub的权限打开,如果没有这个目录,您要自己建一个;

[root@localhost ~]# mkdir /var/ftp/pub
[root@localhost ~]# chmod 777 /var/ftp/pub


这样上传的时候传到pub目录就OK了,对不对??

8.2、关于添加本地用户及打开读写权限示例;

FTP用户一般是不能登录系统的,这也是为了安全。在系统中,没有权限登录系统的用户一般也被称之为虚拟用户;虚拟用户也是要写进/etc/passwd中;这只是一种虚拟用户的方法,但说实在的并不是真正的虚拟用户,只是把他登录SHELL的权限去掉了,所以他没有能力登录系统;

如果我们想把beinan这个用户目录定位在/opt/beinan这个目录中,并且不能登录系统;我们应该如下操作

[root@localhost ~]# adduser -d /opt/beinan -g ftp -s /sbin/nologin beinan
[root@localhost ~]# passwd beinan
Changing password for user beinan.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]#


其实这还是不够的,还要改一下配置文件vsftpd.conf ,以确保本地虚拟用户能有读写权限;

local_enable=YES
write_enable=YES
local_umask=022




8.4、如何实现虚拟路径?

比如:
/home/a 映射为 ftp://localhost/a
/home/b/c 则为 ftp://localhost/c


其实这个不能说是vsFTPd的内容,其实我们早就接触过了,可能我们没有注意,我们可以通过如下的方法来实现。
[root@localhost ~]# mount --bind [原有的目录] [新目录]


比如我的ftp的默认目录是/var/ftp,我想把/mnt/LinG/WinSoft文件夹,映射到/var/ftp目录中,我就如下操作

我们要先在/var/ftp目录中建一个目录
[root@localhost ~]# mkdir /var/ftp/WinSoft


然后执行mount命令
[root@localhost ~]# mount --bind /mnt/LinG/WinSoft /var/ftp/WinSoft


这样就OK了。

8.5、打开vsFTP服务器的日志功能;

把下面xferlog_file前面的#号对掉,也就是把vsftp的log功能打开,这样我们就能在/var/log目录下查看vsftpd.log。这是vsFTP的日志功能,这对于我们来说是极为重要的。
xferlog_file=/var/log/vsftpd.log




8.6、如何定制欢迎信息;

如何定制欢迎信息,也就是我们登入有些FTP之后,会出现类似:欢迎您来到LinuxSir FTP,在这里,您会得到最真诚的帮助,如果有什么问题和建议,请来信,多谢。

实现这个并不难,我们可以查看vsftpd.conf文件中,是否有这行。

dirmessage_enable=YES
message_file=.message


如果没有就加上,如果dirmessage_enable=YES前面有#号,就把#号去掉。其实FTP信息默认的就是.message,所以可以不加 message_file= 来指定。自己指定也行,无所谓的事;

然后我们制定一个.message文件,写上您想要写的东西,比如是.message的内容是如下的:

--欢迎您来到LinuxSir FTP!
--在这里,您会得到最真诚的帮助;
--如果有什么问题和建议,请来信,多谢。


我们可以用编辑器来写这个.message,我想这个过程就不用说了吧。

然后我们把.message这个文件复制到各个用户的家目录中。比如我的FTP的一个用户是beinan,这个用户所在的家目录是/opt/beinan
我们就要把.message放在/opt/beinan这个目录下。如果系统用户ftp,他的目录就是/var/ftp这个目录,这个是默认的,当匿名用户登入时就访问的是/var/ftp这个目录。我们要让匿名用户能看到欢迎信息。就要把.message放在/var/ftp目录中。其它的用户,也无非就是类似的操作。

8.7、硬盘空间有限,如何把帐号ftp默认的家目录更改到别处?

我的硬盘空间有限,如何把帐号ftp默认的路径/var/ftp更改到别处?或者是,我的linux所有的目录都放在/根分区,因为空间紧张,我能否把ftp这个用户的默认路径放到别的分区??

对于ftp这个用户的管理,我们应该查看/etc/passwd ,然后修改ftp用户那行;

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin


比如我们想把ftp用户的家目录改为/opt/ftp,则要把类似上一行改为

ftp:x:14:50:FTP User:/opt/ftp:/sbin/nologin


然后我们要建立ftp用户的新的家目录;

[root@localhost ~]# mkdir /opt/ftp
[root@localhost ~]# chmod 755 /opt/ftp
[root@localhost ~]# chown root:root /opt/ftp


如果默认的ftp磁盘空间紧张,我们其实也可以用虚拟路径映射的方法来解决;也就是mount --bind的办法;看情况吧,哪个适合就是最好的方法;

8.8、如何让vsFTP服务器限制链接数,以及每个IP最大的链接数?

应该改vsFTPd服务器的配制文件vsftpd.conf,加入下面的两行:

max_clients=数字
max_per_ip=数字


举例:我想让我的vsFTP最大支持链接数为100个,每个IP,最多能支持5个链接,所以我应该在vsftpd.conf中加上如下的两行:

max_clients=100
max_per_ip=5

改好了配制文件,不要忘记启动vsftp服务器。


8.9、如何限制传输速度?


anon_max_rate=数字


注:这是匿名的速度
local_max_rate=数字

注:这是vsFTP服务器上本地用户的速度


注:这个数字的单位是byte,所以我们要计算一下。比如我想让匿名用户和vsFTP上的用户都以80KB下载,所以这个数字应该是1024x80=81920
所以我们要在vsftpd.conf中加入下面的两行

anon_max_rate=81920
local_max_rate=81920




8.10、如何有选择的把用户限制在家目录中呢?

我们要自己建一个文件,在/etc目录中或/etc/vsftpd目录中(假如您的vsftpd配置文件都是放在这个目录的话);
#touch /etc/vsftpd.chroot_list

以beinan和nanbei这两个用户限制在他们所在的家目录中,而其它的FTP用户不做此限制。


在vsftpd.chroot_list这个文件中,把beinan和nanbei添上去就行,注意,每个用户占一行。
beinan
nanbei


然后改/etc/vsftpd/vsftpd.conf文件,找如下的两行

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list


如果没有这样的两行,就可以自己添加上去也是一样的。

设置好后,重新vsFTPD服务器。

补充一之补充:如何把系统内所有的FTP用户都限制在家目录中呢??经juliaugong兄的提示,我查找了vsFTPd的洋文说明,证明这个选项是一刀切的解决所有的用户都能限制在家目录中

我们可以通过更改vsftpd.conf文件,加入如下的一行
chroot_local_user=YES


改完配制文件,不要忘记重启vsFTPd服务器;

8.11、如何让绑定IP到vsFTPd?

如何让绑定IP到vsFTPd?也就是说,如何让用户只能通过某个IP来访问FTP。其实这个功能很有意思。如果绑定的是内网的IP,外部是没有办法访问的。如果绑定的是对外服务的IP,内网也只能通过对外服务的IP来访问FTP

在vsftpd.conf中加一行,以我的局域网为例,请看第一帖中的操作环境,这样外网就不能访问我的FTP了,内网也可能通过192.168.0.2来访问FTP;

listen_address=192.168.0.2

Tags: vsftpd , ftp
Linux | 评论(2) | 引用(0) | 阅读(841)
xiaofei 2007/08/27 17:58
7. 为VSFTPD配置虚拟用户(文本方式)
7.1 创建虚拟与用户数据库
1. 创建loguser.txt,格式如下:

userid
pass


比如我创建两个用户:tony 密码为tonypass,etony密码为etonypass 则loguser.txt的内容如下:


tony
tonypass
etony
etonypass


2. 安装数据库生成工具:


# aptitude install libdb3-util


3. 生成数据库:


# db_load -T -t hash -f loguser.txt /etc/vsftpd_login.db


4. 设置数据库文件的访问权限:


# chmod 600 /etc/vsftpd_login.db


7.2 配置PAM文件
修改/etc/pam.d/vsftpd 内容如下:


auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login


7.3 为虚拟用户创建本地系统用户

useradd -d /home/ftpsite virtual
mkdir /home/ftpsite
chown virtual.virtual /home/ftpsite
ls -ld /home/ftpsite
drwxr-sr-x 2 virtual virtual 48 2006-08-18 05:48 /home/ftpsite


在目录下创建一些内容


echo "etony's vsftpd server" > /home/ftpsite/msg

chown virtual.virtual /home/ftpsite/msg


7.4 创建/etc/vsftpd.conf
根据需要创建/etc/vsftpd.conf,但要确保含有一下设置:


anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=virtual
listen=YES
listen_port=21
pasv_min_port=30000
pasv_max_port=30999



7.5 启动vsftpd

/etc/init.d/vsftpd start|restart


7.6 测试


$ lftp localhost -u tony,tonypass
lftp tony@localhost:~> ls
-rw-r--r-- 1 1001 1001 22 Aug 17 21:49 msg
lftp tony@localhost:/> exit
$ lftp localhost -u tony,tonyp
lftp tony@localhost:~> ls
ls: Login failed: 530 Login incorrect.
xiaofei 2007/08/27 17:46
所需要的套件以及套件結構

vsftpd 所需要的套件只有一個,那就是 vsftpd 啊!^_^!如果你的 CentOS 沒有安裝, 請利用 yum install vsftpd 來安裝他吧!套件很小,下載連同安裝不需要幾秒鐘就搞定了! 而事實上整個套件提供的設定檔也少的令人高興!簡單易用就是 vsftpd 的特色啊! ^_^! 這些設定資料比較重要的有:

/etc/vsftpd/vsftpd.conf
嚴格來說,整個 vsftpd 的設定檔就只有這個檔案!這個檔案的設定是以 bash 的變數設定相同的方式來處理的, 也就是『參數=設定值』來設定的,注意, 等號兩邊不能有空白喔!至於詳細的 vsftpd.conf 可以使用 『 man 5 vsftpd.conf 』來詳查。

/etc/pam.d/vsftpd
這個是 vsftpd 使用 PAM 模組時的相關設定檔。主要用來作為身份認證之用,還有一些使用者身份的抵擋功能, 也是透過這個檔案來達成的。你可以察看一下該檔案:
[root@linux ~]# cat /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.ftpusers
與上一個檔案有關係,也就是 PAM 模組 (/etc/pam.d/vsftpd_ 所指定的那個無法登入的使用者設定檔啊! 這個檔案的設定很簡單,你只要將『不想讓他登入的帳號』寫入這個檔案即可。一行一個帳號,看起來像這樣:
[root@linux ~]# cat /etc/vsftpd.ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
....底下省略....


瞧見沒有?絕大部分的系統帳號都在這個檔案內喔,也就是說,系統帳號預設是沒有辦法使用 vsftpd 的啦! 如果你還想要讓某些使用者無法登入,寫在這裡是最快的!

/etc/vsftpd.user_list
這個檔案是否能夠生效與 vsftpd.conf 內的兩個參數有關,分別是『 userlist_enable, userlist_deny 』。 如果說 /etc/vsftpd.ftpusers 是 PAM 模組的抵擋設定項目,那麼這個 /etc/vsftpd.user_list 則是 vsftpd 自訂的抵擋項目。事實上這個檔案與 /etc/vsftpd.ftpusers 幾乎一模一樣, 在預設的情況下,你可以將不希望可登入 vsftpd 的帳號寫入這裡。不過這個檔案的功能會依據 vsftpd.conf 設定檔內的 userlist_deny={YES/NO} 而不同,這得要特別留意喔!

/etc/vsftpd.chroot_list
這個檔案預設是不存在的,所以你必須要手動自行建立。這個檔案的主要功能是可以將某些帳號的使用者 chroot 在他們的家目錄下!但這個檔案要生效與 vsftpd.conf 內的『 chroot_list_enable, chroot_list_file 』兩個參數有關。 如果你想要將某些實體用戶限制在他們的家目錄下而不許到其他目錄去,可以啟動這個設定項目喔!

/usr/sbin/vsftpd
這就是 vsftpd 的主要執行檔咯!不要懷疑, vsftpd 只有這一個執行檔而已啊!

/var/ftp/
這個是 vsftpd 的預設匿名者登入的根目錄喔!

大致上就只有這幾個檔案需要注意而已,而且每個檔案的設定又都很簡單!真是不錯啊!



--------------------------------------------------------------------------------
vsftpd.conf 設定值說明

事實上,/etc/vsftpd/vsftpd.conf 本身就是一個挺詳細的設定檔,且使用『 man 5 vsftpd.conf 』則可以得到完整的參數說明。 不過我們這裡依舊先將 vsftpd.conf 內的常用參數給他寫出來,希望對您有幫助:


--------------------------------------------------------------------------------

與主機較相關的設定值
connect_from_port_20=YES (NO)
記得在前一小節提到的主動式連線使用的 FTP 伺服器的埠號嗎?這就是 ftp-data 的埠號;

listen_port=21
vsftpd 使用的命令通道之埠號,如果您想要使用非正規的埠號,在這個設定項目修改吧! 不過你必須要知道,這個設定值僅適合以 stand alone 的方式來啟動喔!(對於 super daemon 無效)

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)
是否使用本地時間?vsftpd 預設使用 GMT 時間(格林威治),所以會比台灣晚 8 小時,建議設定為 YES 吧!

write_enable=YES (NO)
如果你允許使用者上傳資料時,就要啟動這個設定值;

connect_timeout=60
單位是秒,在資料連接的主動式連線模式下,我們發出的連接訊號在 60 秒內得不到用戶端的回應,則不等待並強制斷線咯。

accept_timeout=60
當使用者以被動式 PASV 來進行資料傳輸時,如果主機啟用 passive port 並等待 client 超過 60 秒而無回應, 那麼就給他強制斷線!這個設定值與 connect_timeout 類似,不過一個是管理主動連線,一個管理被動連線。

data_connection_timeout=300
如果伺服器與用戶端的資料連線已經成功建立 (不論主動還是被動連線),但是可能由於線路問題導致 300 秒內還是無法順利的完成資料的傳送,那用戶端的連線就會被我們的 vsftpd 強制剔除!

idle_session_timeout=300
如果使用者在 300 秒內都沒有命令動作,強制離線!

max_clients=0
如果 vsftpd 是以 stand alone 方式啟動的,那麼這個設定項目可以設定同一時間,最多有多少 client 可以同時連上 vsftpd 哩!?

max_per_ip=0
與上面 max_clients 類似,這裡是同一個 IP 同一時間可允許多少連線?

pasv_min_port=0, pasv_max_port=0
上面兩個是與 passive mode 使用的 port number 有關,如果您想要使用 65400 到 65410 這 11 個 port 來進行被動式連線模式的連接,可以這樣設定 pasv_max_port=65410 以及 pasv_min_port=65400。 如果是 0 的話,表示隨機取用而不限制。

ftpd_banner=一些文字說明
當使用者連線進入到 vsftpd 時,在 FTP 用戶端軟體上頭會顯示的說明文字。不過,這個設定值資料比較少啦! 建議你可以使用底下的設定值來取代這個項目;

banner_file=/path/file
這個項目可以指定某個純文字檔作為使用者登入 vsftpd 伺服器時所顯示的歡迎字眼。


--------------------------------------------------------------------------------

與實體用戶較相關的設定值
guest_enable=YES (NO)
若這個值設定為 YES 時,那麼任何非 anonymous 登入的帳號,均會被假設成為 guest (訪客) 喔! 至於訪客在 vsftpd 當中,預設會取得 ftp 這個使用者的相關權限。但可以透過 guest_username 來修改。

guest_username=ftp
在 guest_enable=YES 時才會生效,指定訪客的身份而已。

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_enable=YES (NO)
是否藉助 vsftpd 的抵擋機制來處理某些不受歡迎的帳號,與底下的設定有關;

userlist_deny=YES (NO)
當 userlist_enable=YES 時才會生效的設定,若此設定值為 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 格式下載檔案。

ascii_upload_enable=YES (NO)
與上一個設定類似的,只是這個設定針對上傳而言!預設是 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 啟動的模式

vsftpd 可以擁有兩種啟動的方式,分別是一直在監聽的 stand alone ,一種則是透過 xinetd 這個 super daemon 來管理的方式,兩種方式所使用的啟動程序不太相同,而我們的 CentOS 則預設是以 stand alone 來啟動的。 那什麼時候應該選擇 stand alone 或者是 super daemon 呢?如果你的 ftp 伺服器是提供給整個網際網路來進行大量下載的任務,例如各大專院校的 FTP 伺服器,那建議你使用 stand alone 的方式, 服務的速度上會比較好。如果僅是提供給內部人員使用的 FTP 伺服器,那使用 super daemon 來管理即可啊。


利用系統提供的 script 來啟動 vsftpd

其實 CentOS 不用作任何設定就能夠啟動 vsftpd 囉!是這樣啟動的啦:
[root@linux ~]# /etc/init.d/vsftpd start
[root@linux ~]# netstat -tulnp| grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 11689/vsftpd
# 看到囉,是由 vsftpd 所啟動的呢!



自行設定以 super daemon 來啟動

如果你的 FTP 是很少被使用的,那麼利用 super daemon 來管理不失為一個好主意。 不過若你想要使用 super daemon 管理的話,那就得要自行修改一下設定檔了。其實也不難啦,你應該要這樣處理的:
[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 找到底下這一行:大約在 109 行左右啦!
listen=YES
# 將他改成這樣啊:
listen=NO


接下來修改一下 super daemon 的設定檔,底下這個檔案你必須要自行建立的,原本是不存在的喔:
[root@linux ~]# vi /etc/xinetd.d/vsftpd
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
disable = no
}


然後嘗試啟動看看呢:
[root@linux ~]# /etc/init.d/vsftpd stop
[root@linux ~]# /etc/init.d/xinetd restart
[root@linux ~]# netstat -tulnp| grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 32274/xinetd



有趣吧!兩者啟動的方式可不一樣啊!管理的方式就會差很多的呦! 不管你要使用哪種啟動的方式,切記不要兩者同時啟動,否則會發生錯誤的! 你應該使用 chkconfig --list 檢查一下這兩種啟動的方式,然後依據你的需求來決定用哪一種方式啟動。 鳥哥底下的設定都會以 stand alone 這個 CentOS 預設的啟動模式來處理,所以趕緊將剛剛的動作給他改回來喔!



--------------------------------------------------------------------------------
CentOS 的 vsftpd 預設值

在 CentOS 的預設值當中,vsftpd 是同時開放實體用戶與匿名使用者的,CentOS 的預設值如下:
[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 底下鳥哥僅列出有設定的項目,若無設定時,請以您系統的 man 5 vsftpd.conf
# 結果去搜尋預設值即可喔!
# 1. 與匿名者有關的資訊:
anonymous_enable=YES

# 2. 與實體用戶有關的設定
local_enable=YES
write_enable=YES
local_umask=022
userlist_enable=YES

# 3. 與主機有關的設定
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
pam_service_name=vsftpd
listen=YES
tcp_wrappers=YES


上面各項設定值請自行參考前一小節 vsftpd.conf 設定項目的詳細說明吧。 而通過這樣的設定值咱們的 vsftpd 可以達到如下的功能:

你可以使用 anonymous 這個匿名帳號或其他實體帳號 (/etc/passwd) 登入;
anonymous 的家目錄在 /var/ftp ,且無上傳權限,亦已經被 chroot 了;
實體用戶的家目錄參考 /etc/passwd ,並沒有被 chroot ,可前往任何有權限可進入的目錄中;
任何於 /etc/vsftpd.ftpusers 內存在的帳號均無法使用 vsftpd ;
可利用 /etc/hosts.{allow|deny} 來作為基礎防火牆;
當用戶端有任何上傳/下載資訊時,該資訊會被紀錄到 /var/log/vsftpd.log 中;
主動式連線的埠口為 port 20;
使用格林威治時間 (GMT)。
所以當你啟動 vsftpd 後,你的實體用戶就能夠直接利用 vsftpd 這個服務來傳輸他自己的資料了。 不過比較大的問題是,因為 vsftpd 預設使用 GMT 時間,因為你在用戶端使用 ftp 軟體連接到 FTP 伺服器時,會發現每個檔案的時間都慢了八小時了!真是討厭啊! 所以建議你加設一個參數值,就是『 use_localtime=YES 』囉!
[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 在這個檔案當中加入這一句即可
use_localtime=YES
.....底下省略.....

[root@linux ~]# /etc/init.d/vsftpd restart


如此一來你的 FTP 伺服器不但可以提供匿名帳號來下載 /var/ftp 的資料,如果使用實體帳號來登入的話, 就能夠進入到該使用者的家目錄底下去了!真是很簡單方便的一個設定啊!且使用本地端時間呢! ^_^



--------------------------------------------------------------------------------
僅有實體用戶登入的設定

雖然在 CentOS 的預設情況當中實體用戶已經可以使用 FTP 的服務了,不過我們可能還需要一些額外的功能來限制實體用戶, 舉例來說,限制使用者無法離開家目錄 (chroot) 、限制下載速率、限制使用者上傳檔案時的權限 (mask)等等。 底下我們先列出一些希望達到的功能,然後再繼續進行額外功能的處理:

希望使用台灣本地時間取代 GMT 時間;
使用者登入時顯示一些歡迎訊息的資訊;
系統帳號不可登入主機 (亦即 UID 小於 500 以下的帳號);
一般實體用戶可以進行上傳、下載、建立目錄及修改檔案等動作;
使用者新增的檔案、目錄之 umask 希望設定為 002;
其他主機設定值保留預設值即可。
你可以自行處理 vsftpd.conf 這個檔案,以下則是一個範例。注意,如果你的 vsftpd.conf 沒有相關設定值, 請自行補上吧!OK!讓我們開始一步一步來依序處理先:

先建立設定檔,這個設定檔已經包含了主要設定值:
[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 1. 與匿名者相關的資訊,在這個案例中將匿名登入取消:
anonymous_enable=NO

# 2. 與實體用戶相關的資訊
# 可寫入,且新增目錄、檔案權限為 775,因為 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
pam_service_name=vsftpd
listen=YES
tcp_wrappers=YES
banner_file=/etc/vsftpd/welcome.txt

[root@linux ~]# /etc/init.d/vsftpd restart




建立歡迎訊息:

當我們想讓登入者可查閱咱們系統管理員所下達的『公告』事項時,可以使用這個設定!那就是 banner_file=/etc/vsftpd/welcome.txt 這個參數的用途了!我們可以編輯這個檔案即可。 好了,開始來建立歡迎畫面吧!
[root@linux ~]# vi /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@linux ~]# vi /etc/vsftpd.user_list
root
bin
....底下省略....




測試結果:

你可以使用圖形介面的 FTP 用戶端軟體來處理,也可以透過 Linux 本身提供的 ftp 用戶端功能哩! 關於 ftp 指令我們已經在之前的常用網路指令談過了, 你可以自行前往參考。這裡直接測試一下吧:
1. 測試使用已知使用者登入,例如 dmtsai 這個實體用戶:
[root@linux ~]# ftp localhost
Connected to localhost (127.0.0.1).
220-歡迎光臨本小站,本站提供 FTP 的相關服務! <==剛剛建立的歡迎訊息
220-主要的服務是針對本機實體用戶提供的,
220-若有任何問題,請與鳥哥聯絡!
220
Name (localhost:root): dmtsai <==登入者帳號!
331 Please specify the password.
Password: <==輸入密碼,螢幕不會有任何訊息的顯示
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.


在以上面的方式測試完畢後,你可以在登入者帳號處分別填寫 (1)root (2)anonymous 來嘗試登入看看! 如果不能登入的話,那就是設定 OK 的啦!^_^

--------------------------------------------------------------------------------

chroot 的使用
假設你的系統當中有許多帳號,但是 dmtsai 以及 bird1 這兩個帳號是開放給一般客戶的, 你不想讓這兩個帳號可以離開他的家目錄,這個時候就得使用 chroot 的設定了。設定的方式很簡單, 你先要修改 vsftpd.conf ,增加這幾個項目:
[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 增加是否設定針對某些使用者來 chroot 的相關設定呦!
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

[root@linux ~]# /etc/init.d/vsftpd restart


然後建立要被 chroot 的使用者檔案:
[root@linux ~]# vi /etc/vsftpd.chroot_list
dmtsai
bird1


不要懷疑!這樣就能夠將這兩個使用者限制在家目錄內了,有夠簡單吧!



--------------------------------------------------------------------------------

更嚴格的 chroot 環境
上面提到的是預設實體用戶沒有 chroot 而特定人士被 chroot 的環境,那如果我想要的是: 所有使用者預設為 chroot ,但某些使用者可不受限制的環境呢? 那你就得要這樣做了:
[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 預設所有實體用戶被 chroot 而開放某些人可完整存取 (不 chroot) 的情況
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

[root@linux ~]# /etc/init.d/vsftpd restart


由於多了 chroot_list_enable=YES 這個參數,因此寫入 /etc/vsftpd.chroot_list 內的使用者反而是被認為可以不受 chroot 的帳號!假設系統中的 nikky 這個使用者為被信任的,所以你要這樣:
[root@linux ~]# vi /etc/vsftpd.chroot_list
nikky


則未來所有新增的用戶都是預設被 chroot 的,除非該用戶被寫入 /etc/vsftpd.chroot_list 才能夠不會被 chroot 呢!這不是比較嚴格嗎?



--------------------------------------------------------------------------------

限制下載頻寬
有的時候你可能不希望頻寬被使用者上傳/下載所耗盡,而影響咱們伺服器的其他工作之運作, 所以限制使用者傳輸頻寬有時也是需要的!假設『我要限制所有使用者的傳輸頻寬最大可達 100KBytes/秒』, 你可以這樣做即可:
[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 增加底下這一個參數即可:
local_max_rate=100000

[root@linux ~]# /etc/init.d/vsftpd restart


上述的單位是 Bytes/秒,所以你可以依據你自己的網路環境來限制你的頻寬!這樣就給他限制好囉!有夠容易吧!^_^



--------------------------------------------------------------------------------

限制最大上線人數與同一 IP 的來源數
如果你有限制最大使用頻寬的話,那麼你可能還需要限制最大線上人數才行!舉例來說, 你希望最多只有 10 個人同時使用你的 FTP 的話,並且每個 IP 來源最多只能建立一條 FTP 的連線時, 那你可以這樣做:
[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 增加底下的這兩個參數:
max_clients=10
max_per_ip=1

[root@linux ~]# /etc/init.d/vsftpd restart


這樣就搞定了!讓你的 FTP 不會人滿為患吶!



--------------------------------------------------------------------------------

建立嚴格的可使用 FTP 的帳號列表
在上述的設定當中,我們將『不許使用 FTP 的帳號寫入 /etc/vsftpd.user_list 檔案中』,所以沒有寫入 /etc/vsftpd.user_list 當中的使用者就能夠使用 FTP 了!如此一來,未來新增的使用者預設都能夠使用 FTP 的服務。 如果換個角度來思考,若我想只讓某些人可以使用 FTP 而已,亦即是新增的使用者預設不可使用 FTP 這個服務的話那麼應該如何作呢?你需要修改設定檔成為這樣:
[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 這幾個參數必須要修改成這樣:
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.user_list

[root@linux ~]# /etc/init.d/vsftpd restart


則此時『寫入 /etc/vsftpd.user_list 變成可以使用 FTP 的帳號』了! 所以未來新增的使用者如果要能夠使用 FTP 的話,就必須要寫入 /etc/vsftpd.user_list 才行! 使用這個機制請特別小心,否則容易搞混掉~


透過這幾個簡單的設定值,相信 vsftpd 已經可以符合大部分合法 FTP 網站的需求囉! 更多詳細的用法則請參考 man 5 vsftpd.conf 吧!

例題:
假設你因為某些特殊需求,所以必須要開放 root 使用 FTP 傳輸檔案,那麼你應該要如何處理?
答:
由於系統帳號無法使用 FTP 是因為 PAM 模組與 vsftpd 的內建功能所致,亦即是 /etc/vsftpd.ftpusers 及 /etc/vsftpd.user_list 這兩個檔案的影響。所以你只要進入這兩個檔案,並且將 root 那一行註解掉, 那 root 就可以使用 vsftpd這個 FTP 服務了。 不過,不建議如此作喔!



--------------------------------------------------------------------------------
僅有匿名登入的相關設定

雖然你可以同時開啟實體用戶與匿名用戶,不過建議你主機還是依據需求,針對單一種身份來設定吧! 底下我們將針對匿名用戶,且不開放實體用戶。一般來說,這種設定是給類似大專院校的 FTP 伺服器來使用的哩!

使用台灣本地的時間,而非 GMT 時間;
提供歡迎訊息,說明可提供下載的資訊;
僅開放 anonymous 的登入,且不需要輸入密碼;
檔案傳輸的速限為 30 Kbytes/second;
資料連接的過程 (不是命令通道!) 只要超過 60 秒沒有回應,就強制 Client 斷線!
只要 anonymous 超過十分鐘沒有動作,就予以斷線;
最大同時上線人數限制為 50 人,且同一 IP 來源最大連線數量為 5 人;
OK!那如何設定呢?首先我們必須要知道的是匿名使用者的目錄在哪裡? 事實上匿名者預設登入的根目錄是以 ftp 這個使用者的家目錄為主,所以你可以使用『 finger ftp 』來查閱。 咱們的 CentOS 預設的匿名者根目錄在 /var/ftp/ 中。且匿名登入者在使用 FTP 服務時,他預設可以使用『 ftp 』 這個使用者身份的權限喔,只是被 chroot 到 /var/ftp/ 目錄中就是了。

因為匿名者只會在 /var/ftp/ 當中瀏覽,所以你必須將要提供給使用者下載的資料通通給放置到 /var/ftp/ 去。 假設你已經放置了 linux 的相關目錄以及 gnu 的相關軟體到該目錄中了,那我們可以這樣做個假設:
[root@linux ~]# mkdir /var/ftp/linux
[root@linux ~]# mkdir /var/ftp/gnu


然後將 vsftpd.conf 的資料清空,重新這樣處理他吧:

建立 vsftpd.conf 的設定資料
[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 將這個檔案改成這樣:
# 1. 與匿名者相關的資訊:
anonymous_enable=YES
# 不必提供密碼啦!可直接登入哩!
no_anon_password=YES
# 限制流速啦!
anon_max_rate=30000
# 與連線時間有關的設定項目
data_connection_timeout=60
idle_session_timeout=600
# 限制連線人數
max_clients=50
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
pam_service_name=vsftpd
listen=YES
tcp_wrappers=YES
banner_file=/etc/vsftpd/anon_welcome.txt

[root@linux ~]# /etc/init.d/vsftpd restart




建立歡迎畫面與下載提示訊息

各位親愛的觀眾朋友!要注意~在這個案例當中,我們將歡迎訊息設定在 /etc/vsftpd/anon_welcome.txt 這個檔案中, 至於這個檔案的內容你可以這樣寫:
[root@linux ~]# vi /etc/vsftpd/anon_welcome.txt
歡迎光臨本站所提供的 FTP 服務!
本站主要提供 Linux 作業系統相關檔案以及 GNU 自由軟體喔!
有問題請與站長聯絡!謝謝大家!
主要的目錄為:

linux 提供 Linux 作業系統相關軟體
gnu 提供 GNU 的自由軟體


看到囉!主要寫的資料都是針對一些公告事項就是了!


測試

同樣的,我們使用 ftp 這個軟體來給他測試一下吧!
[root@linux ~]# ftp localhost
Connected to localhost (127.0.0.1).
220-歡迎光臨本站所提供的 FTP 服務! <==同樣的,一些歡迎訊息
220-本站主要提供 Linux 作業系統相關檔案以及 GNU 自由軟體喔!
220-有問題請與站長聯絡!謝謝大家!
220-主要的目錄為:
220-
220-linux 提供 Linux 作業系統相關軟體
220-gnu 提供 GNU 的自由軟體
220
Name (localhost:root): anonymous <==一定得是這個匿名帳號
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (127,0,0,1,94,56)
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Dec 18 17:37 gnu
drwxr-xr-x 2 0 0 4096 Dec 18 17:37 linux
drwxr-xr-x 2 0 0 4096 Aug 13 03:25 pub
226 Directory send OK.
ftp> bye
221 Goodbye.


看到否?這次可就不需要輸入任何密碼了,因為是匿名登入嘛!而且,如果你輸入任何其他的帳號, 那麼 vsftpd 會立刻回應斷線的狀態喔!OK 的啦!


--------------------------------------------------------------------------------

建立上傳/下載目錄
在上列的資料當中,實際上匿名使用者僅可進行下載的動作而已。如果你還想讓匿名者可以上傳檔案或者是建立目錄的話, 那你還需要額外增加一些設定才行:
[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 新增底下這幾行啊!
write_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES

[root@linux ~]# /etc/init.d/vsftpd restart


如果你設定上面四項參數,則會允許匿名者擁有完整的建立、刪除、修改檔案與目錄的權限。 不過,實際要生效還需要 Linux 的檔案系統權限正確才行! 我們知道匿名者取得的身份是 ftp ,所以如果想讓匿名者上傳資料到 /var/ftp/upload 中, 則需要這樣做:
[root@linux ~]# mkdir /var/ftp/upload
[root@linux ~]# chown ftp /var/ftp/upload


然後你以匿名者身份登入後,就會發現匿名者的根目錄多了一個 /upload 的目錄存在了, 並且你可以在該目錄中上傳檔案/目錄喔! 如此一來系統的權限大開!很要命喔!所以,請仔細的控制好你的上傳目錄才行!



--------------------------------------------------------------------------------

建立僅可上傳目錄
一般來說,使用者上傳的資料在管理員尚未查閱過是否合乎版權等相關事宜前,是不應該讓其他人下載的! 然而前一小節的設定當中,使用者上傳的資料是可以被其他人所瀏覽與下載的! 如此一來實在是很危險!所以如果你要設定 /var/ftp/upload 僅能上傳不能被下載時, 那麼被上傳的資料的權限就得要被修改一下才行!請將前一小節所設定的四個參數簡化成為:
[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 將這幾行給他改一改先!
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
chown_uploads=YES
chown_username=root

[root@linux ~]# /etc/init.d/vsftpd restart


當然啦,那個 /var/ftp/upload 還是需要可以被 ftp 這個使用者寫入才行! 如此一來被上傳的檔案將會被修改檔案擁有者成為 root 這個使用者, 而 ftp (匿名者取得的身份) 是無法讀取 root 的資料的,所以也就無法被下載囉! ^_^



--------------------------------------------------------------------------------

被動式連線埠口的限制
FTP 的連線分為主動式與被動式,主動式連線比較好處理,因為都是透過伺服器的 port 20 對外主動連線, 所以防火牆的處理比較簡單。被動式連線就比較麻煩~因為預設 FTP 伺服器會隨機取幾個沒有在使用當中的埠口來建立被動式連線,那防火牆的設定就麻煩啦!

沒關係,我們可以透過指定幾個固定範圍內的埠口來作為 FTP 的被動式資料連接之用即可, 這樣我們就能夠預先知道 FTP 資料連結的埠口啦!舉例來說,我們假設被動式連接的埠口為 65400 到 65410 這幾個埠口時,可以這樣設定:
[root@linux ~]# vi /etc/vsftpd/vsftpd.conf
# 增加底下這幾行即可啊!
pasv_min_port=65400
pasv_max_port=65410

[root@linux ~]# /etc/init.d/vsftpd restart
阅读(1494) | 评论(0) | 转发(0) |
0

上一篇:Socket编程知识必学

下一篇:第200篇文章

给主人留下些什么吧!~~