快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

vsftpd配置手册(2)

  安装篇

  ===============

  这个文件详细介绍了如何从VSFTPD的.tar.gz分发包开始,建立和安装并运行VSFTPD。

  1)建立VSFTPD

  先进入解压.tar.gz文件后产生的目录内。如下:

  cd vsftpd-2.0.1

  编辑"builddefs.h"以操作compile-time设定。(tcp_wrappers build,等)

  输入make,回车(如果它不工作请发邮件通知我 .

  这将产生一个二进制文件,你可以验证一下。如下:

  [chris@localhost vsftpd]$ ls -l vsftpd

  -rwxrwxr-x 1 chris chris 61748 Sep 27 00:26 vsftpd

  2)满足VSFTPD安装所需的一些条件

  VSFTPD默认设置需要一个"nobody"用户,如果这个用户不存在,那么添加它。如下:

  [root@localhost root]# useradd nobody

  useradd: user nobody exists

  VSFTPD默认设置需要一个空目录:/usr/share/empty.增加这个目录,如果它还不存在的话。如下:

  [root@localhost root]# mkdir /usr/share/empty/

  mkdir: cannot create directory `/usr/share/empty': File exists

  如果容许匿名用户(anonymous),那么你将需要一个"ftp"用户和其home目录(这个home目录不属于“ftp”用户,而且“ftp"用户也对其没有写权限)在你的系统中存在。

  以下命令用来创建一个"ftp"用户,如果它还不存在的话。

  [root@localhost root]# mkdir /var/ftp/

  [root@localhost root]# useradd -d /var/ftp ftp

  (即使你的"ftp"用户已经存在,完成以下这两步也是很有好处的:)

  [root@localhost root]# chown root.root /var/ftp

  [root@localhost root]# chmod og-w /var/ftp

  3)安装VSFTPD的配置、执行和帮助文件。

  输入"make install"后会将二进制文件和帮助文件拷贝到适当的目录。

  你也可以手工拷贝这些文件:

  cp vsftpd /usr/local/sbin/vsftpd

  cp vsftpd.conf.5 /usr/local/man/man5

  cp vsftpd.8 /usr/local/man/man8

  "make install"不会拷贝默认的配置文件,所以建议你手工拷贝:

  cp vsftpd.conf /etc

  daidong注:根据你系统版本的不同,也可能是 cp vsftpd.conf /etc/vsftpd

  4)测试 (无inetd影响)

  VSFTPD能运行在独立模式(standalone)或者通过inetd(xinetd)来启动。

  你能通过inetd来运行vsftpd以更好地控制它。但我们在首次运行时不这么做,以便检查系统是否现在配置正常。

  编辑/etc/vsftpd.conf(daidong注:也可能是/etc/vsftpd/vsftpd.conf),并在最下面加入以下这一行:

  listen=YES

  这将告诉VSFTPD不要从inetd启动。

  OK,现在试着启动FTP。

  以ROOT登录。

  确定你没有运行其他FTP服务(否则VSFTPD不能占用FTP所需的21端口)。

  运行那个二进制文件,如下:

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

  [1] 2104

  如果一切正常,那么你将连上FTP服务器,如下:

  [chris@localhost chris]$ ftp localhost

  Connected to localhost (127.0.0.1).

  220 (vsFTPd 1.1.1)

  Name (localhost:chris): 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,229,133)

  150 Here comes the directory listing.

  d--x--x--x 2 0 0 4096 Jan 14 2002 bin

  d--x--x--x 2 0 0 4096 Apr 21 20:52 etc

  drwxr-xr-x 2 0 0 4096 Apr 21 20:52 lib

  drwxr-sr-x 2 0 50 4096 Jul 26 22:58 pub

  226 Directory send OK.

  ftp>

  5)从inetd或者类似方式启动(官方推荐使用standalone方式)

  你也许想通过inetd或者类似方式启动VSFTPD,因为这能给你更多的感受。例如xinetd就有很多的设置。

  (注意:VSFTPD的内在机制屏蔽了xinetd的大多数的有用的设置)。

  如果使用标准的"inetd",你需要编辑/etc/inetd.conf,在其中加入以下一行:

  ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/vsftpd

  (确定你删除或者注释掉一些已存在的FTP服务配置行。如果你没有安装tcp_wrappers,或者不想使用它们,那么请去掉/usr/sbin/tcpd part).

  inetd需要指定并重新载入它的配置文件:

  kill -SIGHUP `pidof inetd`

  如果你想使用"xinetd",请参阅我们提供的范例 /EXAMPLE/INTERNET_SITE/README. 而其他范例文件将告诉你如何调配出更强大的xinetd功能。

  6)为本地登录配置PAM文件(可选)

  如果你在一台激活了PAM的设备上运行VSFTPD,你需要提供一个 /etc/pam.d/ftp 文件。否则非匿名用户将无法登录服务器。

  (注:如果你的PAM版本比较老,那么这个文件也许是 /etc/pam.conf).

  做为一个标准设置,你可以拷贝一个已提供的范例文件,如下:

  cp RedHat/vsftpd.pam /etc/pam.d/ftp

  7)自定义你的配置文件

  完成以上的配置后,建议你安装一个配置文件。默认的配置文件位置是/etc/vsftpd.conf. 在VSFTPD软件分发包内有一个范例配置文件。

  你可以拷贝其为/etc/vsftpd.conf以做进一步修改。

  cp vsftpd.conf /etc

  (daidong注:也可能是 cp vsftpd.conf /etc/vsftpd ).

  这个默认配置即不容许本地登录也不容许匿名用户上传,也许你希望更改这个配置。

  其它

  ===================

  测试平台 (已通过)

  -流行的,功能完善的平台都能测试通过。在以下平台的较新版本,VSFTPD工作得很好。在其大部分较早的版本下,也运行正常。

  - RedHat Linux

  - RedHat Enterprise Linux

  - Solaris / GNU tools (Solaris 8 or newer)

  - SuSE Linux

  - Debian Linux

  - OpenBSD

  - FreeBSD

  - NetBSD

  - HP-UX / GNU tools

  - IRIX / GNU tools

  - Mac OS X (note; older versions have setgroups() problem. 10.3.4 reported OK)

  虚拟用户1

  =============

  这个例子示范了如何为虚拟用户设置VSFTPD/PAM。

  虚拟用户是一个在系统中并不作为一个登录实体而存在的用户。使用虚拟用户比使用真实的用户更安全,因为这个账号只能用于FTP服务器。

  虚拟用户经常用来提供给不大可信任的用户访问某些资源,而这些资源通常是其他普通用户不能访问的。

  1)创建虚拟用户数据库

  我们将使用pam_userdb来认证虚拟用户。这需要提供一个“db"格式(一种通用数据库格式)的用户名/密码文件。

  创建一个"db"格式的文件,首先要创建一个标准文本文件,并把用户名,密码以竖直排列方式输入。如logins.txt:

  tom

  foo

  fired

  bar

  这个例子中,tom用户的密码是foo.fired用户的密码是bar.

  以ROOT登录,创建一个数据库文件,如下:

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

  (这要求berkeley db程序已经安装)

  (注:一些系统也许安装了多个版本的"db",所以某些情况下你可能使用"db3_load"才是正确的。对于一些 Debian系统就是这样。

  关键在于要让pam_userdb相信它的登录数据库是哪一个db版本所产生(一般都是db3,尽管你的系统里可能安装的是db4).)

  这将创建/etc/vsftpd_login.db文件。显然,你希望设定这个文件的权限:

  chmod 600 /etc/vsftpd_login.db

  要了解更多关于维护你的登录数据库的信息,请在"berkeley DB"察看相关文档:

  http://www.sleepycat.com/docs/utility/index.html

  2)用你的新数据库创建一个PAM文件

  请参考范例vsftpd.pam,它包含2行:

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

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

  这是告诉PAM用新的数据库去验证用户。把这个PAM文件拷贝到PAM目录,一般是/etc/pam.d

  cp vsftpd.pam /etc/pam.d/ftp

  3)为虚拟用户设置home目录

  useradd -d /home/ftpsite virtual

  ls -ld /home/ftpsite

  (which should give):

  drwx------ 3 virtual virtual 4096 Jul 30 00:39 /home/ftpsite

  我们已经创建了一个名叫"virtual"的用户,home目录是"/home/ftpsite".

  我们拷贝一些东西到这个下载目录:

  cp /etc/hosts /home/ftpsite

  chown virtual.virtual /home/ftpsite/hosts

  4)创建你的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

  这将把虚拟用户锁定在我们在以上设置的/home/ftpsite目录内。

  guest_enable=YES

  guest_username=virtual

  guest_enable非常重要-它激活了虚拟用户!而guest_username说明所有的虚拟用户都对应我们在上面设置的真实用户:“virtual".

  这同时确定了虚拟用户在文件系统中的位置,也就是说,虚拟用户的home目录即"virtual"用户的home目录:/home/ftpsite。

  listen=YES

  listen_port=10021

  这让VSFTPD以独立模式(standalone)运行,而不是从inetd方式启动。也就是说,你运行VSFTPD可执行文件就启动了FTP服务。

  同时也让VSFTPD启用非标准端口10021来监听FTP请求(FTP一般使用21端口)。

  pasv_min_port=30000

  pasv_max_port=30999

  这设定了被动模式的FTP请求端口。当你配置了一个防火墙的时候,这个配置就很好用。

  拷贝范例配置文件到/etc

  cp vsftpd.conf /etc/

  (daidong注:也可能是/etc/vsftpd)

  5)启动VSFTPD

  到VSFTPD二进制文件所在的目录,输入:

  ./vsftpd

  如果一切正常,这个命令将生效。否则,你将会看到一些错误信息的反馈。

  6)测试

  启动另一个会话。(或者ctrl-z,再输入"bg",让VSFTPD在后台运行)。

  这是一个FTP会话的例子:

  ftp localhost 10021

  Connected to localhost (127.0.0.1).

  220 ready, dude (vsFTPd 1.1.0: beat me, break me)

  Name (localhost:chris): tom

  331 Please specify the password.

  Password:

  230 Login successful. Have fun.

  Remote system type is UNIX.

  Using binary mode to transfer files.

  ftp> pwd

  257 "/"

  ftp> ls

  227 Entering Passive Mode (127,0,0,1,117,135)

  150 Here comes the directory listing.

  226 Transfer done (but failed to open directory).

  ftp> size hosts

  213 147

  ftp>

  注释:

  密码是"foo"

  出现”failed to open directory“的话,别担心。这是因为/home/ftpsite目录不容许被任意浏览。

  (我们可以更改anon_world_readable_only=NO以消除告警,但为了安全,还是保留这个配置)。

  我们能通过size命令看到我们已经访问了被我们拷贝到这里的"hosts"文件。

  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=10021

  pasv_min_port=30000

  pasv_max_port=30999

  虚拟用户2

  ===============

  这个例子将演示如何扩展“VIRTUAL_USERS”那个范例,从而实现更复杂一点的配置。

  让我们假定我们需要2种不同的虚拟用户:一种只能浏览并下载资源,另一种能上传文件并浏览站内资源。

  要激活这个设置,我们将使用VSFTPD的强大的“单个用户配置”功能(是V1.1.0后出现的新功能)。

  在前一个虚拟用户范例中,我们创建了2个用户-tom和fred.

  我们将实现fred有写权限以上传新文件,同时tom只能下载文件。

  1)激活单个用户配置功能。

  要激活这个功能,需要增加以下配置行到配置文件:

  user_config_dir=/etc/vsftpd_user_conf

  并且创建目录:

  mkdir /etc/vsftpd_user_conf

  2)授予tom读取所有文件和目录的权限

  在上一个例子的最后,我们注意到虚拟用户只能浏览所有的完全可读属性的目录和文件。我们使/home/ftpsite完全可读,而且被上传的文件也

  赋予了完全可读的权限(daidong注:意思是说这样虚拟用户就能读取所有的文件了)。但实现这个目的的另一个方法是授权tom能下载那些非完全可读的文件。

  对于tom,他的配置文件中需要修改一个设置:

  anon_world_readable_only:

  设为"anon_world_readable_only=NO" > /etc/vsftpd_user_conf/tom

  (daidong注:既把默认配置修改了anon_world_readable_only后,复制到/etc/vsftpd_user_conf下,名字为tom)

  验证一下结果-以tom登录,“ls”将返回一个目录列表。如果以fred登录将不会如此。

  注意:重启VSFTPD以启用配置文件/etc/vsftpd.conf(高级用户也可以发送SIGHUP给VSFTPD的监听进程).

  3)授予freg读取所有文件/目录并创建新文件/目录的权限,但让他不能对已存在的文件/目录进行操作.

  echo "anon_world_readable_only=NO" > /etc/vsftpd_user_conf/fred

  echo "write_enable=YES" >> /etc/vsftpd_user_conf/fred

  echo "anon_upload_enable=YES" >> /etc/vsftpd_user_conf/fred

  验证一下-以tom登录,将不能上传,而fred就可以.

  试图删除一个文件--噢,你们俩都不行!

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论