分享

Debian + Proftp+ldap+Quota+SSL

 秋风无情萤火虫 2015-03-18

Debian + Proftp+ldap+Quota+SSL

參考網上各內容整合此文,測試ok

 

准备:

Debian 5.0.6 光盘DVD1自带包.

Debian 5.0.6

LDAP 2.4.11-1

Proftpd 1.3.1-17lenny4

 

安装

apt-get install slapd ldap-utils

apt-get install proftpd

 

常用命令

/etc/init.d/proftpd stop
 /etc/init.d/proftpd start

/etc/init.d/proftpd restart

/etc/init.d/slapd stop

/etc/init.d/slapd start

/etc/init.d/slapd restart

ftpquota --show-records --type=tally --table-path=/etc/proftpd/ftpquota.tallytab

ftpquota --update-record --type=tally --name=name --quota-type=quotatype

 

配置

LDAP 配置:

配置/etc/ldap/slapd.conf

allow bind_v2

 

include         /etc/ldap/schema/core.schema

include         /etc/ldap/schema/cosine.schema

include         /etc/ldap/schema/nis.schema

include         /etc/ldap/schema/inetorgperson.schema

 

pidfile         /var/run/slapd/slapd.pid

argsfile        /var/run/slapd/slapd.args

loglevel        256

modulepath      /usr/lib/ldap

moduleload      back_bdb

sizelimit 500

tool-threads 1

 

backend         bdb

database        bdb

 

suffix          "dc=huatest,dc=com"

rootdn          "cn=admin,dc=huatest,dc=com"

rootpw          {MD5}eTg4/TEB7NkqYOSdMDivmA==

directory       "/var/lib/ldap"

 

dbconfig set_cachesize 0 2097152 0

dbconfig set_lk_max_objects 1500

dbconfig set_lk_max_locks 1500

dbconfig set_lk_max_lockers 1500

 

index           objectClass eq

lastmod         on

checkpoint      512 30

 

access to attrs=userPassword,shadowLastChange

        by dn="cn=admin,dc=huatest,dc=com" write

        by anonymous auth

        by self write

        by * none

 

access to dn.base="" by * read

 

access to *

        by dn="cn=admin,dc=huatest,dc=com" write

        by * read

 

rootpw 加密密码的生成

将密码经过 MD5 运算,得到 32 字节的字符串,然后每2个字节压缩成一个十六进制字符,这样得到16字节的字符串,最后经过Base64编码。

