ubuntu中pure-ftpd FTP服务器530 Login authentication failed彻底解决

在 ubuntu 配置 pure-ftpd 后,登录出现错误。

-> % ftp ssi@xxxx.xx
Connected to xxxx.xx.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 12:08. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
331 User ssi OK. Password required
Password:
530 Login authentication failed
ftp: Login failed

那么,下面是解决方案。

1. 前置知识

在 ubuntu 上,直接使用 apt-get 可以安装 pure-ftpd 的最新版。但它的配置有些古怪。

pure-ftpd 的配置文件默认处于 /etc/pure-ftpd/conf ,其中的每个文件就是一个命令行参数的名字,文件中的内容就是这个参数的值。

pure-ftpd 使用 pure-ftpd-wrapper 命令来将这些配置文件转换成命令行参数,用它们来启动服务。

例如,我要禁止 chroot,需要增加一个 /etc/pure-ftpd/conf/ChrootEveryone 文件,在其中写入 yes 这个值。

pure-ftpd 的所有命令行参数都对应一个短参数和一个长参数,可以通过 man pure-ftpd 来查看所有支持的参数。

这些参数都是全小写的,如果要查看它们的标准形式,可以使用 man pure-ftpd-wrapper 查看。

好了,这就进入正题。为了描述清楚,我还是把完整的配置流程说一遍。

2. 创建系统用户

创建一个 ftp 专用账号,同时创建一个 ftp 用户组。设置其 shell 禁止登录。注意,这里设置的 home 值就是 Anonymous 账户的访问地址。

useradd -M -U -s /usr/sbin/nologin -d /var/ftp ftp

关于禁止登录的 shell 设置,大家常用的是 /usr/sbin/nologn 和 /bin/false ,在 这里 可以了解一下它们的区别。更详细的信息也可以通过 man false 和 man nologin 得到(当然还可以顺便看看 man true )。

3. 创建虚拟用户

下面的命令将创建一个用户名为 ssi 的用户,将其信息写入到 /etc/pure-ftpd/pureftpd.passwd 中。

这个 ssi 用户,就是虚拟用户。系统中不必(也不应该)存在这个用户。这个用户的权限,与我们通过 -u 和 -g 参数指定的系统账户相同。

期间, pure-pw 会要求你输入这个用户的 ftp 密码。

pure-pw useradd ssi -u ftp -g ftp -d /var/ftp/ssi

ftp 大多数时候都是为 www 服务的,有时候为了方便(不一定安全),甚至可以直接将虚拟用户绑定到 www-data 用户上。

将用户信息更新到 /etc/pure-ftpd/pureftpd.pdb 文件:

pure-pw mkdb

4. 设置掩码

将需要的文件和目录掩码写入 Umask 配置文件中,中间用空格分隔:

echo '003 002' > /etc/pure-ftpd/conf/Umask

注意,虽然 pure-ftp 的 man 页中这样说:

    -U umask files:umask dirs
    Change the mask for creation of new files and directories. The default are 133 (files
    are readable -but not writable- by other users) and 022 (same thing for directory,
    with the execute bit on). If new files should only be readable by the user, use
    177:077. If you want uploaded files to be executable, use 022:022 (files will be read?
    able by other people) or 077:077 (files will only be readable by their owner).

但你如果真的设置成这样 003:002 这样,pure-ftpd 重启时会报错:

    Restarting ftp server: /usr/sbin/pure-ftpd-wrapper: Invalid configuration file /etc/pure-ftpd/conf/Umask: “003:002″ not two octal numbers

所以,应该将分隔符设置成空格。可能这也是 ubuntu 上的特点吧。 ;)

5. 解决登录错误

终于到正题了。

根据 google 到的 信息 ,先是在 auth 中指定 PureDB。

ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure

处理之后,问题依旧。

