今天试了一下在Ubuntu下搭建FTP,在这里与大家分享一下。vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用,下面是vsftpd+pam搭建的原理图。vsftpd借助PAM认证工具来帮忙认证,我们的本地用户登录ftp也是需要PAM来帮忙的。安装vsftpd的时候,它会有/etc/pam.d/目录里生成一个认证的配置文件:vsftpd ,而之前的vsftpd.conf里的选项 pam_service_name=vsftpd 指的正是PAM使用/etc/pam.d/下的vsftpd配置文件来认证。强迫症啊,我只是想找一张图放上去……
1、安装vsftpd
sudo apt-get install vsftpd |
安装完会自动生成ftp用户,文件夹在srv下。
#sudo gedit /etc/vsftpd.conf |
设置:
local_enable=YES |
允许本地用户访问后,重启ftp服务
#sudo /etc/init.d/vsftpd restart #ftp localhost 用自己的ubuntu帐号可以进行访问 #sudo /etc/init.d/vsftpd start 开关ftp服务 #sudo /etc/init.d/vsftpd stop |
下面是配置文件vsftpd.conf默认的一部分,其他虽然是英文基本都能看懂(我六级还没过呢),可以根据自己的需要更改:
1 2 3 4 5 6 |
listen=YES vsftpd将以独立模式运行 anonymous_enable=YES 是否允许匿名登陆 dirmessage_enable=YES 欢迎信息 use_localtime=YES 是否使用本地时间,默认是使用GMT时间 xferlog_enable=YES 让系统自动维护上传和下载的日志文件,默认情况该日志文件为/var/log/vsftpd.log connect_from_port_20=YES 默认端口 |
注意点:
1、如果跟我一样是在局域网下测试FTP服务的,注意局域网下连接ftp服务应该用内网的IP。本屌傻不拉及地用外网IP测试好久….
2、如果在别的机器上进行连接的时候,出现如下错误:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
意思是不能使用chroot限制可写的根目录。
chmod a-w /srv/ftp 即可解决,这是vsftp新版本加入的
上面的基础上稍微改下设置再设一个密码已经可以实现一般的功能了
进阶:
创建虚拟用户,参照(搭建同时支持匿名、本地、虚拟用户的ftp服务器)但是在vsftpd2.3.5版本一些地方不一样,我这里整理了一下,我假设你已经完全按照链接文章里一样做了
然后你用别的电脑登陆ftp时,应该会出现上面提到的一个错误:
500 OOPS: vsftpd: refusing to run with writable root inside chroot() |
于是我们需要把新建的stu,teacher,admin文件夹的写的权限去掉,但是一旦写的权限去掉了,还怎么上传文件?我当时纠结了好久,终于还是想到了方法,再建一层目录不就好了,vsftpd只是要求用户根目录不可写而已!
解决办法:我们在上述每个文件夹下面再新建一个文件夹,比如在stu下
#sudo mkdir stu |
同样需要改变文件夹属主,否则登陆后是无法看到的(不过好像那篇文章里已经做了),这样就解决了问题,但是每次登陆ftp都要再点进一个目录有点烦。
#sudo chown guest:guest -R stu |
如果还出现以下问题:
500 OOPS: bad bool value in config file for: write_enable Login failed. |
或是类似的错误,出现这种情况的原因就是write_enable=YES或者类似的语句YES后面多了一个空格,检查一下就好了。
500 OOPS: cannot change directory: |
这是selinux的问题,输入以下命令就可以解决:
#setsebool ftpd_disable_trans 1 #service vsftpd restart |
我怎么觉得这页面这难看呢!黄色背景好像跟什么都不搭…