LDAP 作为 FTP 认证源,vsftpd, Pure-FTPd 和 ProFTPD 和 LDAP

openexpress1 发布于 2010/07/01 12:00
阅读 3K+
收藏 5

LDAP 作为 FTP 认证源

有很多群英汇公司的用户都提出把 LDAP 和内部的 FTP 服务器整合的需求。好吧,就说一说三个主要的 FTP 服务器:vsftpd, Pure-FTPd ProFTPD LDAP 的整合。

FTP服务器选型

vsftpd 本身并不支持 LDAP 认证,而是通过 PAM 认证提供和 LDAP 的整合。PAM?如果搞砸了,Linux 登录都会出现困难,还是不要这么干吧。所以首先将 vsftpd 排除。

Pure-FTPd 本身支持 LDAP 认证,在 Debian 中,甚至有 pure-ftpd-ldap 包是专门支持 LDAP 认证的 Pure-FTPd 编译。但是说实话,1.0.24 版本之后,PureFTPd LDAP 支持就没见什么实质的改进,其现有的 LDAP 支持非常之弱。

·             要求 LDAP 的用户帐号必须包含 posixAccount 作为 objectClass

·             也就是说必须在 LDAP 中指定用户的用户ID和组ID(数字形式)

·             必须在 LDAP 中设定用户主目录

现实中,这并不可行

·             系统帐号和LDAP的用户帐号,在实际应用中,绝对不是一一对应的
Linux登录帐号和LDAP对应,没有太大意义,而且容易造成单点故障

·             为了安全计,往往需要将所有登录帐号映射为一个低权限的系统帐号。Pure-FTPd LDAP认证不能实现。

·             而且,对 LDAP 中用户帐号强制设定 posixAccount,造成管理负担。

所以 Pure-FTPd 也被排除。

ProFTPD LDAP 配置要点

ProFTPD LDAP 的支持相当的完善,几乎堪称完美。而且也不对 LDAP 中的用户帐号有过多的限制。

LDAP 整合的关键设置:

·             编辑 /etc/proftpd/proftpd.conf,启用 LDAP 配置文件 /etc/proftpd/ldap.conf 的加载

·                    Include /etc/proftpd/ldap.conf

·             编辑 /etc/proftpd/modules.conf,启用 LDAP 模组

LoadModule mod_ldap.c

·             配置 LDAPServer,注意不要使用 URI 或者域名,直接使用 IP,否则可能连接失败

LDAPServer 127.0.0.1

·             如果 LDAP 支持匿名绑定,下面配置中的绑定用户DN和口令设置为空

LDAPDNInfo "" ""

·             BaseDN 以及 LDAP 查询的 filter 通过语句 LDAPDoAuth 提供

LDAPDoAuth on "dc=moon,dc=ossxp,dc=com" "(&(uid=%u)(authorizedService=ftp)(ossxpConfirmed=TRUE))"

·             使用用户提供的口令和搜索到的用户 DN 绑定 LDAP 服务器,来验证口令

LDAPAuthBinds on

ProFTPD 中和 LDAP 相关的其它重要设置:

·             如果 LDAP 中没有用户ID和组ID,即没有 posixAccount 相关字段,使用缺省值。
注:下面的用户ID和组ID仅供参考,在我的机器上对应于 ftp:nogroup

·                    LDAPDefaultGID 65534

·                    LDAPDefaultUID 500

·                    LDAPForceDefaultGID on

·                    LDAPForceDefaultUID on

·                    LDAPDoUIDLookups off

LDAPDoGIDLookups off

·             设置用户的主目录。为了避免和系统用户主目录混淆,设置为 /data/ftp/home 作为 LDAP 用户登录的主目录
注意:要事先创建 /data/ftp/home 目录,并正确授权,以便 proftpd 服务进程能够在其下创建子目录

·                    LDAPGenerateHomedir on

·                    LDAPGenerateHomedirPrefix /data/ftp/home

·                    LDAPForceGeneratedHomedir on

