记一次ftp服务器搭建走过的坑

1、安装

①下载

wget https://security.appspot.com/downloads/vsftpd-3.0.3.tar.gz #要翻墙

②解压

tar xzvf vsftpd-3.0.3.tar.gz cd vsftpd-3.0.3

③编译

根据需要修改builddefs.h文件,

cat builddefs.h

#ifndef VSF_BUILDDEFS_H #define VSF_BUILDDEFS_H  #undef VSF_BUILD_TCPWRAPPERS #define VSF_BUILD_PAM #undef VSF_BUILD_SSL #endif

如需要tcp wrapper,改成#define VSF_BUILD_TCPWRAPPERS

如需要OpenSSL,改成#define VSF_BUILD_SSL

建议吧所有的undef改为define,反正也不多,就三四个。

改完直接make即可。

④安装

编译完成后会在当前目录生成vsftpd、vsftpd.8和vsftpd.conf.5。make install会安装到/usr/local目录下

2、踩坑

之所以搭建这个是因为老的ftp一直不稳定,于是去官网下了个最新版。

2.1 编译过程会踩的坑

① 缺少tcp_wrappers-devel包

之所以缺少这个包是因为在一开始的builddefs.h文件中我们修改为了#define VSF_BUILD_TCPWRAPPERS,

② 缺少pam-devel包

同理在一开始的builddefs.h文件中我们修改为了#define VSF_BUILD_PAM

③ 缺少openssl-devel包

同理在一开始的builddefs.h文件中我们修改为了#define VSF_BUILD_SSL

2.2 配置文件的坑

问题发现:

在启动vsftp进程后使用ftp客户端登录可能会遇到这么两个问题,一个是vsftpd:refusing to run with writable root inside chroot(),一个是Failed to change directory,这两个问题归根结底都是配置文件的三个参数导致的,分别是chroot_local_user、chroot_list_enable、chroot_list_file。

知识点:

①chroot_local_user

是否将所有用户限制在主目录,,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)

②chroot_list_enable

是否启动限制用户的名单,通俗的说就是chroot_local_user的例外项。

③chroot_list_file

是否限制在主目录下的用户名单,此项只有在chroot_list_enable值为yes才有意义

概念比较乱,可以这样记忆:

