最近被pureftpd的乱码搞到头疼了。查了很多资料包括官方文档,要让pureftpd支持utf-8编码,需要在编译的时候加上–with-rfc2640选项,于是我又重新编译了一遍,发现该功能依然是失效的!很无奈只好放弃pureftpd了转向vsftpd的怀抱了。经过简单的测试,发现vsftpd默认编码就是utf-8,且能够自动处理文件的编码(例如当收到无效字节时会自动禁用utf-8,即使有用户以gbk上传的文件,也能正常显示,这个功能很赞)。本文CentOS 6 64bit上面配置vsftpd的过程,记录一下。
假设ftp的根目录是/home/wwwroot/ftp:
$ yum install vsftpd
$ useradd -d /home/wwwroot/ftp -g www -s /sbin/nologin 用户名
$ passwd 用户名
$ touch /etc/vsftpd/chroot_list
$ vim /etc/vsftpd/vsftpd.conf
#对以下选项作更改,如果没有就添加
anonymous_enable=NO
idle_session_timeout=600
ftpd_banner=Welcome to zhukun.net FTP service.
chroot_list_enable=YES #是否启用列表文件,默认为NO
chroot_local_user=YES #列表文件中的用户能否切换到上级目录,默认为NO
chroot_list_file=/etc/vsftpd/chroot_list
use_localtime=YES
$ chkconfig --level 2345 vsftpd on
$ service vsftpd start
$ chown -R 用户名 /home/wwwroot/ftp
vsftpd配置项详解 http://www.cnblogs.com/acpp/archive/2010/02/08/1666054.html
以下选项请认真体会:
一,控制用户是否允许切换到上级目录
(1)当chroot_list_enable=YES,chroot_local_user=YES时,在chroot_list文件中列出的用户,可以切换到上级目录;未在文件中列出的用户,不能切换到上级目录。
(2)当chroot_list_enable=YES,chroot_local_user=NO时,在chroot_list文件中列出的用户,不能切换到上级目录;未在文件中列出的用户,可以切换到上级目录。
(3)当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到上级目录。
(4)当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到上级目录。
二,控制用户访问:
对于用户的访问控制可以通过/etc目录下的vsftpd.user_list和ftpusers文件来实现。
userlist_file=/etc/vsftpd/user_list #控制用户访问FTP的文件,里面写着用户名称,一个用户名称一行。
userlist_enable=YES/NO(NO) #是否启用user_list文件。
userlist_deny=YES/NO(YES)
userlist_deny决定user_list文件中的用户是否能够访问FTP服务器。若设置为YES,则user_list文件中的用户不允许访问FTP,若设置为NO,则只有user_list文件中的用户才能访问FTP。
/etc/vsftpd/ftpusers文件专门用于定义不允许访问FTP服务器的用户列表(注意:如果 userlist_enable=YES,userlist_deny=NO,此时如果在user_list和ftpusers中都有某个用户时,那么这个用户是不能够访问FTP的,即ftpusers的优先级要高)。默认情况下user_list和ftpusers,这两个文件已经预设置了一些不允许访问FTP服务器的系统内部账户。如果系统没有这两个文件,那么新建这两个文件,将用户添加进去即可。