当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 请问vsftp中可否在使用虚拟用户的情况下同时开启匿名用户?
帖子发表于 : 2009-05-03 9:57 

注册: 2007-05-12 0:05
帖子: 161
送出感谢: 0 次
接收感谢: 0 次
我根据网上的教程配置了虚拟用户,可是在其他机器上面登录的时候显示错误,请问能不能再试用虚拟用户的情况下同时开启匿名登录?我的匿名账号配置为不需要输入密码,因为是在局域网中使用,所以向通过匿名用户实现临时的文件共享。

请问大家有没有比较系统的vsftp的教程或者文档可以推荐一下呢?在网上搜索的感觉都比教零星,说了其中的一部分,而且很多教程之间的说法还不相同。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 请问vsftp中可否在使用虚拟用户的情况下同时开启匿名用户?
帖子发表于 : 2009-05-04 17:14 

注册: 2008-07-11 16:23
帖子: 263
送出感谢: 0 次
接收感谢: 0 次
不才,自己写的,也从网上收集了些资料,自己边架服务器,边写下来的,不正确的地方,请高手批正:

Linux VSFTP配置手册
1、VSFTPD简述

  如果试问哪种FTP服务器最安全?那么在UNIX和Linux中,首推的 就是VSFTP(Very Secure FTP Daemon,非常安全的FTP服务器)。顾名思义,VSFTPD设计的出发点就是安全性。同时随着版本的不断升级,VSFTPD在性能和稳定性上也取得 了极大的进展。象RedHat、SUSE、Debian、GNU、GNOME、KDE等一些大型站点都采用VSFTPD作为它们的FTP服务器。大家可以 到http://vsftpd.beasts.org/了解它的最新情况。

  2、VSFTPD的安装

  2.1、RHL9+vsftpd-.1.1.3-8.i386.rpm包的安装

  VSFTPD的安装很简单。在RHL9中,在图形界面下依次执行“Main Menu”-“System Settings”-“Add/Remove Applications”-选择FTP服务器-“更新”,或者在字符界面中执行以下命令,就可以完成安装。
  rpm -ivh vsftpd-1.1.3-8.i386.rpm

  2.2、vsftpd-1.2.0.tar.gz的安装

  ⑴准备条件

  VSFTPD默认配置中需要“nobody”用户。在系统中添加此用户,如果用户已经存在,useradd命令有相应提示。
  
[root@hpe45 root]# useradd nobody
useradd: user nobody exists


  VSFTPD默认配置中需要“/usr/share/empty”目录。在系统中此目录,如果目录已经存在,mkdir命令有相应提示。
  
[root@hpe45 root]# mkdir /usr/share/empty/
mkdir: cannot create directory '/usr/share/empty': File exists


  VSFTPD提供匿名FTP服务时,需要“ftp”用户和一个有效的匿名目录。
[root@hpe45 root]# mkdir /var/ftp/
[root@hpe45 root]# useradd -d /var/ftp ftp



  接下来的操作对于ftp用户是否已经存在都是有用的。
  
[root@hpe45 root]# chown root.root /var/ftp
[root@hpe45 root]# chmod og-w /var/ftp


  ⑵编译VSFTPD

  从官方站点下载到/root目录,执行以下命令:
  
[root@hpe45 root]# tar zxvf vsftpd-1.2.0.tar.gz
[root@hpe45 root]# cd vsftpd-1.2.0
[root@hpe45 vsftpd-1.2.0]# make


  ⑶安装编译好的VSFTPD

  执行“make install”将编译好的二进制文件、手册等复制到相应目录。在RHL9上,可能需要手动执行以下复制:
  