然后在 pure-ftpd 的 README 中找到这段话:

    ?with-pam: use pluggable authentification modules. Don’t use this option
    if your login/passwd pairs are always refused (but the real fix would be to
    fix your PAM configuration). You need to create a /etc/pam.d/pure-ftpd file
    to properly use the PAM authentication. The ‘pam’ directory contains an
    example of such a file.

同时又找到 这里,确定取消了 PAM 验证,登录就成功了。

echo no > /etc/pure-ftpd/conf/PAMAuthentication

但取消 PAM 是不合理的,也会让系统不安全。查看 /etc/pam.d/pure-ftpd 的配置都是正确的,说明这不是 PAM 的问题。

看到 PAM 的配置文件中有 pam_shells.so 的字样,然后鬼使神差地看了一眼 /etc/shells ,发现其中并不包含 /usr/sbin/nologin 。

于是将其加入:

echo '/usr/sbin/nologin' >> /etc/shells

然后还原 PAMAuthentication 的设置,重启服务,搞定:

service pure-ftpd restart

6. 分析

man pam_shells 可以看到下面的信息:

NAME
       pam_shells - PAM module to check for valid login shell

SYNOPSIS
       pam_shells.so

DESCRIPTION
       pam_shells is a PAM module that only allows access to the system if the users shell is listed
       in /etc/shells.

       It also checks if /etc/shells is a plain file and not world writable.

而在 /etc/pam.d/pure-ftpd 中配置了下面的内容:

auth    required    pam_shells.so

因为 ftp 用户的 shell 是 /usr/sbin/nologin ,那么这个 shell 就必须存在于 /etc/shells 中,才能通过 PAM 模块。

7. 其他问题

在 CentOS 上,我是编译安装 pure-ftpd 的,这里一起说一些注意事项。
7.1 启动服务用的 script

源码并没有提供启动 script,我将一个可用的传到了 gist ,下载后修改路径然后将其复制到 /etc/init.d 即可使用。

记得在编译的时候要加入 --with-ftpwho 选择,这样使用上面的脚本实现 service pureftpd status 的时候,可以看到当前正在连接的客户端的信息。
7.2 重启服务出现 421 错误

是因为在编译的时候没有加入 --with-puredb 选项。需要重新编译。

421 Unknown authentication method: puredb:/opt/pureftpd/etc/pureftpd.pdb

7.3 530 Sorry, but I can’t trust you

同样是 530 登录错误,提示如下:

530 Sorry, but I can't trust you
ftp: Login failed.

这是因为系统的 ftp 帐号是系统帐号(system account),可能是在创建 ftp 帐号的时候加了 -r 参数。查看一下 ftp 帐号的 id:

id ftp
uid=14(ftp) gid=50(ftp) groups=50(ftp)

在 pure-ftp.conf 配置文件中有一个选项,设置最小帐号 UID,若小于这个 UID 则会出现上面的 530 错误。这个值默认为 100 。

# Minimum UID for an authenticated user to log in.
MinUID                      100

解决方案有两个:

    修改 MinUID 的值使其小于 ftp 帐号的值(我的是14,所以要修改成13或更小),
    修改 ftp 帐号的 UID 。

这里我选择后者:

usermod -u 600 ftp
groupmod -g 600 ftp

必须要更新虚拟帐号才会生效:

pure-pw usermod ssi -u ftp -g ftp -m

时间: 2024-11-08 23:51:36

ubuntu中pure-ftpd FTP服务器530 Login authentication failed彻底解决的相关文章

linux中Pure-FTPd出现“登录失败: 530 Login authentication failed”

 FTPd是一款不错的ftp软件了,但今天小编设置问题导致Pure-FTPd出现"登录失败: 530 Login authentication failed"了,下面我们一起来看问题的解决办法了.     再次遭遇Pure-FTPd"登录失败: 530 Login authentication failed"的问题,这一次的原因竟然是虚拟用户uid小于pure-ftpd.conf中的MinUID值,现在详细说明整个查错过程. 一般情况下,我是使用yum来安装pure