使用 OpenLDAP 自带命令
# slappasswd -h {md5} -s "secret"
{MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==
 

 

ldif文档导入

需要先添加"dc=huatest,dc=com"这个domain。初始化的时候没有自动创建这个entry.

test.ldif文件內容:

dn: dc=huatest,dc=com

dc: huatest

objectclass: top

objectclass: domain

o: huatest

 

ftpuser.ldif 文件內容

dn: o=ftpusers, dc=huatest,dc=com

objectClass: top

objectClass: organization

o: ftpusers

 

ftpuser1.ldif 文件內容

dn: uid=ftpuser1, o=ftpusers, dc=huatest,dc=com

gidNumber: 65534

userPassword:: e1NIQX1pOHNRRzRkZXdxWDJ6UWhXa0o1UVM4QlRrN1k9

uid: ftpuser1

uidNumber: 104

objectClass: top

objectClass: posixAccount

objectClass: account

homeDirectory: /data/ftp/home/ftpuser1

cn: ftpuser1

 

ldapadd -x -D "cn=admin,dc=huatest,dc=com" -w secrect -f test.ldif

ldapadd -x -D "cn=admin,dc=huatest,dc=com" -w secrect -f ftpusers.ldif

ldapadd -x -D "cn=admin,dc=huatest,dc=com" -w secrect -f ftpuser1.ldif

 

Proftpd的配置

 LDAP 整合的proftpd关键设置:

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

 Include /etc/proftpd/ldap.conf

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

LoadModule mod_ldap.c

3编辑/etc/proftpd/ldap.conf

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

LDAPServer 127.0.0.1

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

LDAPDNInfo "cn=admin,dc=huatest,dc=com" "secret"

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

LDAPDoAuth on "o=ftpusers,dc=huatest,dc=com" "(&(uid=%u)(objectClass=posixAccount)(ou=ftp))"

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

LDAPAuthBinds on

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

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

 LDAPDefaultGID 65534

 LDAPDefaultUID 104

 LDAPForceDefaultGID on

LDAPForceDefaultUID on

LDAPDoUIDLookups off

LDAPDoGIDLookups off

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

LDAPGenerateHomedir on

 LDAPGenerateHomedirPrefix /data/ftp/home

LDAPForceGeneratedHomedir off

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

 LDAPGenerateHomedirPrefixNoUsername off

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

CreateHome on

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

RequireValidShell       off

 

编辑/etc/proftpd/proftpd.conf

限制用户只能访问自己的主目录

DefaultRoot                     ~

 

Proftpd不显示ftp服务器版本信息

ServerIdent                     off                

 

限速

TransferRate RETR 100:52428800表示对下载50M以下的文件不限速,超过50M了才限速。这里,52428800的单位是Byte。这个可以用来限制大文件的下载

TransferRate RETR 512:52428800

TransferRate STOR 512:52428800

MaxClients 20

MaxClientsPerHost 10

MaxClientsPerUser 10

 

上传续传

    AllowOverwrite on

    AllowRetrieveRestart on

    AllowStoreRestart on

 

磁盘配额

编辑/etc/proftpd/modules.conf

LoadModule mod_ldap.c

 

编辑/etc/proftpd/proftpd.conf

<IfModule mod_quotatab.c>

LDAPAttr ftpQuota description

QuotaEngine on

LDAPDoQuotaLookups on "o=ftpusers,dc=huatest,dc=com" "(&(uid=%u)(objectClass=posixAccount))" "100"

QuotaLimitTable ldap:

QuotaTallyTable file:/etc/proftpd/ftpquota.tallytab

QuotaShowQuotas on

QuotaOptions ScanOnLogin

QuotaLog /var/log/proftpd/ftpquota.log

</IfModule>

 

To create the initial tally table:

 

  ftpquota --create-table --type=tally --table-path=/etc/proftpd/ftpquota.tallytab

用戶ldap裡面添加description 屬性(用了LDAPAttr ftpQuota description映射了屬性)

Description=false,hard,100,0,0,0,0,0

The LDAP attribute to be looked up (named ftpQuota by default) should contain a comma-separated list of 8 values, in the following order:

  per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail,

    files_in_avail, files_out_avail, files_xfer_avail

For example:

  "false,hard,100,100,100,100,100,100"

“false,hard,100000000,-1,-1,-1,-1,-1”

-1 表示(unlimited)

查詢ftpquota.tallytab 內容:

ftpquota --show-records --type=tally --table-path=/etc/proftpd/ftpquota.tallytab

 

SSL认证配置
aptitude install openssl
创建TLSSSL证书(可选)
为了使用TLS,我们必须创建一个SSL证书。我想创建在 /etc/proftpd/ ,先创建 ssl 目录:
mkdir /etc/proftpd/ssl

 

openssl req -x509 -newkey rsa:1024 -keyout /etc/proftpd/ssl/proftpd.key -out /etc/proftpd/ssl/proftpd.crt -nodes -days 365


基本信息配置
Country Name (2 letter code) [AU]: <--
输入你的国家名 (如: CN ).
State or Province Name (full name) [Some-State]: <--
输入你所在的州或者省的名字。(如江苏:jiangsu )
Locality Name (eg, city) []: <--
输入你的城市。(如南京:nanjing )
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <--
输入你的组织名称(例如,贵公司的名称: yahoo
Organizational Unit Name (eg, section) []: <-- < -
请输入你的组织单位名称(如“IT部门”: it )。
Common Name (eg, YOUR name) []: <--
输入完整的系统域名(如“server1.example.com”)。
Email Address []: <--
请输入你的电子邮件地址。
 添加tls.conf
vi /etc/proftpd/proftpd.conf
在文件中引入 /etc/proftpd/tls.conf 这一行:
# This is used for FTPS connections
Include /etc/proftpd/tls.conf
 
备份配置文件
cp /etc/proftpd/tls.conf /etc/proftpd/tls.conf_org
vi /etc/proftpd/tls.conf
<IfModule mod_tls.c>
TLSEngine                  on
TLSLog                     /var/log/proftpd/tls.log
TLSProtocol                SSLv23
TLSOptions                 NoCertRequest
TLSRSACertificateFile      /etc/proftpd/ssl/proftpd.cert.pem
TLSRSACertificateKeyFile   /etc/proftpd/ssl/proftpd.key.pem
TLSVerifyClient            off
TLSRequired                on
</IfModule>
 
重启proftpd测试SSL登录
/etc/init.d/proftpd restart

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多