[root@hpe45 vsftpd-1.2.0]# cp vsftpd /usr/local/sbin/vsftpd
[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf.5 /usr/local/share/man/man5
[root@hpe45 vsftpd-1.2.0]# cp vsftpd.8 /usr/local/share/man/man8


  此外,“make install”没有复制简单的配置文件,建议执行以下命令:
 
[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf /etc


  ⑷为本地用户设置PAM

  如果允许本地用户登录VSFTPD,执行以下操作:
  
[root@hpe45 vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/ftp


  3、VSFTPD的文件结构

  VSFTPD的文件结构是很简洁的,主要包括:

  /usr/sbin/vsftpd ---- VSFTPD的主程序。

  /etc/rc.d/init.d/vsftpd ---- 启动脚本。

  /etc/vsftpd/vsftpd.conf ---- 主配置文件。

  /etc/pam.d/vsftpd ---- PAM认证文件。

  /etc/vsftpd.ftpusers ---- 禁止使用VSFTPD的用户列表文件。

  /etc/vsftpd.user_list ---- 禁止或允许使用VSFTPD的用户列表文件。

  /var/ftp ---- 匿名用户主目录。

  /var/ftp/pub---- 匿名用户的下载目录。

  此外,还有一些说明文档和手册文件。

  此外VSFTPD的日志文件位于/etc/logrotate.d/vsftpd.log。

  4、VSFTPD的启动与停止

   VSFTPD可以单独(Standalone)方式运行,如同httpd、named这类的服务器的运行方式,这是RHL9中默认的方式;也可以采用 xinetd方式运行,这是RHL7.x、8中的默认方式。具体的运行方式由参数listen决定。从RHL中VSFTPD的运行方式,也可以看出 VSFTPD的逐步发展。

  当listen参数值为YES时,RHL9中的默认值,VSFTPD单独运行,我们可以使用脚本/etc/rc.d/init.d/vsftpd来启动、关闭以及重启VSFTPD。命令如下:
  
/etc/rc.d/init.d/vsftpd start|stop|restart


  如果说在RHL9上,您还希望使用Xinetd启动VSFTPD的运行方式,那么首先要将vsftpd.conf配置文件中的listen参数值改为NO。其次,生成一个/etc/xinetd.d/vsftpd文件,内容如下:
service vsftpd
  ...{
  disable = no
  socket_type = stream
  wait = no
  user = root
  server = /usr/sbin/vsftpd
  port = 21
  log_on_success += PID HOST DURATION
  log_on_failure += HOST
  }


  通过修改disable值为no或yes,并重新启动xinetd,从而启动或停止VSFTPD。

  由于VSFTPD的单独模式已经拥有足够的能力,所以后面6中讨论到的应用,都是以单独模式来运行的,而非Xinetd方式。

  注:还可以直接执行vsftpd来启动FTP服务,关闭时使用“kill”命令。
  
[root@hpe45 root]# /usr/local/sbin/vsftpd &


5、VSFTPD的设置选项

  VSFTPD的配置文件/etc/vsftpd /vsftpd.conf是个文本文件。以“#”字符开始的行是注释行。每个选项设置为一行,格式为“option=value”,注意“=”号两边不能 留空白符。除了这个主配置文件外,还可以给特定用户设定个人配置文件,具体介绍见后。

  VSFTPD包中所带的vsftpd.conf文件配置比较简单,而且非常偏执狂的(文档自称:-))。我们可以根据实际情况对其进行一些设置,以使得VSFTPD更加可用。

  5.1、连接选项

  本部分主要是一些与建立FTP链接相关的选项。

  5.1.1、监听地址与控制端口

  listen_address=ip address
   此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义了在主机的哪个IP地址上监听FTP请求,即在哪个IP地址上提供FTP 服务。对于只有一个IP地址的主机,不需要使用此参数。对于多址主机,不设置此参数,则监听所有IP地址。默认值为无。 
listen_port=port_value

 
  指定FTP服务器监听的端口号(控制端口),默认值为21。此选项在standalone模式下生效。

  5.1.2、FTP模式与数据端口

   FTP 分为两类,PORT FTP和PASV FTP,PORT FTP是一般形式的FTP。这两种FTP在建立控制连接时操作是一样的,都是由客户端首先和FTP服务器的控制端口(默认值为21)建立控制链接,并通过 此链接进行传输操作指令。它们的区别在于使用数据传输端口(ftp-data)的方式。PORT FTP由FTP服务器指定数据传输所使用的端口,默认值为20。PASV FTP由FTP客户端决定数据传输的端口。PASV FTP这种做法,主要是考虑到存在防火墙的环境下,由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口),决定两者之间的数 据传输端口更为方便一些。

  port_enable=YES|NO
  如果你要在数据连接时取消PORT模式时,设此选项为NO。默认值为YES。

  connetc_from_port_20=YES|NO
  控制以PORT模式进行数据传输时是否使用20端口(ftp-data)。YES使用,NO不使用。默认值为NO,但RHL自带的vsftpd.conf文件中此参数设为YES。

  ftp_data_port=port number
  设定ftp数据传输端口(ftp-data)值。默认值为20。此参数用于PORT FTP模式。

  port_promiscuous=YES|NO
  默认值为NO。为YES时,取消PORT安全检查。该检查确保外出的数据只能连接到客户端上。小心打开此选项。

  pasv_enable=YES|NO
  YES,允许数据传输时使用PASV模式。NO,不允许使用PASV模式。默认值为YES。

  pasv_min_port=port number
  pasv_max_port=port number
  设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意。默认值为0。把端口范围设在比较高的一段范围内,比如50000-60000,将有助于安全性的提高。

  pasv_promiscuous=YES|NO
  此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中。默认值为NO。

  pasv_address=
  此选项为一个数字IP地址,作为PASV命令的响应。默认值为none,即地址是从呼入的连接套接字(incoming connectd socket)中获取。

  5.1.3 ASCII模式

  默认情况下,VSFTPD是禁止使用ASCII传输模式。即使FTP客户端使用asc命令,指明要使用ASCII模式,但是,VSFTPD表面上接受了asc命令,而在实际传输文件时,还是使用二进制方式。下面选项控制VSFTPD是否使用ASCII传输模式。

  ascii_upload_enable=YES|NO
  控制是否允许使用ascii模式上传文件,YES允许,NO不允许,默认为NO。

  ascii_download_enable=YES|NO
  控制是否允许使用ascii模式下载文件,YES允许,NO不允许,默认为NO。

  5.2、性能与负载控制

  5.2.1、超时选项

  idle_session_timeout=
  空闲(发呆)用户会话的超时时间,若是超出这时间没有数据的传送或是指令的输入,则会强迫断线。单位为秒,默认值为300。

  data_connection_timeout=
  空闲的数据连接的超时时间。默认值为300 秒。

  accept_timeout=numerical value
  接受建立联机的超时设定,单位为秒。默认值为60。

  connect_timeout=numerical value
  响应PORT方式的数据联机的超时设定,单位为秒。默认值为60。以上两个选项针对客户端的,将使客户端空闲1分钟后自动中断连接,并在中断1分钟后自动激活连接。

  5.2.2 负载控制

  max_clients=numerical value
  此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义了FTP服务器最大的并发连接数,当超过此连接数时,服务器拒绝客户端连接。默认值为0,表示不限最大连接数。

  max_per_ip=numerical value
  此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义每个IP地址最大的并发连接数目。超过这个数目将会拒绝连接。此选项的设置将影响到象网际快车这类的多进程下载软件。默认值为0,表示不限制。

  anon_max_rate=value
  设定匿名用户的最大数据传输速度value,以Bytes/s为单位。默认无。

  local_max_rate=value
  设定用户的最大数据传输速度value,以Bytes/s为单位。默认无。此选项对所有的用户都生效。此外,也可以在用户个人配置文件中使用此选项,以指定特定用户可获得的最大数据传输速率。步骤如下:

  ①在vsftpd.conf中指定用户个人配置文件所在的目录,如:
  user_config_dir=/etc/vsftpd/userconf

  ②生成/etc/vsftpd/userconf目录。

  ③用户个人配置文件是在该目录下,与特定用户同名的文件,如:
  /etc/vsftpd/userconf/xiaowang

  ④在用户的个人配置文件中设置local_max_rate参数,如:
  local_max_rate=80000

  以上步骤设定FTP用户xiaowang的最大数据传输速度为80KBytes/s。

  VSFTPD 对于速度控制的变化范围大概在80%到120%之间。比如我们限制最高速度为100KBytes/s, 但实际的速度可能在80KBytes/s 到120KBytes/s 之间。当然,若是线路带宽不足时,速率自然会低于此限制。

  5.3 用户选项

  VSFTPD的用户分为三类:匿名用户、本地用户(local user)以及虚拟用户(guest)。

  5.3.1、匿名用户

  anonymous_enable=YES|NO
  控制是否允许匿名用户登录,YES允许,NO不允许,默认值为YES。

  ftp_username=
  匿名用户所使用的系统用户名。默认下,此参数在配置文件中不出现,值为ftp。

  no_anon_password=YES|NO
  控制匿名用户登入时是否需要密码,YES不需要,NO需要。默认值为NO。
  
  deny_email_enable=YES|NO
   此参数默认值为NO。当值为YES时,拒绝使用banned_email_file参数指定文件中所列出的e-mail地址进行登录的匿名用户。即,当 匿名用户使用banned_email_file文件中所列出的e-mail进行登录时,被拒绝。显然,这对于阻击某些Dos攻击有效。当此参数生效时, 需追加banned_email_file参数

  banned_email_file=/etc/vsftpd.banned_emails
  指定包含被拒绝的e-mail地址的文件,默认文件为/etc/vsftpd.banned_emails。

  anon_root=
  设定匿名用户的根目录,即匿名用户登入后,被定位到此目录下。主配置文件中默认无此项,默认值为/var/ftp/。

  anon_world_readable_only=YES|NO
  控制是否只允许匿名用户下载可阅读文档。YES,只允许匿名用户下载可阅读的文件。NO,允许匿名用户浏览整个服务器的文件系统。默认值为YES。

  anon_upload_enable=YES|NO
  控制是否允许匿名用户上传文件,YES允许,NO不允许,默认是不设值,即为NO。除了这个参数外,匿名用户要能上传文件,还需要两个条件:一,write_enable参数为YES;二,在文件系统上,FTP匿名用户对某个目录有写权限。

  anon_mkdir_write_enable=YES|NO
  控制是否允许匿名用户创建新目录,YES允许,NO不允许,默认是不设值,即为NO。当然在文件系统上,FTP匿名用户必需对新目录的上层目录拥有写权限。

  anon_other_write_enable=YES|NO
  控制匿名用户是否拥有除了上传和新建目录之外的其他权限,如删除、更名等。YES拥有,NO不拥有,默认值为NO。

  chown_uploads=YES|NO
  是否修改匿名用户所上传文件的所有权。YES,匿名用户所上传的文件的所有权将改为另外一个不同的用户所有,用户由chown_username参数指定。此选项默认值为NO。

  chown_username=whoever
  指定拥有匿名用户上传文件所有权的用户。此参数与chown_uploads联用。不推荐使用root用户。

  5.3.2、本地用户

  在使用FTP服务的用户中,除了匿名用户外,还有一类在FTP服务器所属主机上拥有账号的用户。VSFTPD中称此类用户为本地用户(local users),等同于其他FTP服务器中的real用户。

  local_enable=YES|NO
  控制vsftpd所在的系统的用户是否可以登录vsftpd。默认值为YES。

  local_root=
  定义所有本地用户的根目录。当本地用户登入时,将被更换到此目录下。默认值为无。

  user_config_dir=
   定义用户个人配置文件所在的目录。用户的个人配置文件为该目录下的同名文件。个人配置文件的格式与vsftpd.conf格式相同。例如定义 user_config_dir=/etc/vsftpd/userconf,并且主机上有用户xiaowang,lisi,那我们可以在 user_config_dir的目录新增名为xiaowang、lisi的两个文件。当用户lisi 登入时,VSFTPD则会读取user_config_dir下lisi这个文件中的设定值,应用于用户lisi。默认值为无。

  5.3.3、虚拟用户

  guest_enable=YES|NO
  若是启动这项功能,所有的非匿名登入者都视为guest。默认值为关闭。

  guest_username=
  定义VSFTPD的guest用户在系统中的用户名。默认值为ftp。

  5.4、安全措施

  5.4.1、用户登录控制

  pam_service_name=vsftpd
  指出VSFTPD进行PAM认证时所使用的PAM配置文件名,默认值是vsftpd,默认PAM配置文件是/etc/pam.d/vsftpd。

  /etc/vsftpd.ftpusers
  VSFTPD禁止列在此文件中的用户登录FTP服务器。这个机制是在/etc/pam.d/vsftpd中默认设置的。

  userlist_enable=YES|NO
   此选项被激活后,VSFTPD将读取userlist_file参数所指定的文件中的用户列表。当列表中的用户登录FTP服务器时,该用户在提示输入密 码之前就被禁止了。即该用户名输入后,VSFTPD查到该用户名在列表,VSFTPD就直接禁止掉该用户,不会再进行询问密码等后续步聚。默认值为NO。

  userlist_file=/etc/vsftpd.user_list
  指出userlist_enable选项生效后,被读取的包含用户列表的文件。默认值是/etc/vsftpd.user_list。

  userlist_deny=YES|NO
   决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器。此选项在userlist_enable 选项启动后才生效。YES,默认值,禁止文件中的用户登录,同时也不向这些用户发出输入口令的提示。NO,只允许在文件中的用户登录FTP服务器。
  
  tcp_wrappers=YES|NO
  在VSFTPD中使用TCP_Wrappers远程访问控制机制,默认值为YES。

  5.4.2、目录访问控制

  chroot_list_enable=YES|NO
  锁定某些用户在自家目录中。即当这些用户登录后,不可以转到系统的其他目录,只能在自家目录(及其子目录)下。具体的用户在chroot_list_file参数所指定的文件中列出。默认值为NO。

  chroot_list_file=/etc/vsftpd/chroot_list
  指出被锁定在自家目录中的用户的列表文件。文件格式为一行一用户。通常该文件是/etc/vsftpd/chroot_list。此选项默认不设置。

  chroot_local_users=YES|NO
   将本地用户锁定在自家目录中。当此项被激活时,chroot_list_enable和chroot_local_users参数的作用将发生变 化,chroot_list_file所指定文件中的用户将不被锁定在自家目录。本参数被激活后,可能带来安全上的冲突,特别是当用户拥有上传、 shell访问等权限时。因此,只有在确实了解的情况下,才可以打开此参数。默认值为NO。

  passwd_chroot_enable
  当此选项激活时,与chroot_local_user选项配合,chroot()容器的位置可以在每个用户的基础上指定。每个用户的容器来源于/etc/passwd中每个用户的自家目录字段。默认值为NO。

  5.4.3、文件操作控制

  hide_ids=YES|NO
  是否隐藏文件的所有者和组信息。YES,当用户使用"ls -al"之类的指令时,在目录列表中所有文件的拥有者和组信息都显示为ftp。默认值为NO。

  ls_recurse_enable=YES|NO
  YES,允许使用"ls -R" 指令。这个选项有一个小的安全风险,因为在一个大型FTP站点的根目录下使用"ls -R"会消耗大量系统资源。默认值为NO。

  write_enable=YES|NO
  控制是否允许使用任何可以修改文件系统的FTP 的指令,比如STOR、DELE、RNFR、RNTO、MKD、RMD、APPE 以及SITE。默认值为NO,不过自带的简单配置文件中打开了该选项。

  secure_chroot_dir=
  这选项指向一个空目录,并且ftp用户对此目录无写权限。当vsftpd不需要访问文件系统时,这个目录将被作为一个安全的容器,用户将被限制在此目录中。默认目录为/usr/share/empty。

  5.4.4、新增文件权限设定

  anon_umask=
  匿名用户新增文件的umask 数值。默认值为077。

  file_open_mode=
  上传档案的权限,与chmod 所使用的数值相同。如果希望上传的文件可以执行,设此值为0777。默认值为0666。

  local_umask=
  本地用户新增档案时的umask 数值。默认值为077。不过,其他大多数的FTP服务器都是使用022。如果您的用户希望的话,可以修改为022。在自带的配置文件中此项就设为了022。

  5.5、提示信息

  ftpd_banner=login banner string
  此参数定义了login banner string(登录欢迎语字符串)。用户可以自行修改。预设值为无。当ftpd_banner设置后,将取代系统原来的欢迎词。

  banner_file=/directory/vsftpd_banner_file
   此项指定一个文本文件,当使用者登入时,会显示此该文件的内容,通常为欢迎话语或是说明。默认值为无。与ftpd_banner相 比,banner_file是文本文件的形式,而ftpd_banner是字串格式。banner_file选项将取代ftpd_banner选项。

  dirmessage_enable=YES|MO
  控制是否启用目录提示信息功能。YES启用,NO不启用,默认值为YES。此功能启用后,当用户进入某一个目录时,会检查该目录下是否有message_file选项所指定的文档,若是有,则会出现此文档的内容,通常这个档案会放置欢迎话语,或是对该目录的说明。

  message_file=
  此选项,仅在dirmessage_enable选项激活方生效。默认值为.message。

  5.6、日志设置

  xferlog_enable=YES|NO
  控制是否启用一个日志文件,用于详细记录上传和下载。该日志文件由xferlog_file选项指定。默认值为NO,但简单配置文件中激活此选项。

  xferlog_file=
  这个选项设定记录传输日志的文件名。默认值为/var/log/vsftpd.log。

  xferlog_std_format=YES|NO
  控制日志文件是否使用xferlog的标准格式,如同wu-ftpd一样。使用xferlog格式,可以重新使用已经存在的传输统计生成器。然而,默认的日志格式更为可读性。默认值为NO,但自带的配置文件中激活了此选项。

  log_ftp_protocol=YES|NO
  当此选项激活后,所有的FTP请求和响应都被记录到日志中。提供此选项时,xferlog_std_format不能被激活。这个选项有助于调试。默认值为NO。

  5.7、其他设置

  setproctitle_enable=YES|NO
   YES,VSFTPD将在系统进程列表中显示每个会话(session)的状态。也就是说,进程报告将显示每个vsftpd会话在做什么(挂起、下载 等),如用ps -ef|grep ftp。出于安全的目的,可以考虑将此选项关闭。NO,进程报告只显示一个vsftpd进程在运行。默认值为NO。

  text_userdb_names=YES|No
  当使用者登入后使用ls -al 之类指令时,目录列表的用户和组信息域,默认是出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。默认值为NO。

  user_localtime=YES|NO
  默认为NO。YES,VSFTPD显示目录列表时使用你本地时区的时间。默认是显示GMT时间。同样,由ftp命令“MDTM”返回的时间值也受此选项影响。

  check_shell=YES|NO
  此选项仅对不使用PAM方式的VSFTPD生效。当此选项关闭后,当本地用户登录时,VSFTPD不会检查/etc/shells文件以寻找一个有效的用户shell。默认为YES。

  nopriv_user=
  指定一个用户,当VSFTPD不想要什么权限时,使用此用户身份。这用户最好是一个专用的用户,而不是用户nobody。在大多数的机器上,nobody用户被用于大量重要的事情。默认值为nobody。

  pam_service_name=
  指明VSFTPD使用用PAM验证服务时的PAM配置文件名。默认值为ftp。

6、VSFTPD应用

  本部分介绍VSFTPD的具体应用方法。

  6.1、允许匿名用户上传文件

  在vsftpd.conf文件中修改或增加以下选项:
  
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES


  然后创建供匿名用户上传文件的目录,并设定权限:
# mkdir /var/ftp/incoming
# chmod o+w /var/ftp/incoming



    由于匿名用户(ftp)上传文件,需要对incoming目录进行操作,而incoming为root所有,匿名用户(ftp)对于incoming来说是其他用户,所以要加入其他用户(o)的写权限。

  6.2、限制用户在自家目录

  在默认配置中,本地用户可以切换到自家目录以外的目录进行浏览,并在权限范围内进行上传和下载,这无疑是个不安全因素。

  我们可以设置chroot,让本地用户登录后只能访问自家目录,无法访问其他目录。相关的选项有三个:chroot_local_user、chroot_list_enable、chroot_list_file。限制用户在自家目录有两种做法:

  1、限制所有的本地用户在自家目录
   
chroot_local_user=YES

  这种做法,可能会带来一些安全性上的冲突。参见前面的chroot_local_user选项描述。

  2、限制部分本地用户在自家目录
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list


    在/etc/vsftpd.chroot_list文件中加入要限制的本地用户名。注意一个用户名一行。

  6.3、配置高安全级别的匿名FTP服务器

  VSFTPD自带的简单配置文件已经自称是偏执狂了,这里看看能否更加偏执一些。有些选项默认已经采用安全性的设置,这里就不再写出了。

  #只允许匿名访问,不允许本地用户访问。
  anonymous_enable=YES
  local_enable=NO

  #使用ftpd_banner取代VSFTPD默认的欢迎词,免得泄漏相关信息
  ftpd_banner=Welcome to this FTP Server
  #只让匿名用户浏览可阅读的文件,不可以浏览整个系统
  anon_world_readable_only=YES
  #隐藏文件的所有者和组信息,匿名用户看到的文件的所有者和组全变为ftp
  hide_ids=YES

  #取消写权限
  write_enable=NO
  anon_upload_enable=NO
  anon_mkdir_write_enable=NO
  anon_other_write_enable=NO

  #使用单独模式,并指定监听的IP地址
  listen_address=ip address
  #对连接进行控制,还有超时时间,那就根据具体情况再说了。
  connect_from_port_20=YES
  pasv_min_port=50000
  pasv_max_port=60000
  #控制并发数,限定每个IP地址的并发数,这个嘛,根据用户自已定了。
  max_clients=numerical value
  max_per_ip=numerical value
  #限定下载速度,具体限多大,就由用户自己定了,80KB/s,也很快了吧。
  anon_max_rate=80000

  #启用详细的日志记录格式
  xferlog_enable=YES



  6.4、基于IP地址的虚拟FTP服务器

  假定服务器有两个IP地址,192.168.0.1和192.168.0.2。VSFTPD是建立在192.168.0.1上的,现在我们在192.168.0.2上再提供一个虚拟FTP服务器。如何在一台服务器上使用多个IP 地址,请参考相关文档。

  6.4.1、创建虚拟FTP服务器的根目录。
  
mkdir -p /var/ftp2/pub

  确保/var/ftp2和/var/ftp2/pub目录的拥有者和组均为root,掩码为755。

  6.4.2、增加虚拟FTP服务器的匿名用户帐号。原先的FTP服务器使用系统用户ftp作为其匿名用户帐号。我们要增加一个ftp2用于虚拟FTP服务器。
  
useradd -d /var/ftp2 -M ftp2


  6.4.3、创建虚拟FTP服务器的配置文件。复制原来的vsftpd.conf作为虚拟FTP服务器的配置文件,并修改相关参数。
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd2.conf



  新添或修改以下参数:
  
listen=YES
  listen_address=192.168.0.2
  ftp_username=ftp2


  注:由于VSFTPD默认是监听所有的IP地址,当我们设定基于IP的虚拟FTP服务器时,为防止原来的FTP服务器与虚拟FTP服务器发生 监听上的冲突,原FTP服务器需要指定监听的IP地址。在这里,原来的配置文件中就要设置listen_address=192.168.0.1。

  6.4.4、启动虚拟FTP服务器。

   /etc/rc.d/init.d/vsftpd脚本在启动时,扫描/etc/vsftpd/目录下所有的*.conf文件,按照*.conf文件的先 后,依次启用vsftpd进程,每个vsftpd进程对应一个.conf文件。即,“ls /etc/vsftpd/”列表的次序与“ps -aux |grep vsftpd”中的顺序一样。当然了,“ps -aux | grep vsftpd”中也显示出vsftpd所使用的配置文件,从中也可以看哪个vsftpd进程对应哪个FTP服务器。如果没有列出配置文件,那就是默认的 vsftpd.conf,那么该进程也就是原来的FTP服务器进程。
  由于第3步中虚拟FTP服务器的配置文件被命名为vsftpd2.conf文件,所以我们可以用/etc/rc.d/init.d/vsftpd脚本同时启动或关闭原FTP服务器和新加的虚拟FTP服务器。
  以下命令单独启动虚拟FTP服务器:
  /usr/sbin/vsftpd /etc/vsftpd/vsftpd2.conf &
  单独关闭虚拟FTP服务器,用“ps -aux | grep vsftpd”查出进程号,再用kill指令杀死虚拟FTP的进程。

  6.5、虚拟用户的配置

  6.5.1、VSFTPD的虚拟用户介绍

   VSFTPD的本地用户本身是系统的用户,除了可以登录FTP服务器外,还可以登录系统使用其他系统资源,而VSFTPD的虚拟用户则是FTP服务的专 用用户,虚拟用户只能访问FTP服务器资源。对于只需要通过FTP对系统有读写权限,而不需要其他系统资源的用户或情况来说,采用虚拟用户方式是很适合 的。

  VSFTPD的虚拟用户采用单独的用户名/口令保存方式,与系统账号(passwd/shadow)分离,这大大增强了系统的 安全性。VSFTPD可以采用数据库文件来保存用户/口令,如hash;也可以将用户/口令保存在数据库服务器中,如MySQL等。VSFTPD验证虚拟 用户,则采用PAM方式。由于虚拟用户的用户名/口令被单独保存,因此在验证时,VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以 完成验证,这就是guest用户,这正如同匿名用户也需要有一个系统用户ftp一样。当然,guest用户也可以被认为是用于映射虚拟用户。

  配置虚拟用户分为几部分:guest用户的创建、用户/口令的保存、PAM认证配置、vsftpd.conf文件设置等。具体的配置方法,参考下面小节。注:在后面的例子中,假定存在虚拟用户xiaotong和xiaowang。

  6.5.2 用户创建和目录设置

  在系统中添加vsftpdguest用户,作为虚拟用户在系统中的代表。
useradd vsftpdguest

  当虚拟用户登录后,所在的位置为vsftpdguest的自家目录/home/vsftpdguest。如果要让虚拟用户登录到/var/ftp等其他目录,修改vsftpdguest的自家目录即可。

  6.5.3、配置文件的设置

  6.5.3.1、基本设置。

  在vsftpd.conf配置文件中,加入以下参数:
  
guest_enable=YES
guest_username=vsftpdguest

  6.5.3.2、虚拟用户的权限配置。

  VSFTPD-1.2.0添加了 virtual_use_local_privs参数,当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户 使用与匿名用户相同的权限,这也就是VSFTPD-1.2.0之前版本对虚拟用户权限的处理方法。这两者种做法相比,后者更加严格一些,特别是在有写访问 的情形下。默认情况下此参数是关闭的(NO)。

  下面先介绍virtual_use_local_privs=NO时,即VSFTPD-1.2.0之前版本对虚拟用户权限的配置方法:

  ①控制虚拟用户浏览目录

  如果让用户不能浏览目录,但仍可以对文件操作,那么需要执行以下二个步骤:一,配置文件中,anon_world_readable_only=YES。二,虚拟用户目录的权限改为只能由vsftpdguest操作:
  
[root@hpe45 vsftpd]# chown vsftpdguest.vsftpdguest /home/vsftpdguest
[root@hpe45 vsftpd]# chmod 700 /home/vsftpdguest



  ②允许虚拟用户上传文件
  
write_enable=YES
anon_upload_enable=YES

  ③允许虚拟用户修改文件名和删除文件
  
anon_other_write_enable=YES


  由于以上选项的设置同样会对匿名用户生效。如果不想匿名用户趁机拥有同样的权限,最好是禁止匿名用户登录。

  在VSFTPD-1.2.0中当virtual_use_local_privs=YES时,只需write_enable=YES,虚拟用户就可以就拥有写权限。

  6.5.3.3、虚拟用户的其他配置

  ①限定虚拟用户在自家目录。

  
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list



  在/etc/vsftpd.chroot_list文件中加入xiaotong和xiaowang。或者,chroot_local_user=YES

  ②虚拟用户的个人配置。

  如果想让个别的虚拟用户拥有自己特别的配置,同样可以建立虚拟用户的个人配置文件。在主配置文件中加入:
  
user_config_dir=/etc/vsftpd/vsftpd_user_conf


  生成/etc/vsftpd/vsftpd_user_conf目录,在该目录下建立与特定虚拟用户同名的文件:
  
[root@hpe45 vsftpd]# mkdir vsftpd_user_conf
[root@hpe45 vsftpd]# cd vsftpd_user_conf
[root@hpe45 vsftpd_user_conf]# touch xiaowang



  然后在xiaowang文件中就可以加入专对xiaowang生效的选项设置了。

  注:如果在个人配置文件中加入chroot_local_user=YES是无效的。

  6.5.3.4、虚拟用户个人目录设置

  大家可以发现,无论是哪个虚拟用户,登录后所在的目录都是/home/vsftpdguest,即都是guest_username用户的自家目录。下面,介绍如何为每个虚拟用户建立自家目录。

  一种作法是在虚拟用户的个人配置文件中使用local_root选项指定虚拟用户的自家目录。以xiaowang为例,在第上步的基础上,首先/etc/vsftpd/vsftpd_user_conf/xiaowang文件中加入:
  
local_root=/home/xiaowang

  新建xiaowang目录,并将权限设为vsftpdguest:
  
[root@hpe45 home]# mkdir xiaowang
[root@hpe45 home]# chown vsftpdguest.vsftpdguest ./xiaowang


  6.5.4、MySQL保存虚拟用户

  本节介绍如何将虚拟用户的用户名和口令保存在MySQL的数据库中。这主要分二个 部分,一是将用户和口令保存在数据库,二是设置相应的PAM认证。为了方便论述,做如下假定:数据库vsftpdvu,表users,字段name和 passwd用于保存虚拟用户的用户名和口令;为了安全,只授权vsftpdguest读vsftpdvu数据库的users表。

  虚拟用户的用户名/口令的保存。这部分在MySQL数据库中完成。首先,创建数据库vsftpdvu以及表users,并插入虚拟用户xiaotong、xiaowang。执行以下命令:
  
[root@hpe45 vsftpd]#mysql -p
  mysql>create database vsftpdvu;
  mysql>use vsftpdvu;
  mysql>create table users(name char(16) binary,passwd char(16) binary);
  mysql>insert into users (name,passwd) values ('xiaotong',password('qqmywife'));
  mysql>insert into users (name,passwd) values ('xiaowang',password('ttmywife'));
  mysql>quit



  然后,授权vsftpdguest只能读vsftpdvu数据库的users表。执行以下命令:
  
[root@hpe45 vsftpd]#mysql -u root mysql -p
  mysql>grant select on vsftpdvu.users to vsftpdguest@localhost identified by 'i52serial0';
  mysql>quit


  如果要验证刚才的操作是否成功可以执行下面命令:
  
[root@hpe45 vsftpd]#mysql -u vsftpdguest -pi52serial0 vsftpdvu
  mysql>select * from users;



  如果成功,将会列出xiaotong、xiaowang和加密后的密码。

  设置PAM认证。这里我们要用到一个利用mysql进行pam验证的开源项目(http://sourceforge.net/projects/pam-mysql/)。首先从网站下载它的程序包pam_myql-0.5.tar.gz,复制到/root目录中。在编译安装之前,要确保mysql-devel的RPM包已经安装在你的机器上,如果没有请从RHL安装光盘中安装该包。然后,执行以下命令:
  [root@hpe45 root]#tar xvzf pam_mysql-0.5.tar.gz
  [root@hpe45 root]#cd pam_mysql
  [root@hpe45 pam_mysql]#make
  [root@hpe45 pam_mysql]#make install


  make install这一步可能会出现错误,那只好手动将该目录下生成的pam_mysql.o复制到/lib/security目录下。

  接下来,我们要设置vsftpd的PAM验证文件。打开/etc/pam.d/vsftpd文件,加入以下内容:
  
auth required pam_mysql.o user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
  account required pam_mysql.o user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2


  上面涉及到的参数,只要对应前面数据库的设置就可以明白它们的含义。这里需要说明的是crypt参数,crypt=0,口令以明文方式(不加密)保存 在数据库中;crypt=1,口令使用UNIX系统的DES加密方式加密后保存在数据库中;crypt=2,口令经过MySQL的password()函 数加密后保存。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 请问vsftp中可否在使用虚拟用户的情况下同时开启匿名用户?
帖子发表于 : 2009-05-04 19:49 
头像

注册: 2008-07-21 9:44
帖子: 2371
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
LS写的不错 :em11


_________________

My blog


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 3 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译