背景

最近有一台Ubuntu 12.04的生产服务器,需要架设vsftpd,在使用ACL来进行权限控制并限制账户的chroot之后,出现无法登录的情况。

报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

不限制chroot之后,则可以正常登陆。

Ubuntu 12.04的老旧源内vsftpd的版本是2.3.5,起初是直接使用包安装的,出现问题后去查看了vsftpd官网的更新日志,发现2.3.5起会对目录权限有要求,要求账户的主目录只有550权限,在主目录下新建一个权限750的账户,然后在这个新目录内上传。

但是目前的需求则是这个目录必须带有权限。

为了解决这个问题,搜索了一番,天下文章一大抄,很多人都说要在vsftpd.conf内添加一个配置allow_writeable_chroot=YES,大D尝试之后运行vsftpd都会报错。

到官网去看了一下vsftpd的changelog,发现端倪。

这项新参数是3.0.0版本才开始支持的新特性,于是只好安装一个3.0.0+的版本了。

花了点时间开了个虚拟机复现了一下问题,整理成文,避免以后又他人踩坑。


Ubuntu 12.04.5编译安装vsftpd 3.0.3

解决依赖

首先来解决依赖,由于是在新开的虚拟机内测试的,所以还需要安装编译工具包。

下载源码并解压

配置builddefs.h

由于需要配置SSL加密FTP,所以需要开启SSL功能。如下:

可以根据需要自行调整功能参数。

编译安装

这里需要新建两个目录,否则可能会遇到找不到目录的错误。

如果一切正常,则有如下输出:

可能遇到的问题

这部分的问题是大D在生产环境中遇到的问题,测试环境中并未遇到,列出来仅供参考。

make之后有如下错误

这个是由于libcap库导致的,缺少软连接,手动建立一下:

还有可能遇到如下错误

解决方法:

配置vsftpd

新建用户

处理配置文件

启动vsftpd

这样就可以正常使用了。测试如图:

vsftpd启动脚本

搜索了一下,找到一份可以用的,感谢原作者:https://serverfault.com/questions/464264/vsftpd-3-0-2-on-ubuntu-12-04-init-file

在上述代码保存文件到/etc/init.d/,文件名 vsftpd,随后就可以使用/etc/init.d/vsftpd start/stop/restart/status来进行操作了。

新建加密FTP和使用ACL以前就写过了,这里不再赘述。需要说明的就是Ubuntu下使用ACL要调整硬盘挂载参数用来支持ACL。

版权声明
转载保留版权: 大D技研室 | 《Ubuntu 编译安装vsftpd 3.0.3》
本文链接地址:https://www.dadclab.com/archives/7168.jiecao
转载须知:如果您需要转载本文,请将版权信息,版权授权方式,以及本文的链接地址注明,谢谢合作。
本文被贴上了: , , , 标签