使用 ProFTPD 配置 FTP 服务器

作者 huhamhire,暂无评论,2013年3月10日 18:49 折腾历程

现在大多数国外的 VPS 其实在存储空间上都是给的量都是比较足的,比如我现在用的就有 50G 的硬盘空间,但是一般情况下做一个小型的站点对于空间的需求却往往没有这么大。为了有效地利用存储空间,能把VPS拿来存一些文件或者是共享就再好不过了。

说到文件存储的话,可以选择类似于网盘这样的存储方案,当然也可以选择 FTP 这样十分传统的方案。鉴于 FTP 的通用性非常好,文件的存储管理方式也比较简单,如果只是自己用的话,FTP 应该算是最方便的共享方案,所以我的第六篇 VPS 折腾记录的内容就围绕着配置 FTP 服务器的话题展开。

为了更好的对 FTP 的服务进行管理,我在 VPS 上使用了配置功能更为强大的 ProFTPD,而不是很多情况下 Linux 安装自带的 vsftpd。ProFTPD 能够与 LDAP 之类的管理工具进行相当不错的结合,不过由于我不需要一个这样高级的 FTP 服务器,所以这里就仅介绍 proftpd 最简易的配置方案。

ProFTPD 是一款开放源码的 ftp 服务器软件,它是原来世界范围使用最广泛的 wu-ftpd 的改进版,它修正了 wu-ftpd 的许多缺陷,在许多方面进行了重大的改进,其中一个重要变化就是它学习了 Apache 的配置方式,使 proftpd 的配置和管理更加简单易懂。下面是关于 proftpd 安装配置的相关内容。

一、安装ProFTPD

安装 proftpd 需要使用 EPEL 源,因为之前在搭建 lighttpd 服务器的时候已经做了相关的设置,这里就不再做额外的说明。直接使用 yum 安装 proftpd:


yum -y install proftpd

正常情况下安装是比较顺利的,然后永恒的重点工作还是安装完以后的具体配置。

首先编辑proftpd的配置文件``/etc/proftpd.conf``:


nano /etc/proftpd.conf

可以在这个配置文件中设置一些FTP服务器的相关配置,我在这里简单地设置了一下服务器名,管理员,以及运行日志的相关内容。实际情况下,可以根据自己需求修改其他诸如访问连接数等参数。


1 ServerName "ftp.huhamhire.com"
2 ServerAdmin webmaster@huhamhire.com
3 
4 ExtendedLog /var/log/proftpd/access.log WRITE,READ default
5 ExtendedLog /var/log/proftpd/auth.log AUTH auth

然后,我还要在这个文件中配置全局的匿名访问目录。因为是站点的全局设置,我就直接放在这个配置文件中了:


 1 <Anonymous ~ftp/pub>
 2     User                ftp
 3     Group               ftp
 4     AccessGrantMsg      "Anonymous login ok, restrictions apply."
 5     UserAlias           anonymous ftp
 6 
 7     MaxClients          10  "Sorry, max %m users -- try again later"
 8     #DefaultChdir       /pub
 9 
10     RequireValidShell   off
11 
12     DisplayLogin        welcome.msg
13     DisplayReadme       README*
14 
15     DirFakeUser         on ftp
16     DirFakeGroup        on ftp
17 
18     <Directory *>
19         <Limit WRITE>
20             DenyAll
21         </Limit>
22     </Directory>
23 
24     WtmpLog             off
25 
26 </Anonymous>

具体配置其实也是因人而异的,可以根据需要做自己的调整,例如我就只开放了匿名用户访问 pub 的共享目录,没有开放上传目录。

由于过会儿我准备使用外部配置文件,在 proftpd.conf 文件的末尾我还加上了一句包含引用的申明:


