安装ftp
安装完毕后,默认配置下就可以直接登录fpt://ip了,这里采用的是匿名登录,不需要输入用户名密码。实际上,vsftpd安装完毕后会创建一个ftp的账户,可以通过查看/etc/passwd文件得知,也可以看到ftp账户对应的家目录在/srv/ftp,所以匿名登录后实际上是进入了/srv/ftp中,大家可以在该目录中放入文件测试一下。而且可以测试一下,匿名登录时是否有下载权限、上传权限、删除权限和创建目录权限。
sudo apt-get install vsftpd
配置vsftpd.conf
sudo nano /etc/vsftpd.conf
#禁止匿名访问
anonymous_enable=NO
#接受本地用户
local_enable=YES
#允许上传
write_enable=YES
#用户只能访问限制的目录
chroot_local_user=YES
#设置固定目录,在结尾添加。如果不添加这一行,各用户对应自己的目录,当然这个文件夹自己建
local_root=/home/ftp
看网上说加一行“pam_service_name=vsftpd”,我看我这个配置文件本来就有,就不管了。
注意一点,如果开启了日志功能,即:xferlog_enable=YES,则日志文件选项为xferlog_file=/var/log/vsftpd.log,该选项不修改的话,日志文件默认为/var/log/vsftpd.log,确保ftpuser用户对该文件有写入权限,如果对权限不熟悉或者怕麻烦的话,直接给666权限即可,即:chmod 666 /var/log/vsftpd.log。
添加Ftp用户
用户ftp是匿名登录时默认的用户,如果我们需要通过用户认证登录ftp的话,可以在配置文件中设置“允许本地用户”模式,即可以通过ubuntu系统中的账户登录到ftp。所以,这里重新创建一个新的用户专门用来登录ftp。使用下面的命令创建一个新用户ftpuser,-s指定shell(指定的/sbin/nologin实际上是一个无效的shell,也就使得该用户无法从系统登录), -m用于创建家目录(即/home/ftpuser)
useradd vsftpd -s /sbin/nologin -m ftpuser
sudo useradd -d /home/ftp -M ftpuser
sudo passwd ftpuser
调整文件夹权限
这个是避免“500 OOPS: vsftpd: refusing to run with writable root inside chroot()”
sudo chmod a-w /home/ftp
sudo mkdir /home/ftp/data
这样登录之后会看到data文件夹,虽然稍麻烦,原因不表了。。查资料这么辛酸已经不易。。
改pam.d/vsftpd
这时候直接用useradd的帐号登录ftp会530 login incorrect
sudo nano /etc/pam.d/vsftpd
注释掉
#auth required pam_shells.so
重启vsftpd
sudo service vsftpd restart
这时就可以用刚才建的ftpuser这个用户登录ftp了,看到的是local_root设置的/home/ftp,并且限制在该目录。
可以在浏览器用ftp://xxx.xxx.xxx.xxx访问,也可以用ftp软件比如flashFXP,密码就是ftpuser的密码。
关于用户访问文件夹限制
用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必须为空。
解决错误“500 OOPS: Vsftpd: Refusing To Run With Writable Root Inside Chroot()”
上一步配置完后,在浏览器中登录,如果没有意外的话将出现错误:“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关闭写权限。
如果客户端登录时候提示“以Pasv模式连接失败”
编辑/etc/vsftpd.conf
最后添加
PHP
pasv_promiscuous=YES
然后再重启Vsftpd服务。
启动关闭服务
每次修改配置后要重启服务使之生效,服务启动、停止和重启的命令如下:
service vsftpd
start/stop/restart
如果执行失败可以加上sudo。
配置vsftpd账户和目录权限
主要卡壳的地方是这2个配置:
userlist_enable=yes
userlist_deny=NO
userlist_file=/etc/vsftpd.user_list
#
#chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
这样设置后,vsftpd.user_list文件中列出的用户才有权限来访问ftp,vsftpd.chroot_list文件中列出的用户是无法随意进入系统的其他目录的,只能在自家目录下活动。
/etc/vsftpd.user_list文件和/etc/vsftpd.chroot_list文件是需要手动建立的,文件名和路径都随意,里面写入需要开放权限或限制的用户名,每行一个。
注意点:
1. 如果chroot_local_user设置激活(设为YES),则vsftpd.chroot_list文件中列出的用户是可以自由出入整个文件系统目录的,不止是自家目录。也不管chroot_list_enable是否被激活了。
2. 如果chroot_local_user设置未激活(设为NO或注释掉),同时chroot_list_enable=YES,则 vsftpd.chroot_list文件中列出的用户只能在自家目录下活动,否则还是可以自由出入其他一些目录的。[这才达到我的目的,因为这个设置, 我搞了好久,都是相信别人的配置和说明惹的弯路阿]
不足:
目前只是弄了本地系统用户的访问FTP权限,没有去弄虚拟用户访问。我暂时不需要,所以就没去仔细看这部分。
附件:
最后附上我的配置文件vsftpd.conf,配置中提到的两个文件/etc/vsftpd.user_list文件和/etc/vsftpd.chroot_list文件需要自己手动去建立,如上[问题总结 ]中所述
【总结】
(1) 其他的配置项,如:连接超时时间、最大连接数、下载速度限制、欢迎标语等等就不需要介绍了,这些随便查查资料就能明白了。上面介绍的都是关键配置,有了这些配置就能保证大家的FTP服务器跑起来了,具体的详细配置需要自己琢磨了。
(2) 高级主题,如:虚拟用户、多用户共存、多用户不同权限配置等等,这里也不介绍了,其实我也不懂^_^!前面说过了,我也是初级啦!而且这些高级主题需要使用了并慢慢熟悉了以后才能理解哦,加油!