centos中pure-ftpd服务器错误: 530 Login authentication failed解决办法

今天,连接pure-ftpd的时候竟然不能登录,总是提示: 530 Login authentication failed Pure-Ftpd安装在debian6上,所以与Centos下有些不同,启用调试模式: [root@localhost ~]# lftp lftp :~> open -u feifei,"123456" 192.168.2.23 lftp feifei@192.168.2.23:~> debug lftp feifei@192.168.2.23:~&g

linux下pure-ftpd 530 Login authentication failed

在服务器上,我一直使用的是 vsftpd,但由于 vsftpd 不支持 MLSD ,我开始转向 pure-ftpd. 简单配置完毕后,登录一直出现错误. -> % ftp ssi@xxxx.xx Connected to xxxx.xx. 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 220-You are user number 1 of 50 allowed. 220-Local time is now 12:08

linux中报错Pure-Ftpd:530 Login authentication failed

ftp提示:530 Login authentication failed 错误,大概意思是用户认证失败,查看了下日志,内容如下: May  4 22:00:27 hz pure-ftpd: (?@115.x.x.x) [INFO] New connection from 115.x.x.x May  4 22:00:27 hz pure-ftpd: (?@115.x.x.x) [ERROR] The SQL server seems to be down [Can't connect to l

Ubuntu 用vsftpd 配置FTP服务器

原文:Ubuntu 用vsftpd 配置FTP服务器 网上的文章好难懂啊..只想要简单粗暴,弄好能用就行啊,复杂的以后研究不行吗...折腾好久,其实弄出来能用不就这么点内容吗... 本文在Ubuntu Server 14.04 amd64系统测试. Made By:CSGrandeur 安装ftp sudo apt-get install vsftpd 配置vsftpd.conf sudo nano /etc/vsftpd.conf #禁止匿名访问 anonymous_enable=NO #接受

Ubuntu 用VSFTP搭建FTP服务器设置教程

  1.安装vsftpd 终端输入sudo apt-get install vsftpd 安装之后会在/home/下建立一个ftp目录,访问下可以看到一个空白内容的ftp空间. 默认设置下需要匿名用户不可以登录 2.设置 vsftpd.conf文件 修改之前最好先备份这个文件:sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.old 参数意义: Anonymous_enable=yes (允许匿名登陆) Dirmessage_enable=yes (切换目录时,

Ubuntu Linux下搭建FTP服务器图解

1 首先用命令检查是否安装了vsftpd vsftpd -version 如果未安装用一下命令安装 apt-get install vsftpd 安装完成后,再次输入vsftpd -version命令查看是否安装成功 2 新建一个文件夹用于FTP的工作目录 mkdir /home/ftp 3 新建FTP用户并设置密码以及工作目录 ftpname为你为该ftp创建的用户名 sudo useradd -d /home/ftp -s /bin/bash ftpname 为新建的用户设置密码 passw

Ubuntu安装和配置ftp服务器步骤

VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全. Wu-Ftpd全称是Washington University FTP,绝大多数的Linux发行套装中都可以选用,WU-FTPD是一个性能优秀的服务器软件,由于它具有众多强大功能和超大的吞吐量,Internet上有不少FTP服务器选用Wu-Ftpd. 1.安装vsftpd  代码如下 复制代码 apt-get install vsftp

Windows中IIS内FTP服务器高级配置图文教程_win服务器

提到FTP服务器,可能大家都会想到Serv-U.vs-FTP等软件,其实微软内置在IIS里的FTP服务已经够用,不信请往下看. 实现对多用户的管理 首先需要取消"站点属性/允许匿名连接",如图1. 接着进入"计算机管理/本地用户和组",新建立一个组,这里建立为FTPuser,然后新建立一个用户FTP01,然后修改FTP01的属性,把它加入FTPuser组,去掉系统默认的users组.在NTFS格式分区下(这里为d盘)创建文件夹FTP01和FTP02,然后设置安全权限