网上关于使用linux下使用vsftpd搭建FTP的文章非常的多,大部分内容都差不多。还有诸如“我见过最好的vsftpd配置教程”、“史上最详细的vsftpd配置文件讲解”和“vsftpd入门专题”等名字如此大气的文章,可是,不知大家有没有同样的经历,照着文章做下来却很难一次成功,总是会出各种各样的错误。而且,里面讲的有些配置项是在是无法真正理解,比如:chroot_local_user,chroot_list_enable,chroot_list_file的搭配使用,我说vsftpd你就不能设计的简单一些吗,搞的这么晦涩难懂!
这两天就捣鼓这个FTP服务器了,真是头都大了,不过还好最后算是搭起了一个能用的FTP吧。为了以后再用时不在这上面浪费时间,把一些关键点记录下来吧,希望对大家有一点点参考价值。
首先,网上介绍的比较全面的资料有:
前者确实介绍的很全面,但是有很多内容都是属于高级主题,初级用户真的很难全部看懂。如果使用要求不搞的话,其实后者就挺合适,更适合入门级菜鸟(想我这样的)参考,我就是参考这篇文章来搭建的。另外,还有一篇:http://www.blogjava.net/stonestyle/articles/369104.html。下面介绍一下我安装配置的步骤:
这一步就不用将了,直接运行sudoapt-get install vsftpd即可。安装完毕后,默认配置下就可以直接登录fpt://ip了,这里采用的是匿名登录,不需要输入用户名密码。实际上,vsftpd安装完毕后会创建一个ftp的账户,可以通过查看/etc/passwd文件得知,也可以看到ftp账户对应的家目录在/srv/ftp,所以匿名登录后实际上是进入了/srv/ftp中,大家可以在该目录中放入文件测试一下。而且可以测试一下,匿名登录时是否有下载权限、上传权限、删除权限和创建目录权限。
用户ftp是匿名登录时默认的用户,如果我们需要通过用户认证登录ftp的话,可以在配置文件中设置“允许本地用户”模式,即可以通过ubuntu系统中的账户登录到ftp。所以,这里重新创建一个新的用户专门用来登录ftp。使用下面的命令创建一个新用户ftpuser,-s指定shell(指定的/sbin/nologin实际上是一个无效的shell,也就使得该用户无法从系统登录), -m用于创建家目录(即/home/ftpuser)
useradd vsftpd -s /sbin/nologin -m ftpuser
关于配置文件(/etc/vsftpd.conf)这里不详细叙述了,参照上面的文章《我见过最好的vsftpd配置教程》进行配置,配置完成后不一定能成功,后面会针对出现的问题来解释配置项。
注意一点,如果开启了日志功能,即:xferlog_enable=YES,则日志文件选项为xferlog_file=/var/log/vsftpd.log,该选项不修改的话,日志文件默认为/var/log/vsftpd.log,《我见过最好的vsftpd配置教程》中强调了一点:确保ftpuser用户对该文件有写入权限,如果对权限不熟悉或者怕麻烦的话,直接给666权限即可,即:chmod 666 /var/log/vsftpd.log。
用ftpuser用户登录到FTP服务器时,默认进入的是/home/ftpuser目录,但是可以通过点击“上一级目录”进入上一级目录、上上一级目录或其他所有目录,这显然是不安全的,需要修改配置禁止该功能。
文章http://blog.chinaunix.net/uid-538992-id-100457.html和http://blog.csdn.net/fafa211/article/details/8095439?reload都讲到了解决该问题的办法,而且讲述基本一致。实际上就是配置chroot_local_user、chroot_list_enable和chroot_list_file三个选项,这三个选项相互配合使用,这也是最不好理解最让大家头疼的地方,也是我前面质疑的为何设计的如此晦涩的地方。
第一篇文章说的相对比较清楚,下面总结一下:
首先,chroot_list_enable好理解,就是:是否启用chroot_list_file配置的文件,如果为YES表示chroot_list_file配置的文件生效,否则不生效;
第二,chroot_list_file也简单,配置了一个文件路径,默认是/etc/vsftpd.chroot_list,该文件中会填入一些账户名称。但是这些账户的意义不是固定的,是跟配置项chroot_local_user有关的。后一条中说明;
第三,chroot_local_user为YES表示所有用户都*不能*切换到主目录之外其他目录,但是!除了chroot_list_file配置的文件列出的用户。chroot_local_user为NO表示所有用户都*能*切换到主目录之外其他目录,但是!除了chroot_list_file配置的文件列出的用户。也可以理解为,chroot_list_file列出的“例外情况”的用户。
解释了这三个配置项的含义,就好办了,如文章http://blog.csdn.net/fafa211/article/details/8095439?reload所说。要限制所有用户切换到主目录之外的其他目录,只需配置一项:chroot_local_user=YES即可,chroot_list_file必须为空。
上一步配置完后,在浏览器中登录,如果没有意外的话将出现错误:“500OOPS: vsftpd: refusing to run with writable root inside chroot()”。关于这个错误,文章http://forum.ubuntu.org.cn/viewtopic.php?p=2748954提到了。我这里就采用文中的第一种解决方法,将用户家目录的可写属性去掉,在其中创建一个新的目录data,将需要上传的文件放到data中即可,如下:
#sudo chmod a-w /home/ftpuser
#sudo mkdir /home/ftpuser/data
这项配置也是非常重要的,写权限即登录的用户可否上传文件、新建目录、删除文件或目录,搭建FTP一定要慎重考虑该权限,如果该FTP服务器仅仅是提供给用户下载用的,就可以关闭写权限,这样就更加安全。
配置该权限很简单,就是配置文件(/etc/vsftpd.conf)中的write_enable配置项,设置为YES打开写权限,设置为NO关闭写权限。
service vsftpd start/stop/restart
如果执行失败可以加上sudo。
(1) 其他的配置项,如:连接超时时间、最大连接数、下载速度限制、欢迎标语等等就不需要介绍了,这些随便查查资料就能明白了。上面介绍的都是关键配置,有了这些配置就能保证大家的FTP服务器跑起来了,具体的详细配置需要自己琢磨了。
(2) 高级主题,如:虚拟用户、多用户共存、多用户不同权限配置等等,这里也不介绍了,其实我也不懂^_^!前面说过了,我也是初级菜鸟啦!而且这些高级主题需要使用了并慢慢熟悉了以后才能理解哦,加油!