《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器

weixin_38078164 2003-04-04 09:13:13

《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器
                            《使用vsftpd架设FTP服务器》 
                                                        
                                  Smartraining工作室   
                                         osmond 编著
         引言
    本文为笔者与友人合著的拙作《RedHat 8.X 网络服务》中的一节内容,此书将于下半年
由机械工业出版社出版。目前此书仍在紧张的写作过程中。
    目前,有关vsftpd配置方面的文档甚少,所以笔者决定先将本节公开,以凁广大的Linux
爱好者。
    由于此文为尚未出版的出版物中的一部分,存在版权问题,所以笔者将其制作为操作受限
的PDF文件,见谅。
    欢迎大家多提宝贵意见,笔者将不胜感激。
                                                               Osmond
                                            抹 I 抹
                          《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器

             从RPM安装vsftpd
        Redhat 8.1自带了vsftpd,下面以RPM包的安装为例介绍vsftpd的安装。若用户在安装
Redhat时已经安装了FTP服务器,则可跳过下面的安装步骤。
         
     操作步骤10.1  安装vsftpd
     //查看是否安装了vsftpd和anonftp
     # rpm -qa|grep vsftpd
     # rpm -qa|grep anonftp
     //将Redhat8.1的第1张安装光盘放入光驱后挂装
     # mount /mnt/cdrom
     //进入光盘的RedHat/RPMS目录
     # cd /mnt/cdrom/RedHat/RPMS
     //安装所需的RPM包
     # rpm 杋vh vsftpd*
     # rpm 杋vh anonftp*
     //弹出光盘
     # cd;eject

     anonftp包用于创建匿名FTP服务器目录。若要架设匿名FTP
                          
   注意          服务器就应该安装此包。anonftp包安装的匿名FTP服务器目
     录是/var/ftp,匿名下载目录为/var/ftp/pub。
  安装完vsftpd后,下一步就是启动了。Redhat默认vsftpd以xinetd方式启动,所以需要
执行如下的操作步骤。
         
      操作步骤10.2  启动vsftpd
                                                    抹 2 抹
                       《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器

  //修改/etc/xinetd.d/vsftpd
  #  vi /etc/xinetd.d/vsftpd
  //键入i进入插入模式
  //将disable  = yes
  //改为disable  = no
  //按Esc键返回编辑模式,再键入命令:wq存盘退出vi
  #
  //重新启动xinetd守护进程
  # service xinetd restart
     
    下面的操作用于检验vsftpd是否被启动。
     
  操作步骤10.3  检验vsftpd是否被启动
  # telnet 127.0.0.1 21
  Trying 127.0.0.1...
  Connected to 127.0.0.1.
  Escape character is '^]'.
  220 ready, dude (vsFTPd 1.1.0: beat me, break me)
  //从上面的内容可以确认vsftpd已经被启动,按Ctrl+]中断会话
  ^]
  //按q退出telnet
  telnet>; q
  Connection closed.
  #
    10.2.2  ReHat8.1中vsftpd的默认配置

         ReHat8.1中的配置文件
    在RedHat8.1中vsftpd的配置文件有三个,分别是:
   
    其中,/etc/vsftpd.conf是主配置文件。/etc/vsftpd.ftpusers中指定了哪些用户不能访问FTP
服务器。/etc/vsftpd.user_list中指定的用户默认情况(即在/etc/vsftpd.conf中设置了
userlist_deny=YES)下也不能访问FTP服务器,当在/etc/vsftpd.conf中设置了userlist_deny=NO
时,仅仅允许/etc/vsftpd.user_list中指定的用户访问FTP服务器。
         ReHat8.1中的默认配置
    使用如下的操作查看vsftpd的默认主配置文件。
     
操作步骤10.4  查看vsftpd的默认主配置文件
# cat /etc/vsftpd.conf|grep =
//允许匿名登录
                                           抹 3 抹
                          《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器

