Liunx 环境下vsftpd的三种实现方法
以下文章介绍Liunx 环境下vsftpd的三种实现方法 <br>一、前言 <br>Vsftp(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器,目前已经被许多大型站点所采用,如ftp.redhat.com,ftp.kde.org,ftp.gnome.org.等。Vsftpd的实现有三种方式 <br>1、匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问 <br>2、本地用户形式:以/etc/passwd中的用户名为认证方式 <br>3、虚拟用户形式:支持将用户名和口令保存在数据库文件或数据库服务器中。相对于FTP的本地用户形式来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。<br><br>三、三种方式的实现 <br>1、匿名用户形式实现 <br># vi builddefs.h 编辑builddefs.h 文件,文件内容如下: <br>#ifndef VSF_BUILDDEFS_H <br>#define VSF_BUILDDEFS_H <br>#undef VSF_BUILD_TCPWRAPPERS <br>#define VSF_BUILD_PAM <br>#undef VSF_BUILD_SSL <br>#endif /* VSF_BUILDDEFS_H */ <br>将以上undef的都改为define,支持tcp_wrappers,支持PAM认证方式,支持SSL <br># make //直接在vsftpd-2.0.3里用make编译 <br># ls -l vsftpd <br>-rwxr-xr-x 1 root root 86088 Jun 6 12:29 vsftpd //可执行程序已被编译成功 <br>创建必要的帐号,目录: <br># useradd nobody //可能你的系统已经存在此帐号,那就不用建立 <br># mkdir /usr/share/empty //可能你的系统已经存在此目录,那就不用建立 <br># mkdir /var/ftp //可能你的系统已经存在此目录,那就不用建立 <br># useradd -d /var/ftp ftp //可能你的系统已经存在此帐号,那就不用建立 <br># chown root:root /var/ftp <br># chmod og-w /var/ftp <br>请记住,如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin <br>安装vsftp配置文件,可执行程序,man等: <br># install -m 755 vsftpd /usr/local/sbin/vsftpd-ano <br># install -m 644 vsftpd.8 /usr/share/man/man8 <br># install -m 644 vsftpd.conf.5 /usr/share/man/man5 <br># install -m 644 vsftpd.conf /etc/vsftpd-ano.conf <br>这样就安装完成了,那么我们开始进行简单的配置 <br># vi /etc/vsftpd-ano.conf ,将如下三行加入文件 <br>listen=YES <br>listen_port=21 <br>tcp_wrappers=YES <br>anon_root=/var/ftp //设置匿名用户本地目录,和ftp用户目录必须相同 <br>listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式) <br># /usr/local/sbin/vsftpd-ano /etc/vsftpd-ano.conf & //以后台方式启动vsftpd <br>注意:每行的值都不要有空格,否则启动时会出现错误,举个例子,假如我在listen=YES后多了个空格,那我启动时就出现如下错误: <br>500 OOPS: bad bool value in config file for: listen <br>测试搭建好的匿名用户方式 <br># ftp 127.0.0.1 <br>Connected to 127.0.0.1. <br>220 (vsFTPd 2.0.3) <br>530 Please login with USER and PASS. <br>530 Please login with USER and PASS. <br>KERBEROS_V4 rejected as an authentication type <br>Name (127.0.0.1:root): ftp <br>331 Please specify the password. <br>Password: <br>230 Login successful. <br>Remote system type is UNIX. <br>Using binary mode to transfer files. <br>ftp> pwd <br>257 "/" <br>ftp> quit <br>221 Goodbye. <br># <br>OK,已经完成了,very nice.<br><br><br>高级配置 <br>细心的朋友可能已经看出来我们只在默认配置文件增加了四行,就实现了FTP连接(也证明了vsftpd的易用性),那么让我们传个文件吧,呀!!传输失败了(见图1) <br>为什么呢?因为 vsftpd 是为了安全需要,/var/ftp目录不能把所有的权限打开,所以我们这时要建一个目录pub,当然也还是需要继续修改配置文件的。 <br># mkdir /var/ftp/pub <br># chmod -R 777 /var/ftp/pub <br>为了测试方便,我们先建立一个名为kill-ano的脚本,是为了杀掉FTP程序的 <br>#!/bin/bash <br>a=`/bin/ps -A | grep vsftpd-ano | awk '{print }'` <br>kill -9 $a<br><br><br><br><br><br><br>那么现在大家看看我的匿名服务器配置文件吧 <br>anonymous_enable=YES //允许匿名访问,这是匿名服务器必须的 <br>write_enable=YES //全局配置可写 <br>no_anon_password=YES //匿名用户login时不询问口令 <br>anon_umask=077 //匿名用户上传的文件权限是-rw---- <br>anon_upload_enable=YES //允许匿名用户上传文件 <br>anon_mkdir_write_enable=YES //允许匿名用户建立目录 <br>anon_other_write_enable=YES //允许匿名用户具有建立目录,上传之外的权限,如重命名,删除 <br>dirmessage_enable=YES //当使用者转换目录,则会显示该目录下的.message信息 <br>xferlog_enable=YES //记录使用者所有上传下载信息 <br>xferlog_file=/var/log/vsftpd.log //将上传下载信息记录到/var/log/vsftpd.log中 <br>xferlog_std_format=YES //日志使用标准xferlog格式 <br>idle_session_timeout=600 //客户端超过600S没有动作就自动被服务器踢出 <br>data_connection_timeout=120 //数据传输时超过120S没有动作被服务器踢出 <br>chown_uploads=YES <br>chown_username=daemon //上传文件的属主 <br>ftpd_banner=Welcome to d-1701.com FTP service. //FTP欢迎信息 <br>anon_max_rate=80000 //这是匿名用户的下载速度为80KBytes/s <br>check_shell=NO //不检测SHELL<br><br><br><br><br><br><br>现在再测试,先kill掉再启动FTP程序 <br># ./kill-ano <br># /usr/local/sbin/vsftpd-ano /etc/vsftpd-ano.conf & <br>上传一个文件测试一下,怎么样?OK了吧,下载刚上传的那个文件,恩?不行,提示 <br>550 Failed to open file. <br>传输已失败! <br>传输队列已完成 <br>1 个文件传输失败 <br>没有关系,你记得咱们设置了anon_umask=077了吗?所以你下载不了,如果你到服务器上touch 一个文件(644),测试一下,是可以被下载下来的,好了,匿名服务器就说到这里了。<br><br>、本地用户形式实现 <br># cd /home/xuchen/vsftpd-2.0.3 //进入vsftpd-2.0.3的源代码目录 <br># make clean //清除编译环境 <br># vi builddefs.h 继续编辑builddefs.h 文件,文件内容如下: <br>#ifndef VSF_BUILDDEFS_H <br>#define VSF_BUILDDEFS_H <br>#define VSF_BUILD_TCPWRAPPERS <br>#define VSF_BUILD_PAM <br>#define VSF_BUILD_SSL <br>#endif /* VSF_BUILDDEFS_H */ <br>将以上define VSF_BUILD_PAM行的define改为undef,支持tcp_wrappers,不支持PAM认证方式,支持SSL,记住啊,如果支持了PAM认证方式,你本地用户是不能登陆的。 <br># make //直接在vsftpd-2.0.3里用make编译 <br># ls -l vsftpd <br>-rwxr-xr-x 1 root root 84712 Jun 6 18:56 vsftpd //可执行程序已被编译成功<br>创建必要的帐号,目录: <br># useradd nobody //可能你的系统已经存在此帐号,那就不用建立 <br># mkdir /usr/share/empty //可能你的系统已经存在此目录,那就不用建立 <br># mkdir /var/ftp //可能你的系统已经存在此目录,那就不用建立 <br># useradd -d /var/ftp ftp //可能你的系统已经存在此帐号,那就不用建立 <br># chown root:root /var/ftp <br># chmod og-w /var/ftp <br>请记住,如果你不想让用户在本地登陆,那么你需要把他的登陆SHELL设置成/sbin/nologin,比如以上的nobody和ftp我就设置成/sbin/nologin <br>安装vsftp配置文件,可执行程序,man等: <br># install -m 755 vsftpd /usr/local/sbin/vsftpd-loc <br># install -m 644 vsftpd.8 /usr/share/man/man8 <br># install -m 644 vsftpd.conf.5 /usr/share/man/man5 <br># install -m 644 vsftpd.conf /etc/vsftpd-loc.conf <br>这样就安装完成了,那么我们开始进行简单的配置<br><br># vi /etc/vsftpd-loc.conf ,将如下三行加入文件 <br>listen=YES <br>listen_port=21 <br>tcp_wrappers=YES //支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny) <br>listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式),注意事项请参看匿名用户的配置。 <br>anonymous_enable=NO <br>local_enable=YES //这两项配置说不允许匿名用户登陆,允许本地用户登陆 <br># /usr/local/sbin/vsftpd-loc /etc/vsftpd-loc.conf & //以后台方式启动vsftpd <br>测试搭建好的匿名用户方式,先测试root用户吧 :) <br># ftp 127.0.0.1 <br>Connected to 127.0.0.1. <br>220 (vsFTPd 2.0.3) <br>530 Please login with USER and PASS. <br>530 Please login with USER and PASS. <br>KERBEROS_V4 rejected as an authentication type <br>Name (127.0.0.1:root): root <br>331 Please specify the password. <br>Password: <br>230 Login successful. <br>Remote system type is UNIX. <br>Using binary mode to transfer files. <br>ftp> pwd <br>257 "/root" <br>ftp> quit <br>221 Goodbye. <br>我们看到root用户可以登陆到ftp,他的登陆目录就是自己的主目录<br><br>再测试一个系统用户,那我们先建立一个用户名叫xuchen的 <br># useradd xuchen <br># passwd xuchen <br>Changing password for user xuchen. <br>New UNIX password: <br>Retype new UNIX password: <br>passwd: all authentication tokens updated successfully. <br>建立好了,让我们开始测试吧!! <br># ftp 127.0.0.1 <br>Connected to 127.0.0.1. <br>220 (vsFTPd 2.0.3) <br>530 Please login with USER and PASS. <br>530 Please login with USER and PASS. <br>KERBEROS_V4 rejected as an authentication type <br>Name (127.0.0.1:root): xuchen <br>331 Please specify the password. <br>Password: <br>230 Login successful. <br>Remote system type is UNIX. <br>Using binary mode to transfer files. <br>ftp> pwd <br>257 "/home/xuchen" <br>ftp> quit <br>221 Goodbye. <br>我们看到xuchen用户可以登陆到ftp,他的登陆目录也是自己的主目录。哈哈,又完成了!<!--[[[SQ]]][[[http://www.wendaedu.com/viewthread.php?tid=2321]]]--><!--[[[SQ]]][[[http://www.wendaedu.com/viewthread.php?tid=2321]]]--><!--[[[SQ]]][[[http://www.wendaedu.com/viewthread.php?tid=2321]]]--><!--[[[SQ]]][[[http://www.wendaedu.com/viewthread.php?tid=2321]]]--><!--[[[SQ]]][[[http://www.wendaedu.com/viewthread.php?tid=2321]]]--><!--[[[SQ]]][[[http://www.wendaedu.com/viewthread.php?tid=2321]]]--><!--[[[SQ]]][[[http://www.wendaedu.com/viewthread.php?tid=2321]]]--><!--[[[SQ]]][[[http://www.wendaedu.com/viewthread.php?tid=2321]]]--><!--[[[SQ]]][[[http://www.wendaedu.com/viewthread.php?tid=2321]]]--><!--[[[SQ]]][[[http://www.wendaedu.com/viewthread.php?tid=2321]]]--><!--[[[SQ]]][[[http://www.wendaedu.com/viewthread.php?tid=2321]]]--><!--[[[SQ]]][[[http://www.wendaedu.com/viewthread.php?tid=2321]]]--><!--[[[SQ]]][[[http://www.wendaedu.com/viewthread.php?tid=2321]]]-->页:
[1]
