本文对安装部分不做描述 使用xinetd 管理vsftpd(一定要安装xinetd) 像FTP这样的访问压力比较小的服务,使用xinetd方式是比较合适的,首先应该告诉vsftpd,从现在开始可以不用监听端口了,打开配置文件/etc/vsftpd/vsftpd.conf,找到 "listen=YES" 将"listen=YES"改为"listen=NO",表示不必监听端口, 接下来需要告诉xinetd和FTP服务器有关的信息。为此,在/etc/xinetd.d 目录下建立文件vsftpd,包含下面这些内容 service ftp { socket_type = stream wait = no user = root server = /usr/sbin/vsftpd #server字段填写的是vsftpd服务器的启动脚本所在地路径。 log_on_success += DURATION disable = no } 现在重新启动xinetd,使其配置生效 /etc/xinetd.d/xinetd restart 查看22端口的情况,可以看到xinetd已经接管了这个端口 netstat -tulnp | grep 22 或者 lsof -i:22 设置匿名用户登录 vsftp 服务器默认配置为允许匿名用户登录,匿名用户叫做anonymous 这个用户在本地被映射为ftp 打开 /etc/vsftpd/vsftpd.conf,应该可以看到这些 # Allow anonymous FTP? (Beware - allowed by default if you comment this out). anonymous_enable=YES 另一个比较有用的选项是anno_max_rate,用于限制匿名用户的传输速率,在宽带资源并不非常充裕的情况下,可以考虑“委屈”一下 anonymous,这个选项后面的数值单位是bytes/秒,如果设置为0 将不受限制,例如将匿名用户传输的速率限制为20KB/s,那么可以这样设置 naon_max_rate=20000 然后记得重启FTP服务器,使其生效。 设置本地用户登录 在一个网店内部,FTP更多的情况下被配置为向授权用户开放。为此,用户应该在服务器上拥有自己的帐号。vsftpd 把这样的用户称之为“本地用户” (local users),这和其他FTP服务器所说的“真实用户(real users)” 是一回事。 要开启vsftpd 的这个功能,只要简单的取消配置文件中local_enable=YES前的注释符号#,如果在vsftpd.conf配置文件中找不到这一行,那就手动填上,当本地用户登录到FTP上,所处的目录就是在服务器上的主目录,没有理由限制用户在自己的目录中创建、删除或是修改数据,在配置文件中取消write_enable=YES前的注释符号#可以打开本地用户的上传权限(若没有,则手动添加) # Uncomment this to allow local users to log in. local_enable=YES # # Uncomment this to enable any form of FTP write command. write_enable=YES 重启生效 处于安全性的开考虑,有一些用户是不能被允许通过FTP登录的,例如root用户。vsftpd将一些系统用户整理在/etc/vsftpd/ftpusers 中,通过cat命令查看这个文件得到如下信息 [root@mail ~]# cat /etc/vsftpd/ftpusers # Users that are not allowed to login via ftp root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody 这是一张黑名单,所有被列入其中的用户都不能通过FTP登录进来,当然,尽管FTP的本意是组织外部FTP用户接触本地的系统信息,但管理员也可以简单地把那些“看不顺眼”的账户放进去,这样就可以实现限制某些用户登录FTP的功能了 限制用户在本地目录中 登录到FTP的用户可以在服务器上到处浏览,查看普通的或是敏感的文件。这显然是任何一个管理员都不愿见到的事情。幸运的是,vsftpd提供了chroot(change root改变根目录)系统调用,使其他目录在使用者不可见,也不可访问 要开启这个选项,应该在/etc/vsftpd/vsftpd.conf找到chroot_root_user关键字,并修改成下面这样 chroot_local_user=YES 这样当用户试图进入一个系统目录是,vsftpd会提示失败,并委婉的拒绝这一请求 ftp> cd /etc/ 550 Filed to change directory. 类似的,管理员还可以指定下面这个选项,通过一个配置文件制定有哪些用户应该受到限制 chroot_list_enable=YES 配置文件通过chroot_list_file选项指定,下面这条设置将配置完呢间指定为/etc/vsftpd/vsftpd.chroot_list chroot_list_file=/etc/vsftpd/vsftpd.chroot_list /etc/vsftpd/vsftpd.chroot_list的格式应该和/etc/vsftpd/ftpusers 一样,每行一个用户 使用虚拟用户、 虚拟用户基于这样一种能够实现方式:所有非匿名用户的均被视为访客(guest),并被映射为一个特定的用户:用guest_username选项指定。管理员可以为每一个用户设置主目录,并赋予相应的权限。虚拟用户非常适合那些需要为不同用户提供FTP空间的站点。WEB 主机托管常常采用这样的方法:用户在本地编辑好网页,然后通过FTP上传到服务器上——首先要通过虚拟用户身份验证。 例如:一项任务,并包括下面这些需求 禁用匿名用户 为用户jcsmith和culva添加FTP虚拟用户 将他们的口令分别设置为jc123和cu123 将jcsmith的FTP主目录设置为/home/ftp/jcsmith,赋予它只读权限 将culva的FTP主目录设置为/home/ftp/culva,赋予它上传文件和建立目录的权限 创建虚拟用户的数据库文件 创建数据库文件需要DB这个工具,db工具通过读取一个特定格式的文本文件在创建数据库文件,这个用户应该为每个用户预留2行,第一行是用户名,第二行是口令,在本例中,在主目录下建立文件login_user(文件名宁可以任取),包含下面这些内容 jcsmith jc123 culva cu123 运行db_load 命令,通过~/login_user(由-f选项指定)创建数据库文件/etc/vsftpd_login.db(yum install db* -y) db_load -T -t hash -f /home/lewis/login_user /etc/vsftpd_login.db -T选项知道db_load命令通过文本文件创建数据库,“-t hash”则指定了创建数据库的方式:这里使用了一种被称作“哈希表(Hash table)” 的数据结构,最后修改这个数据库问价你的权限,使其只对root用户可见 chmod 600 /etc/vsftpd_login.db 配置PAM验证 /etc/pam.d/vsftpd 是vsftpd默认使用的PAM验证文件,编辑这个文件,加入下面这两行 auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login account required /lib/security/pam_userdb.so db=/etc/vsftpd_login 在/etc/pam.d/vsftpd 中原本就有的一些配置会干扰这里的设置。将其他所有的行都注释掉。 事实上,vsftpd使用的PAM文件是用配置文件(/etc/vsftpd/vsftpd.conf)中的pam_service_name=指定的。如果感到/etc/pam.d/vsftpd设置起来太麻烦。也可以使用自己喜欢的名字在/etc/pam.d/下新建一个文件,然后把pam_service_name指向它。下面这条配置将vsftpd的PAM验证文件设置为/etc/pam.d/my_vsftpd pam_service_name=my_vsftpd 创建本地用户映射 下面设置将登录进来的jcsmith和culva映射为一个指定的非特权用户。编辑vsftpd的配置文件/etc/vsftpd/vsftpd.conf,修改(或者添加) guest_username=ftp 这样jcsmith和culva 在登录到FTP服务器后。就只有FTP用户的权限了,下面在配置文件中/etc/vsftpd/vsftpd.conf所有可能影响到的行 anonymous_enable=NO ##不允许匿名用户登录 local_enable=YES ##允许本地用户登录 chroot_local_user=YES ##将用户限制在主目录中 pam_service_name=vsftpd ##指定PAM验证文件(在/etc/pam.d/中) guest_enable=yes ##激活访客(guest)身份 guest_username=ftp ##设置登录用户应该被映射成本地用户 其中local_enable=YES 和 guest_enable=YES 用于开启虚拟用户登录。前者告诉vsftpd允许本地用(在本例中是jcsmith和culva)登录到服务器;后者用于将所有的登录用户视为访客(guest)。访客最终被映射为guest_username所指定的bending用户(在本例中是FTP) 设置用户目录和权限 到目前为止已经可以用jcsmith和culva这两个账户登录FTP服务器了,但他们还只能拥有相同的目录(/home/ftp)和权限。下面来完成最后的两个任务 将jcsmith的FTP主目录设置为/home/ftp/jcsmith,赋予它只读权限 将culva的FTP主目录设置为/home/ftp/culva,赋予它上传文件和建立目录的权限 首先为这两个用户建立各自的主目录。在本例中,虚拟用户登录后自动被映射为本地的ftp用户,所以应该把这些目录的属主设置为ftp用户 mkdir /home/ftp/culva chown ftp /home/ftp/culva/ mkdir /home/ftp/jcsmith chwon ftp /home/ftp/jcsmith/ 接下来为两个用户设置不同的目录和权限。vsftpd使用“user_config_dir=”这一选项来指定存放用户配置的目录。这里首先建立 mkdir /etc/vsftpd_user_conf 然后在/etc/vsftpd/vsftpd.conf中将user_config_dir选项指向它。现在配置文件中项管的行看起来像下面这样 anonymous_enable=NO ##不允许匿名用户登录 local_enable=YES ##允许本地用户登录 chroot_local_user=YES ##将用户限制在主目录中 pam_service_name=vsftpd ##指定PAM验证文件(在/etc/pam.d/中) guest_enable=yes ##激活访客(guest)身份 guest_username=ftp ##设置登录用户应该被映射成本地用户 user_config_dir=/etc/vsftpd_user_conf ##存放用户配置文件的目录 最后在/etc/vsftpd_user_conf目录下降了jcsmith和culva这两个文本文件,分别存放和jcsmith和culva有关的配置。jcsmith的内容非常简单,只有一行 local_root=/home/ftp/jcsmith ##这行指定了jcsmith在FTP服务器上的主目录 culva的配置文件如下 write_enable=YES ##打开vsftpd的全局写权限 anon_upload_enable=YES ##打开文件上传权限 anon_mkdir_write_enable=YES ##打开建立目录的权限 local_root=/home/ftp/culva 至此就完成了FTP虚拟用户的设置,作为工作的最后一步,重启服务器总是必须的 service vsftpd restart