一、ftp 服务器的选择

上文我们配置好了LDAP服务,既然配置了这个服务,想要用的自然是它的统一认证功能。那么,安装FTP服务器自然优先选择支持LDAP认证的软件了。

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

Pure-FTPd 本身支持 LDAP 认证,在 Debian 中,甚至有 pure-ftpd-ldap 包是专门支持 LDAP 认证的 Pure-FTPd 编译。PureFTPd 其现有的 LDAP 支持比较弱。

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

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

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

为了安全计,往往需要将所有登录帐号映射为一个低权限的系统帐号。Pure-FTPd 的LDAP认证在以前的版本是不能实现的,但是在新版本中,pureftpd.schema里面的FTPuid and FTPgid 属性已经支持这个功能。
有了这个功能,那么对于我来说已经够用了。

ProFTPD 对 LDAP 的支持相当的完善,几乎堪称完美。但是自己对ProFTPD不太熟悉,而且ProFTPD相对来说漏洞较多发,所以弃用。

二、Pure-ftpd的安装配置

在Debian 中安装非常容易,执行以下命令安装。

apt-get install pure-ftpd-ldap

修改配置文件:

创建文件/etc/pure-ftpd/conf/ChrootEveryone ,其中只包含字符串yes :

echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone

这将使PureFTPd在其主目录中的每个虚拟用户都chroot,因此他将无法浏览其主目录之外的目录和文件。

还要创建文件/etc/pure-ftpd/conf/CreateHomeDir ,它再次只包含字符串yes :

echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir

这将使PureFTPd在用户登录并且主目录不存在时创建用户的主目录。

创建文件/etc/pure-ftpd/conf/DontResolve ,它再次只包含字符串yes :

echo "yes" > /etc/pure-ftpd/conf/DontResolve

这将使PureFTPd不会查找可以显着加速连接并减少带宽使用的主机名。

修改文件/etc/pure-ftpd/conf/DontResolve ,它再次只包含字符串"HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3" :

echo "HIGH:MEDIUM:+TLSv1:!SSLv2:+SSLv3" > /etc/pure-ftpd/conf/TLSCipherSuite

这将使PureFTPd可以兼容一些较老的客户端(在开启TLS加密的时候)

创建文件/etc/pure-ftpd/conf/TLS ,它再次只包含字符串2 :

echo "2" > /etc/pure-ftpd/conf/TLS

这将使PureFTPd强制启用TLS加密连接,这样密码就不会明文在网络上传输。

/etc/pure-ftpd/conf/PassivePortRange 可以修改Passive模式开的端口范围,可以根据需要修改。

然后,生成TLS加密连接需要的文件。

sudo openssl req -x509 -nodes -days 7200 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

sudo openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 2048

接下来,我们配置pure-ftpd的ldap.conf文件:

/etc/pure-ftpd/db/ldap.conf

主要修改下面三项,修改成上文的配置:

LDAPBaseDN cn=People,dc=lostend,dc=com
LDAPBindDN cn=admin,dc=lostend,dc=com
LDAPBindPW admin'sPassword

其它选项可以看说明酌情修改。

修改完成以后重启 pure-ftpd

/etc/init.d/pure-ftpd-ldap restart

接下来,配置pureftpd.schema
首先拷贝/usr/share/doc/pure-ftpd-common/pureftpd.schema 文件至/etc/ldap/schema/pureftpd.schema
然后建立文件/etc/ldap/schema/pureftpd.ldif ,内容如下:

dn: cn=pureftpd,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: pureftpd
olcAttributeTypes: {0}( 1.3.6.1.4.1.6981.11.3.1 NAME 'FTPQuotaFiles' DESC 'Q
 uota (in number of files) for an FTP user' EQUALITY integerMatch SYNTAX 1.3
 .6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {1}( 1.3.6.1.4.1.6981.11.3.2 NAME 'FTPQuotaMBytes' DESC '
 Quota (in megabytes) for an FTP user' EQUALITY integerMatch SYNTAX 1.3.6.1.
 4.1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {2}( 1.3.6.1.4.1.6981.11.3.3 NAME 'FTPUploadRatio' DESC '
 Ratio (compared with FTPRatioDown) for uploaded files' EQUALITY integerMatc
 h SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {3}( 1.3.6.1.4.1.6981.11.3.4 NAME 'FTPDownloadRatio' DESC
  'Ratio (compared with FTPRatioUp) for downloaded files' EQUALITY integerMa
 tch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {4}( 1.3.6.1.4.1.6981.11.3.5 NAME 'FTPUploadBandwidth' DE
 SC 'Bandwidth (in KB/s) to limit upload speeds to' EQUALITY integerMatch SY
 NTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {5}( 1.3.6.1.4.1.6981.11.3.6 NAME 'FTPDownloadBandwidth'
 DESC 'Bandwidth (in KB/s) to limit download speeds to' EQUALITY integerMatc
 h SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {6}( 1.3.6.1.4.1.6981.11.3.7 NAME 'FTPStatus' DESC 'Accou
 nt status: enabled or disabled' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.
 4.1.1466.115.121.1.26 SINGLE-VALUE )
olcAttributeTypes: {7}( 1.3.6.1.4.1.6981.11.3.8 NAME 'FTPuid' DESC 'System u
 id (overrides uidNumber if present)' EQUALITY integerMatch SYNTAX 1.3.6.1.4
 .1.1466.115.121.1.27 SINGLE-VALUE )
olcAttributeTypes: {8}( 1.3.6.1.4.1.6981.11.3.9 NAME 'FTPgid' DESC 'System u
 id (overrides gidNumber if present)' EQUALITY integerMatch SYNTAX 1.3.6.1.4
 .1.1466.115.121.1.27 SINGLE-VALUE )
olcObjectClasses: {0}( 1.3.6.1.4.1.6981.11.2.3 NAME 'PureFTPdUser' DESC 'Pur
 eFTPd user with optional quota, throttling and ratio' SUP top AUXILIARY MAY
  ( FTPStatus $ FTPQuotaFiles $ FTPQuotaMBytes $ FTPUploadRatio $ FTPDownloa
 dRatio $ FTPUploadBandwidth $ FTPDownloadBandwidth $ FTPuid $ FTPgid ) )

以上文件内容只是展示用。具体生成方法如下:

首先建立一个文件 pureftpd.txt :

include         /etc/ldap/schema/pureftpd.schema

现在我们将转换schema:

mkdir ldif
slaptest -f pureftpd.txt -F ldif

现在我们更改到包含转换模式的目录:

cd ldif/cn\=config/cn\=schema

该目录应包含以下文件:

cn={0}pureftpd.ldif

更改:

dn: cn={0}pureftpd
objectClass: olcSchemaConfig
cn: {0}pureftpd

至:

dn: cn=pureftpd,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: pureftpd

并删除:

structuralObjectClass: olcSchemaConfig
entryUUID: 18f5d9c2-5b7f-1039-91ac-0f367d4f1c38
creatorsName: cn=config
createTimestamp: 20190825122458Z
entryCSN: 20190825122458.522936Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20190825122458Z

现在我们将ldif文件复制到/etc/ldap/schema目录中(这是必要的,但是当需要ldif时,很方便找到)。

cp cn\=\{0\}pureftpd.ldif /etc/ldap/schema/pureftpd.ldif

现在我们将模式添加到OpenLDAP。

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/pureftpd.ldif 

这样,我们就完成了pureftpd.schema 往LDAP里添加。

三、LAM 里面配置PureFTPdUser

在下图中,我们可以看到刚才添加的 PureFTPdUser objectClass。

20190825203315.png

然后,可以在用户信息那添加PureFTPdUser objectClass 和属性。

20190825203737.png

可以通过 FTPuid和FTPgid属性,将FTP账户登陆时映射成一个低权限的系统账号。一般会建立一个专属的 ftpuser和 ftpgroup,然后映射成对应的uid和gid。具体想映射成哪个,自己根据需要决定就可以了。

当然还有一些容量配额、上下载带宽配置的属性等。可根据需要开启。

具体可以参考官方文档:

https://download.pureftpd.org/pub/pure-ftpd/doc/README.LDAP

如果事先已经建立了比较多的账号,可能一个个的修改很累人,可以执行批量修改操作:

20190825204542.png

标签: none

添加新评论