当chroot_local_user为yes时,说明全局用户都被锁定在主目录,无法跳转到其他目录,此时chroot_list_enable为yes时,说明允许设置例外用户不被锁定。反之亦然。即当"全部用户被锁定于主目录"时(chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(chroot_local_user=NO),"例外""就是:要被锁定的用户是哪些。

实例:

有user1、user2两个ftp用户,计划让user1锁定在主目录,user2自由切换目录,可以用以下方法实现

方法一:

chroot_local_user=YES
chroot_list_enable=YES
/etc/vsftpd/chroot_list名单列表为:
user2

解释:hroot_local_user=YES将所有用户限定在主目录内,chroot_list_enable=YES表示要启用chroot_list_file, 因为chroot_local_user=YES,即全体用户都被“限定在主目录内”,所以总是作为“例外列表”的chroot_list_file这时列出的是那些“不会被限制在主目录下”的用户。

 

方法二:

chroot_local_user=NO
chroot_list_enable=YES
/etc/vsftpd/chroot_list名单列表为:
user1

解释:chroot_local_user=NO则所有用户不被限定在主目录内,chroot_list_enable=YES表示要启用chroot_list_file, 因为chroot_local_user=NO,即全体用户都“不被限定在主目录内”,所以总是作为“例外列表”的chroot_list_file这时列出的是那些“会被限制在主目录下”的用户。

问题解决:

Failed to change directory一般就是配置文件chroot_local_user设了YES,而你没有开chroot_list_enable或者chroot_list_file没有写对应用户

vsftpd:refusing to run with writable root inside chroot()

从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限或者在vsftpd的配置文件中增加下列项:

allow_writeable_chroot=YES

记一次ftp服务器搭建走过的坑的更多相关文章

  1. FTP服务器搭建及操作(一)

    FTP服务器搭建及操作(一) FTP搭建 PHP FTP操作 搭建方法参照(windows):http://www.cnblogs.com/lidan/archive/2012/06/04/25351 ...

  2. 《Linux下FTP服务器搭建及FTP使用》

    .LOGAndy:mxtd114 <Linux下FTP服务器搭建> 0.root登录 1.安装ftp # yum -y install ftp 2.安装vsftpd # yum -y in ...

  3. ftp服务器搭建及简单操作

    ftp服务器搭建及简单操作 1. 添加一个新用户,使用名useradd testftp,然后使用passwd testftp对新添加的用户设置密码(这里设置为“1234567”). 2. 安装ftp服 ...

  4. Linux CentOS 6.5 下 vsftpd ftp服务器搭建

    Linux CentOS 6.5 下 vsftpd ftp服务器搭建 by:授客 QQ:1033553122   操作系统环境:CentOS 6.5-x86_64 下载地址:http://www.ce ...

  5. FTP-Linux中ftp服务器搭建

    一.FTP工作原理 (1)FTP使用端口 [root@localhost ~]# cat /etc/services | grep ftp ftp-data 20/tcp #数据链路:端口20 ftp ...

  6. (转)【Java FTP及FTP服务器搭建】

    转至 http://blog.csdn.net/studyvcmfc/article/details/8147052 目录(?)[+] -[Java FTP及FTP服务器搭建] 一:本文采用apach ...

  7. ftp服务器搭建(windows)+实现ftp图片上传对接

    ftp服务器搭建(windows): vsftpd简介: vsftpd是“very secure FTP daemon”的缩写,是一个完全免费的.开放源代码的ftp服务器软件. 下载地址: http: ...

  8. Linux之匿名FTP服务器搭建

    FTP(File Transfer Protocol)是在服务器与客户端进行文件传输的一种传输协议.本次介绍的是vsftpd的软件体验ftp服务. FTP服务器默认情况下依据用户登录情况分为三种不同的 ...

  9. Linux 之 FTP服务器搭建

    FTP服务器搭建 参考教程:[千峰教育] 1.关闭防火墙: service iptables stop 2.关闭Selinux setenforce 0 3.安装所需要依赖及编译工具 yum inst ...

随机推荐

  1. [CLR via C#]18. Attribute

    attribute可以说是Microsoft .NET Framework提出的最具创意的技术之一了.利用attribute,可以声明性的为自己的代码构造添加注解,从而实现一些特殊的功能.attrib ...

  2. 小巧方便的MVC后端验证码,供大家学习借鉴

    调用: public ActionResult Vcode()//验证码 { string code = ValidateCode.CreateRandomCode(4); ValidateCode. ...

  3. 如何把maven项目转成web项目

    创建Web工程,使用eclipse ee创建maven web工程 1.右键项目,选择Project Facets,点击Convert to faceted from 2.更改Dynamic Web ...

  4. bzoj1146整体二分+树链剖分+树状数组

    其实也没啥好说的 用树状数组可以O(logn)的查询 套一层整体二分就可以做到O(nlngn) 最后用树链剖分让序列上树 #include<cstdio> #include<cstr ...

  5. [PHP] 自动加载的实现

    基于psr的规范,使用命名空间和spl_autoload_register()来实现自动加载 文件结构: |--Api |--Account.php |--User.php|--Service |-- ...

  6. jsp中自定义Taglib案例

    一.使用TagSupport类案例解析 1.自定义Tag使用jdbc连接mysql数据库 1.1定义标签处理器类 package com.able.tag; import java.sql.Conne ...

  7. [moka同学笔记]yii表单dropdownlist样式

    <?= $form->field($modelUser,'name') ?> <div class="form-group field-community-mobil ...

  8. Represent code in math equations

    Introduce The article shows a way to use math equations to represent code's logical. Key ideas logic ...

  9. quartz使用(一)

    在项目中经常会碰到定时任务,quartz是一款非常优秀的开源框架, 提供了定时任务的支持,还支持任务的持久化,并且提供了对数据库的支持.下面首先对quartz做一个简单介绍,并附上一个小例子. 1.下 ...

  10. 部署时,出现用户代码未处理 System.Security.Cryptography.CryptographicException 错误解决方法

    转载:http://www.cnblogs.com/jys509/p/4499978.html 在调用RSA加密的.pfx密钥时,在本地调试没有问题,可以布署到服务器,就会报以下的错误: 用户代码未处 ...