Include /etc/proftpd/conf/*.conf

待会儿我准备把相关的配置文件存到 /etc/proftpd/conf/ 目录下。

好了,接下来再来编辑一下访问过滤用户 /etc/ftpusers


nano /etc/ftpusers

该文件中列出的用户在通过FTP方式登录服务器时,无论登录验证信息是否正确都会拒绝相关用户的登录。因此,如果需要开启相关保留用户(例如 root)的 FTP 访问权限,只需去掉本文件中的相关用户名即可。

到这里,FTP 站点的整体配置就基本完成了,下面我准备使用独立配置文件来对各个不同用户的访问做单独的设定。前面刚才也提到了,我准备将配置文件放到 /etc/proftpd/conf/ 目录下。

首先是 ftpuser 的访问配置,编辑 /etc/proftpd/conf/ftpuser.conf


nano /etc/proftpd/conf/ftpuser.conf

加入下面的配置内容:


 1 <Directory ~ftp>
 2     <Limit LOGIN DIRS READ WRITE>
 3         Order  Deny, Allow
 4     AllowUser ftpuser
 5     </Limit>
 6     <Limit LOGIN DIRS READ>
 7         Order  Deny, Allow
 8         AllowUser ftpuser
 9         AllowUser ftp
10     </Limit>
11 </Directory>

然后是 webmaster 的配置:


nano /etc/proftpd/conf/webmaster.conf

同样简单的配置一下:


1 <Directory /var/www/>
2     <Limit LOGIN DIRS READ WRITE>
3         Order  Deny, Allow
4         AllowUser webmaster
5     </Limit>
6 </Directory>

现在可以尝试启动以下proftpd服务器:


service proftpd start

没有问题的话,顺带的把开机自动启动也打开:


chkconfig proftpd on

至此,proftpd 的配置就基本完成了,后面将对访问用户进行设置。

二、FTP用户管理

一般情况下,系统如果没有配置 LDAP 目录管理的方案话,proftpd 默认使用系统账户对FTP账户进行管理。也就是 FTP 的用户默认来自 Linux 的用户组,这一点和 Windows 下面 IIS 做 FTP 服务器的设定比较相似。不过话说回来,要是做了 LDAP 的设置,可以体现出 proftpd 更为强大的管理能力。但是因为我只是想要一个比较简单的私人 FTP 服务器,所以直接使用默认的管理方式已经足够了。下面就来添加用户。

首先我准备建立一个用来维护ftp共享目录的用户 ftpuser


groupadd ftpuser
useradd ftpuser -g ftpuser -d /var/ftp -s /sbin/nologin
passwd ftpuser
chown ftpuser.ftpuser -R /var/ftp

在这里我将ftpuser的主目录直接指向了 /var/ftp 这个 FTP 共享文件的目录并且赋上了所有权,因为 ProFTPD 在当前状态下默认会会访问登录用户的主目录作为FTP站点的根目录,所以这个设置好还是比较重要的。当然,要使用 /etc/ftpchroot 文件来管理访问目录应该也是可行的,不过因为我没用的上,所以也不多说了。

然后,再来配置一个 webmaster 账户用于通过FTP管理FTP站点:


groupadd www
useradd webmaster -g www -d /var/www
passwd webmaster
chown www.webmaster -R /var/www

类似的,我使用了 /var/www 作为 webmaster 账户的主目录。

这样,就完成了两个账户的建立。

三、登录验证设置

设置完用户以后重启下服务器就可以做使用测试了:


service proftpd restart

然后可以使用客户端登录我们的 FTP 服务器,推荐使用 filezilla 等专用 FTP 客户端。但在登录的过程中可能会出现验证上面的问题而无法登录,我就遇到了这样的问题。

查询错误日志可以获取到类似于下面的信息:


proftpd: PAM unable to dlopen(/lib/security/pam_stack.so): /lib/security/pam_stack.so: cannot open shared object file: No such file or directory
proftpd: PAM adding faulty module: /lib/security/pam_stack.so

应该是由PAM认证管理的设置不正确造成的,需要对 proftpd 的 PAM 认证做一些设置。编辑 /etc/pam.d/proftpd


nano /etc/pam.d/proftpd

可以看到默认的内容为:


1 #%PAM-1.0
2 auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
3 auth required pam_stack.so service=system-auth
4 auth required pam_shells.so
5 account required pam_stack.so service=system-auth
6 session required pam_stack.so service=system-auth

将其修改成以下内容:


1 #%PAM-1.0
2 auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
3 auth required pam_shells.so
4 account include password-auth
5 session required pam_loginuid.so

随后重启服务器:


service proftpd restart

再次尝试,之前建立的账号此时就可以登录了,用户的权限以及访问目录全部正常,一个简单的FTP服务器就此搭建完成。

ftpuser

参考文章:

  1. http://www.vixual.net/blog/archives/775
  2. http://www.server-world.info/en/note?os=CentOS_6&p=ftp&f=2
关键词:FTP , 虚拟主机
登录后进行评论