·                    # 在用户主目录下,创建用户个人目录。如果设置为 on,则所有用户共享同一主目录

·                    LDAPGenerateHomedirPrefixNoUsername off

·                    # 如果用户主目录不存在,创建它

CreateHome on

·             允许用户没有合法 shell,也可以登录。因为 LDAP 用户如果没有 posixAccount 扩展,是没有 shell 设置的。而 ProFTPD LDAP 指令集中没有缺省 shell 的设置。还好,可以设置为忽略:

RequireValidShell       off

LDAP 帐号和系统帐号和平共处

合并共处五项原则:

·             LDAP 用户主目录位于 /data/ftp/home/<login> 下,每个用户能读写自己目录,不能写他人目录(可以读?)

·             系统用户主目录位于 /home/<login> 下,只能访问自己目录,不能访问他人目录

·             LDAP 用户的根相当于 /data/ftp,即 chroot /data/ftp

·             系统用户 FTP 登录后,能够访问整个文件系统

·             LDAP 用户登录后,只读访问 /data/ftp/pub,但是系统用户可以向 pub 中写

要想实现上述五原则,真的要费很多周折。

·             只对 nogroup 用户组用户设置 CHROOT

DefaultRoot   /data/ftp   nogroup

·             启用 PAM 认证(缺省启用)

·                    PersistentPasswd   on

·             设置 /data/ftp 只读权限

·                    <Directory /data/ftp>

·                     Umask             022  022

·                     HideNoAccess on

·                     <Limit READ DIRS>

·                       AllowAll

·                     </Limit>

·                     <Limit WRITE>

·                       DenyAll

·                     </Limit>

</Directory>

·             设置用户主目录 /data/ftp/home 只读权限

·                    <Directory /data/ftp/home>

·                     Umask             022  022

·                     <Limit READ DIRS>

·                       AllowAll

·                     </Limit>

·                     <Limit WRITE >

·                       DenyAll

·                     </Limit>

·                    </Directory>

·             设置用户对自己主目录的完全权限

·                    <Directory ~>

·                     Umask             022  022

·                     <Limit WRITE READ DIRS>

·                     AllowAll

·                     </Limit>

·                    </Directory>

·             设置 /data/ftp/pub 目录权限:LDAP 用户只读,系统用户可写

·                    <Directory /data/ftp/pub>

·                     Umask             002  002

·                     <Limit WRITE>

·                       DenyGroup nogroup

·                       AllowGroup !nogroup

·                     </Limit>

·                     <Limit READ DIRS>

·                       AllowAll

·                     </Limit>

·                    </Directory>

至此,FTP 服务器和 LDAP 整合完毕。

FTP 协议因为明文传输口令,并不安全,架设 FTPS 可以提供更安全的 FTP 服务。关于 ProFTPD 架设 FTPS 的方法和陷阱,参见: 安全 FTP 协议 FTPS 和防火墙

jiangxin@dawning:/etc/proftpd$ pftp localhost
ftp: connect to address ::1: Connection refused
Trying 127.0.0.1…
Connected to localhost.
220 ProFTPD 1.3.2e Server (RDCPS) [127.0.0.1]
Name (localhost:jiangxin):
234 AUTH SSL
成功执行
[SSL Cipher DHE-RSA-AES256-SHA]
331
需要为jiangxin提供密码
Password:
230
用户jiangxin登录
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls /
227 Entering Passive Mode (127,0,0,1,244,223).
150
打开ASCII模式的数据连接为file list
drwxr-x—   5 proftpd  nogroup      4096 Jun 29 10:52 home
drwxrwxr-x   2 jiangxin nogroup      4096 Jun 30 01:38 pub
226
传送完毕

FTP, LDAP

分享文章

这篇文章由    2010629 - 12:00发表于http://www.ossxp.com/,分类于 Linux。您可以通过 RSS 2.0 来订阅对该条目的回复。 也可以发表评论引用到你的网站。

加载中
返回顶部
顶部