anonymous_enable=YES
//允许本地用户登录
local_enable=YES
//开放本地用户的写权限
write_enable=YES
//设置本地用户的文件生成掩码为022,默认值为077
local_umask=022
//当切换到目录时,显示该目录下的.message隐含文件的内容
//这是由于默认情况下有message_file=.message的设置
dirmessage_enable=YES
//激活上传和下载日志
xferlog_enable=YES
//启用FTP数据端口的连接请求
connect_from_port_20=YES
//使用标准的ftpd xferlog日志格式
xferlog_std_format=YES
//设置PAM认证服务的配置文件名称,该文件存放在/etc/pam.d/目录下
pam_service_name=vsftpd
#
      
                            在上面的配置文件中,忽略了被注释掉(即以#开头)的配置
                        
              注意          语句行。这些行将在下面逐步介绍。
      

           测试ReHat8.1中的默认配置
      执行下面的操作,测试ReHat8.1中vsftpd的默认配置。
      
                            在默认情况下,匿名服务器下载目录/var/ftp/pub中没有任何内
                        
              警告          容,为了进行测试,可以先向该目录复制些文件。笔者向此目
                            录复制了webmin-1.000-1.noarch.rpm。
操作步骤10.5  测试ReHat8.1中vsftpd的默认配置-匿名账号
//生成目录信息文件/var/ftp/pub/.message
# echo "Welcome to this Directory.">;/var/ftp/pub/.message
//用户也可以使用vi编辑此文件
//同时也可以写入更多的内容,如:
//# ls -F /var/ftp/pub/ >;/var/ftp/pub/.message等
# cd
//使用FTP客户端连接本地FTP服务器
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 ready, dude (vsFTPd 1.1.0: beat me, break me)

                                                  抹 4 抹

                   《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器

//使用匿名FTP账号(ftp或anonymous)登录
Name (127.0.0.1:root): ftp
331 Please specify the password.
//输入Email地址作为FTP匿名账号的口令
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
//列表显示匿名FTP服务器目录
ftp>; ls
227 Entering Passive Mode (127,0,0,1,179,2)
150 Here comes the directory listing.
d--x--x--x    2 0        0            4096 Oct 09 08:36 bin
d--x--x--x    2 0        0            4096 Oct 09 08:36 etc
drwxr-xr-x    2 0        0            4096 Oct 09 08:36 lib
drwxr-sr-x    2 0        50           4096 Mar 09 19:45 pub
226 Directory send OK.
//进入匿名FTP服务器下载目录
ftp>; cd pub
250-Welcome to this Directory.  
//此处显示了.message文件的内容
250 Directory successfully changed.
ftp>; ls
227 Entering Passive Mode (127,0,0,1,45,163)
150 Here comes the directory listing.
-r-xr-xr-x    1 0        50        6477959 Mar 09 19:41 webmin-1.000-1.noarch.rpm
226 Directory send OK.
//下载文件webmin-1.000-1.noarch.rpm
ftp>; mget web*
mget webmin-1.000-1.noarch.rpm? y
227 Entering Passive Mode (127,0,0,1,37,151)
150 Opening BINARY mode data connection for webmin-1.000-1.noarch.rpm (6477959
bytes).
226 File send OK.
6477959 bytes received in 0.794 secs (8e+03 Kbytes/sec)
//显示本地文件
ftp>; !ls
anaconda-ks.cfg  install.log  install.log.syslog  webmin-1.000-1.noarch.rpm
//确认已经将文件webmin-1.000-1.noarch.rpm下载到本地
//
//上传文件install.log
ftp>; put install.log
local: install.log remote: install.log
227 Entering Passive Mode (127,0,0,1,184,207)
                                         抹 5 抹
                       《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器

550 Permission denied.
//上传文件失败
//切换到根目录
ftp>; cd /
250 Directory successfully changed.
//显示根目录下的内容
ftp>; ls
227 Entering Passive Mode (127,0,0,1,150,224)
150 Here comes the directory listing.
d--x--x--x    2 0        0            4096 Oct 09 08:36 bin
d--x--x--x    2 0        0            4096 Oct 09 08:36 etc
drwxr-xr-x    2 0        0            4096 Oct 09 08:36 lib
drwxr-sr-x    2 0        50           4096 Mar 09 19:45 pub
226 Directory send OK.
//退出FTP
ftp>; bye
221 Goodbye.
#
//查看日志
# cat /var/log/vsftpd.log
Mon Mar 10 03:50:10 2003 1 127.0.0.1 6477959 /pub/webmin-1.000-1.noarch.rpm b
_ o a ah@dsa ftp 0 * c
#
      
操作步骤10.6  测试ReHat8.1中vsftpd的默认配置-本地账号
//查看本地普通用户
# tail -1 /etc/passwd
lrj:501:501::/home/lrj:/bin/bash
//使用本地账号lrj登录
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 ready, dude (vsFTPd 1.1.0: beat me, break me)
Name (127.0.0.1:root): lrj
331 Please specify the password.
//输入lrj用户的口令
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
//显示远程主机lrj自家目录的内容
ftp>; ls
227 Entering Passive Mode (127,0,0,1,103,231)
150 Here comes the directory listing.
-rw-r--r--    1 501      501         56683 Nov 23 23:21 cipe-1.4.5-11.i386.rpm


                                           抹 6 抹




                     《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器

226 Directory send OK.
//下载文件cipe-1.4.5-11.i386.rpm
ftp>; get cipe-1.4.5-11.i386.rpm
local: cipe-1.4.5-11.i386.rpm remote: cipe-1.4.5-11.i386.rpm
227 Entering Passive Mode (127,0,0,1,136,170)
150 Opening BINARY mode data connection for cipe-1.4.5-11.i386.rpm (56683 bytes).
226 File send OK.
56683 bytes received in 0.0575 secs (9.6e+02 Kbytes/sec)
//显示本地文件
ftp>; !ls -l
total 6428
-rw-r--r--    1 root     root         2306 10月  9 16:57 anaconda-ks.cfg
-rw-r--r--    1 root     root        56683  3月 10 04:06 cipe-1.4.5-11.i386.rpm
-rw-r--r--    1 root     root        17596 10月  9 16:49 install.log
-rw-r--r--    1 root     root         4096 10月  9 16:49 install.log.syslog
-rw-r--r--    1 root     root      6477959  3月 10 03:50
webmin-1.000-1.noarch.rpm
//文件cipe-1.4.5-11.i386.rpm已经下载到本地
//上传本地文件install.log,注意此文件的本地权限为644
ftp>; put install.log
local: install.log remote: install.log
227 Entering Passive Mode (127,0,0,1,235,23
150 Go ahead make my day^W^W^Wsend me the data.
226 File receive OK.
17596 bytes sent in -0.00114 secs (-1.5e+04 Kbytes/sec)
//显示远程主机上的文件
ftp>; ls
227 Entering Passive Mode (127,0,0,1,136,160)
150 Here comes the directory listing.
-rw-r--r--    1 501      501         56683 Nov 23 23:21 cipe-1.4.5-11.i386.rpm
-rw-r--r--    1 501      501         17596 Mar 09 20:07 install.log
226 Directory send OK.
//文件install.log已经被上传
//由于此文件在本地就没有执行权限,所以此文件在远程主机上的权限为644
//若此文件在本地具有执行权限,则此文件在远程主机上的权限为777-022=755
//
//切换到根目录
ftp>; cd /
250 Directory successfully changed.
ftp>; ls  
227 Entering Passive Mode (127,0,0,1,36,80)
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Oct 09 08:35 bin
drwxr-xr-x    4 0        0            1024 Oct 09 08:30 boot


                                         抹 7 抹




                    《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器

drwxr-xr-x   20 0        0          118784 Mar 07 11:42 dev
drwxr-xr-x   63 0        0            4096 Mar 09 19:41 etc
drwxr-xr-x    5 0        0            4096 Nov 23 23:19 home
drwxr-xr-x    2 0        0            4096 Jun 21  2001 initrd
drwxr-xr-x    7 0        0            4096 Oct 09 08:48 lib
drwx------    2 0        0           16384 Oct 09 08:23 lost+found
drwxr-xr-x    2 0        0            4096 Aug 27  2002 misc
drwxr-xr-x    4 0        0            4096 Oct 09 01:00 mnt
drwxr-xr-x    2 0        0            4096 Aug 23  1999 opt
dr-xr-xr-x   66 0        0               0 Mar 07 19:41 proc
drwxr-x---    5 0        0            4096 Mar 09 20:06 root
drwxr-xr-x    2 0        0            8192 Oct 09 08:48 sbin
drwxrwxrwt    5 0        0            4096 Mar 09 20:04 tmp
drwxr-xr-x   16 0        0            4096 Oct 09 08:48 usr
drwxr-xr-x   23 0        0            4096 Mar 04 05:34 var
226 Directory send OK.
ftp>; cd tmp
250 Directory successfully changed.
ftp>; ls
227 Entering Passive Mode (127,0,0,1,194,224)
150 Here comes the directory listing.
-r--r--r--    1 0        0         1431335 Nov 23 23:22 vmware-linux-tools.tar.gz
226 Directory send OK.
//下载远程主机/tmp目录下的文件
ftp>; mget vm*
mget vmware-linux-tools.tar.gz? y
227 Entering Passive Mode (127,0,0,1,242,86)
150 Opening BINARY mode data connection for vmware-linux-tools.tar.gz (1431335
bytes).
226 File send OK.
1431335 bytes received in 0.299 secs (4.7e+03 Kbytes/sec)
//下载成功
//上传文件到远程主机的/tmp目录
ftp>; put install.log
local: install.log remote: install.log
227 Entering Passive Mode (127,0,0,1,243,2)
150 Go ahead make my day^W^W^Wsend me the data.
226 File receive OK.
17596 bytes sent in 0.00213 secs (8.1e+03 Kbytes/sec)
ftp>; ls
227 Entering Passive Mode (127,0,0,1,96,214)
150 Here comes the directory listing.
-rw-r--r--    1 501      501         17596 Mar 09 20:12 install.log
-r--r--r--    1 0        0         1431335 Nov 23 23:22 vmware-linux-tools.tar.gz


                                        抹 8 抹




                            《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器

226 Directory send OK.
//由于使用write_enable=YES开放了本地用户的写权限、
//且远程主机的/tmp目录的权限为1777,
//所以上传成功
ftp>; bye
221 Goodbye.
#  
//查看日志
# cat /var/log/vsftpd.log
Mon Mar 10 04:06:47 2003 1 127.0.0.1 56683 /home/lrj/cipe-1.4.5-11.i386.rpm b
_ o r lrj ftp 0 * c
Mon Mar 10 04:07:18 2003 1 127.0.0.1 17596 /home/lrj/install.log b _ i r lrj ftp
0 * c
Mon Mar 10 04:11:47 2003 1 127.0.0.1 1431335 /tmp/vmware-linux-tools.tar.gz b
_ o r lrj ftp 0 * c
Mon Mar 10 04:12:18 2003 1 127.0.0.1 17596 /tmp/install.log b _ i r lrj ftp 0
* c
#
//重新连接本地FTP服务器
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 ready, dude (vsFTPd 1.1.0: beat me, break me)
//以root用户登录
Name (127.0.0.1:root): root
331 Please specify the password.
//输入root用户口令
Password:
530 Login incorrect.
Login failed.
//登录失败
ftp>; bye
221 Goodbye.
# cat /etc/vsftpd.ftpusers |grep root
root
//之所以登录失败,是由于root用户写在了/etc/vsftpd.ftpusers文件中
#
        
                          通过以上的操作,得出在RedHat默认设置下的结论:
                     
            重点          (1)允许匿名用户和本地用户登录;
                          (2)匿名用户的登录名为ftp或anonymous,口令为一个Email

                          地址;

                          (3)匿名用户不能离开匿名服务器目录/var/ftp,且只能下载

                                                抹 9 抹




                          《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器

                       不能上传;

                       (4)本地用户的登录名为本地用户名,口令为此本地用户的

                       口令;

                       (5)本地用户可以离开自家目录切换至有权访问的其他目录,

                       并在权限允许的情况下进行上传/下载;

                       (6)写在文件/etc/vsftpd.ftpusers中的本地用户禁止登录。
        

       10.2.3  进一步配置vsftpd  

            允许匿名用户上传
       为了使匿名用户能够上传,需要在/etc/vsftpd中激活两个配置选项,分别是:
      
      
       同时还要配置anon_world_readable_only=NO放开匿名用户对整个服务器的浏览权限。具
体的操作步骤如下。
        
操作步骤10.7  配置vsftpd允许匿名用户上传
//修改vsftpd的主配置文件/etc/vsftpd.conf
# vi /etc/vsftpd.conf
//将如下两行前的#删除
//① #anon_upload_enable=YES
//②#anon_mkdir_write_enable=YES
//若要以上两项设置生效,同时还要求:
//(1) write_enable=YES
//(2) 匿名用户对文件系统的上传目录具有写权限
//添加如下的配置语句
// anon_world_readable_only=NO
//上面的配置语句用于放开匿名用户的浏览权限
//修改后存盘退出vi
//
//创建匿名上传目录
# mkdir /var/ftp/incoming
# 修改上传目录的权限
# chmod o+w /var/ftp/incoming/
#
//重新启动xinetd
# service xinetd restart
#
        
       下面进行测试。

                                              抹 10 抹




                     《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器
   
操作步骤10.8  测试匿名用户上传
//使用匿名用户连接本地FTP服务器
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 ready, dude (vsFTPd 1.1.0: beat me, break me)
Name (127.0.0.1:root): ftp
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>; ls
227 Entering Passive Mode (127,0,0,1,87,37)
150 Here comes the directory listing.
d--x--x--x    2 0        0            4096 Oct 09 08:36 bin
d--x--x--x    2 0        0            4096 Oct 09 08:36 etc
drwxr-xrwx    2 0        0            4096 Mar 09 23:57 incoming
drwxr-xr-x    2 0        0            4096 Oct 09 08:36 lib
drwxr-sr-x    2 0        50           4096 Mar 09 20:46 pub
226 Directory send OK.
ftp>; cd incoming
250 Directory successfully changed.
ftp>; !ls
anaconda-ks.cfg      install.log        vmware-linux-tools.tar.gz
cipe-1.4.5-11.i386.rpm install.log.syslog  webmin-1.000-1.noarch.rpm
//向incoming目录中上传文件
ftp>; put install.log
local: install.log remote: install.log
227 Entering Passive Mode (127,0,0,1,131,179)
150 Go ahead make my day^W^W^Wsend me the data.
226 File receive OK.
17596 bytes sent in 0.0012 secs (1.4e+04 Kbytes/sec)
//在incoming目录中创建目录
ftp>; mkdir newdir
257 "/incoming/newdir" created
//列表显示/incoming目录
ftp>; ls
227 Entering Passive Mode (127,0,0,1,108,45)
150 Here comes the directory listing.
-rw-------    1 14       50       17596 Mar 11 08:21 install.log
drwx------    2 14       50        4096 Mar 11 08:52 newdir
226 Directory send OK.
//在新创建的目录中上传文件并创建目录


                                         抹 11 抹




                               《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器

ftp>; cd newdir
250 Directory successfully changed.
ftp>; put anaconda-ks.cfg
local: anaconda-ks.cfg remote: anaconda-ks.cfg
227 Entering Passive Mode (127,0,0,1,112,83)
150 Go ahead make my day^W^W^Wsend me the data.
226 File receive OK.
2306 bytes sent in 0.00196 secs (1.1e+03 Kbytes/sec)
ftp>; mkdir newdir2
257 "/incoming/newdir/newdir2" created
//显示/incoming/newdir目录内容
ftp>; ls
227 Entering Passive Mode (127,0,0,1,36,47)
150 Here comes the directory listing.
-rw-------    1 14     50    2306 Mar 11 08:53 anaconda-ks.cfg
drwx------    2 14     50    4096 Mar 11 08:54 newdir2
226 Directory send OK.
ftp>; bye
221 Goodbye.
#
//测试结束
        
                             (1)匿名用户对/var/ftp/incoming目录而言是其他用户,所以
                        
               注意          必须为此目录添加对其他用户的可写权限才可上传,即此目录
                             权限的数字表示是707。

                             (2)只有设置anon_world_readable_only=NO后,才能开放匿

                             名用户的读权限,即:浏览此服务器中全部的内容。
        

            启用ASCII传输方式
       默认情况下,vsftpd为了提高传输效率,禁止了ASCII传输方式。虽然在ftp客户软件中
可以使用asc命令,但是传输文件时仍然使用二进制传输方式。
       可以分别启用上传和下载的ASCII传输方式,方法是编辑/etc/vsftpd配置文件,将如下两
行前的#去掉即可启用。
       #ascii_upload_enable=YES
       #ascii_download_enable=YES
        

            设置连接服务器后的欢迎信息
       为了使用户连接服务器后显示信息,vsftpd提供了两个选项,分别是:
      
      


                                                   抹 12 抹




                             《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器
    例如:可以设置如下的ftpd_banner选项的值:
    ftpd_banner=Welcome to Smartraining FTP service.
    即:用户连接服务器后显示信息“Welcome to Smartraining FTP service.”。
    也可以设置如下的banner_file选项的值:
    banner_file=/var/vsftpd_banner_file
    即:用户连接服务器后显示文件/var/vsftpd_banner_file中的信息。
     
                           (1)如果设置了ftpd_banner的值,将覆盖vsftpd默认的服务
                       
             警告          器连接后的信息。
                           (2) 如果ftpd_banner和banner_file同时设置,那么banner_file

                           将覆盖ftpd_banner的设置。
     

         配置基本的性能和安全选项
    1. 设置空闲的用户会话的中断时间
    例如下面的配置:
    idle_session_timeout=600
    将在用户会话空闲10分钟后被中断。
    2. 设置空闲的数据连接的的中断时间
    例如下面的配置:
    data_connection_timeout=120
    将在数据连接空闲2分钟后被中断。
    3. 设置客户端空闲时的自动中断和激活连接的时间
    例如下面的配置:
    accept_timeout=60
    connect_timeout=60
    将使客户端空闲1分钟后自动中断连接,并在中断1分钟后自动激活连接。
    4. 设置最大传输速率限制
    例如下面的配置:
    local_max_rate=50000
    anon_max_rate=30000  
    将使本地用户的最大传输速率为50kkbytes / sec,匿名用户的传输速率为30 kbytes / sec。
    5. 设置客户端连接时的端口范围
    例如下面的配置:
    pasv_min_port=50000
    pasv_max_port=60000
    将使客户端连接时的端口范围在50000和60000之间。这提高了系统的安全性。
    6. 设置chroot  
    在默认配置中,本地用户可以切换到自家目录以外的目录进行浏览,并在权限许可的范围
内进行下载和上传。这样的设置对于一个FTP服务器来说是不安全的。
    如果希望用户登录后不能切换到自家目录以外的目录,则需要设置chroot选项,涉及如
下选项:
   

                                                 抹 13 抹




                            《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器
   
   
    有两种设置chroot的方法:
    (1)设置所有的本地用户执行chroot
    只要将chroot_local_user的值设为YES即可,即:
    chroot_local_user=YES
    (2)设置指定的用户执行chroot
    需要如下的设置:
    chroot_local_user=NO
    chroot_list_enable=YES
    chroot_list_file= /etc/vsftpd.chroot_list
    这样,只有/etc/vsftpd.chroot_list文件中指定的用户才执行chroot。
     
                          上面所提及的文件/etc/vsftpd.chroot_list 和下面将要提及的文
                     
            注意          件 /etc/vsftpd.user_list的格式要求均为每个用户名占一行。
     

         配置基于本地用户的访问控制
    要配置基于本地用户的访问控制,可以通过修改vsftpd的主配置文件/etc/vsftpd.conf来进
行,有如下两种限制方法:
    1. 限制指定的本地用户不能访问,而其他本地用户可访问
    例如下面的设置:
    userlist_enable=NO
    userlist_deny=YES
    userlist_file= /etc/vsftpd.user_list
    使文件/etc/vsftpd.user_list中指定的本地用户不能访问FTP服务器,而其他本地用户可访
问FTP服务器。
    2. 限制指定的本地用户可以访问,而其他本地用户不可访问
    例如下面的设置:
    userlist_enable= YES
    userlist_deny= NO  
    userlist_file= /etc/vsftpd.user_list
    使文件/etc/vsftpd.user_list中指定的本地用户可以访问FTP服务器,而其他本地用户不可
以访问FTP服务器。
         配置基于主机的访问控制
    由于vsftpd有两种运行方式,即:由xinetd启动和独立启动。这两种运行方式的主机访问
控制配置是不同的,下面介绍的是由xinetd启动的vsftpd的主机访问控制的配置。显然,要配
置这种主机访问控制,需要修改配置文件/etc/xinetd.d/vsftpd。
    1. 只允许指定的主机访问
    在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
    only_from <主机表>;
    例如:only_from 192.168.1.0
    表示只允许192.168.1.0网段内的主机访问。

                                                  抹 14 抹




                     《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器
2. 指定不能访问的主机
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
no_access <主机表>;
例如:no_access 192.168.1.0
表示只有192.168.1.0网段内的主机不能访问。
关于主机表的书写形式,见表10-1。
                      表10-1 xinetd配置访问控制表时主机表的书写语法  

      选项值                                           含义

Hostname               可解析的主机名

IP Address             点分十进制表示的IP地址

Net_name               在/etc/networks中定义的网络名

x.x.x.0  x.x.0.0       0作为通配符看待。如:191.72.61.0匹配从191.72.61.0到191.72.61.255
x.0.0.0  0.0.0.0       的所有IP地址。0.0.0.0表示匹配所有的IP地址
x.x.x.{a,b,厎          指定主机表。如:191.72.61.{1,3,123}表示包含地址191.72.61.1、
x.x.{a,b,厎            191.72.61.2和191.72.61.123
x.{a,b,厎
IPAddress/netmask      定义要匹配的网络或子网。如:172.19.16/20匹配从172.19.16.0到
                       172.19.31.255
3. 配置每个客户机的最大连接数
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
per_source = 数值
例如:per_source = 5
表示每个客户机的最大连接数为5。
4. 配置服务器总的并发连接数
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
instances = 数值
例如:instances = 200
表示FTP服务器总共支持的最高连接数为200。
5. 配置访问时间限制
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
access_time = hour:min-hour:min
例如:access_time = 18:00-23:59
表示只有在下午6点到午夜0点之前才能访问此FTP服务器;
又如:access_time = 8:30-11:30 13:00-18:00  
表示只有在上午8点半到11点半和下午1点到下午6点才能访问此FTP服务器。
6. 指定连接失败时显示的信息
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
banner_fail = 文件名
例如:banner_fail = /etc/vsftpd.busy_banner
表示当连接失败时显示文件/etc/vsftpd.busy_banner中的内容。

                  可以用下面的命令生成文件/etc/vsftpd.busy_banner:
              

                                          抹 15 抹




                        《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器
            技巧     #  echo "421 Server busy, please try later." \

                         >; /etc/vsftpd.busy_banner
        
        

       10.2.4 配置本地组访问的FTP服务器  

       本节将解决类似这样的问题:
       本地组softgrp有三个用户soft、soft1和soft2,其中soft对FTP有读写(包括列文件目录、
上传、下载)权限,而soft1和soft2对FTP只有读(包括列文件目录、下载)的权限。
       为了实现这种功能,我们要借助于本地文件系统的权限设置来实现,具体操作步骤如下:
        
操作步骤10.9  配置本地组访问的FTP服务器
//创建本地组的FTP服务器目录
# mkdir -p /var/local-ftp/softgrp
//创建本地用户和组
# groupadd softgrp
# useradd -G softgrp -d /var/local-ftp/softgrp -M soft
# useradd -G softgrp -d /var/local-ftp/softgrp -M soft1
# useradd -G softgrp -d /var/local-ftp/softgrp -M soft2
//设置用户口令
# passwd soft
# passwd soft1
# passwd soft2
//修改/var/local-ftp/softgrp的属主和权限
# chown soft.softgrp /var/local-ftp/softgrp
# chmod 750 /var/local-ftp/softgrp
# ll -d /var/local-ftp/softgrp
drwxr-x---    2 soft     softgrp      4096  3月 12 00:46 /var/local-ftp/softgrp
#
//设置了上面对目录/var/local-ftp/softgrp的文件系统权限之后
//(1)soft用户是该目录的属主,因此具有读写权限和进入目录的权限
//(2)soft1和soft2用户属于softgrp组,因此只具有读权限和进入目录的权限
//
//配置结束,下面进行测试
# cd
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 Welcome to Smartraining FTP service.
//以soft用户身份登录
Name (127.0.0.1:root): soft
331 Please specify the password.
Password:
230 Login successful. Have fun.

                                              抹 16 抹




                   《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器

Remote system type is UNIX.
Using binary mode to transfer files.
//上传文件
ftp>; put install.log
local: install.log remote: install.log
227 Entering Passive Mode (127,0,0,1,68,177)
150 Go ahead make my day^W^W^Wsend me the data.
226 File receive OK.
17596 bytes sent in 0.00176 secs (9.7e+03 Kbytes/sec)
ftp>; ls
227 Entering Passive Mode (127,0,0,1,134,104)
150 Here comes the directory listing.
-rw-r--r--    1 503      504         17596 Mar 11 17:17 install.log
226 Directory send OK.
//用户soft写文件成功,并可以浏览
//
//关闭连接
ftp>; close
221 Goodbye.
//重新连接
ftp>; open 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 Welcome to Smartraining FTP service.
//以soft1用户身份登录
Name (127.0.0.1:root): soft1
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
//显示文件
ftp>; ls
227 Entering Passive Mode (127,0,0,1,31,75)
150 Here comes the directory listing.
-rw-r--r--    1 503      504         17596 Mar 11 17:17 install.log
226 Directory send OK.
ftp>; put anaconda-ks.cfg
local: anaconda-ks.cfg remote: anaconda-ks.cfg
227 Entering Passive Mode (127,0,0,1,184,222)
553 Could not create file.
//拒绝用户soft1上传
ftp>; bye
221 Goodbye.
#


                                       抹 17 抹




                            《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器
     
                          上面的配置主要是在系统中的文件系统上进行的,同时vsftpd
                     
            注意          的配置文件/etc/vsftpd.conf中要确保以下选项的配置正确:
                          local_enable=YES

                          write_enable=YES

                          chroot_local_user=YES  
     

    10.2.5 从源代码安装vsftpd  

    用户也可以到vsftpd的主站下载TAR包自行编译安装vsftpd。
     
                          Vsftpd的主站为:http://vsftpd.beasts.org/
                     
            参考          Vsftpd的FTP服务器为:ftp://vsftpd.beasts.org/users/cevans/
     
    笔者下载了vsftpd-1.1.3.tar.gz,将其上传到Linux服务器,并将其移动到/usr/local/src目录
下。下面介绍安全的步骤:
     
操作步骤10.10  从源代码安装vsftpd
//备份RedHat 8.1的配置文件
# mkdir 杙 ~/conf-bak/vsftpd
# cd ~/conf-bak/vsftpd
# cp /etc/vsftpd.conf vsftpd.conf.rh
# cp /etc/xinetd.d/vsftpd vsftpd.xinetd.rh
# cp /etc/pam.d/vsftpd vsftpd.pam.rh
//进入存放vsftpd源代码的目录
# cd /usr/local/src
# ls
vsftpd-1.1.3.tar.gz
//解包
# tar -zxvf vsftpd-1.1.3.tar.gz
# cd vsftpd-1.1.3
//编译vsftpd
# make
//查看是否编译成功
# ls -l vsftpd
-rwxr-xr-x    1 root     root        65996  3月 12 18:56 vsftpd
//安装vsftpd  
# make install
//安装过程执行了如下操作
// cp vsftpd /usr/local/sbin/vsftpd


                                                 抹 18 抹




                              《RedHat 8.X 网络服务》-使用vsftpd架设FTP服务器

// cp vsftpd.conf.5 /usr/local/man/man5
// cp vsftpd.8 /usr/local/man/man8
// cp xinetd.d/vsftpd /etc/xinetd.d/
#
//复制默认配置文件到/etc目录
# cp vsftpd.conf /etc
//复制本地用户所需的PAM配置文件
# cp RedHat/vsftpd.pam /etc/pam.d/ftp
//重新启动xinetd
# service xinetd restart
//安装结束
...全文
123 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

477

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