随笔-2  评论-1  文章-17  trackbacks-0
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 地址,请参考相关文档。   1、创建虚拟FTP服务器的根目录。   mkdir -p /var/ftp2/pub   确保/var/ftp2和/var/ftp2/pub目录的拥有者和组均为root,掩码为755。   2、增加虚拟FTP服务器的匿名用户帐号。原先的FTP服务器使用系统用户ftp作为其匿名用户帐号。我们要增加一个ftp2用于虚拟FTP服务器。   useradd -d /var/ftp2 -M ftp2   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。   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表。   1、虚拟用户的用户名/口令的保存。这部分在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和加密后的密码。   2、设置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()函数加密后保存。
posted on 2007-01-22 16:39 花斑鼠 阅读(150) 评论(0)  编辑 收藏 引用 所属分类: linux system
只有注册用户登录后才能发表评论。