2007/05/03

ProFTPd + LDAP - пользователи и их квоты

Беря пример с Microsoft Active Directory, можно интегрировать LDAP-директорию пользователей с FTP-сервисом на основе ProFTPd. Кроме того, что в качестве аутентификационной базы пользователей можно использовать LDAP, в нем можно хранить и дополнительные средства авторизации - такие как данные о лимитах для пользователей (quota). ProFTPd должен быть собран с поддержкой LDAP (В Debian 4.0 Etch с этим всё в порядке). В качестве LDAP-сервиса использовался OpenLDAP 2.3.30 (тоже из Debian-репозитария пакетов).
Первым делом следует добавить описание атрибута ftpQuota в nis-схему (файл /etc/ldap/schema/nis.schema).
attributetype ( 1.3.6.1.1.1.1.28 NAME 'ftpQuota'
DESC 'Quota FTP'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
SINGLE-VALUE )

objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount'
DESC 'Abstraction of an account with POSIX attributes'
SUP top AUXILIARY
MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )

MAY ( userPassword $ loginShell $ gecos $ description $ ftpQuota ) )
После этого перезапустить LDAP-сервис и удостовериться, что он нормально принял внесенные изменения
# /etc/init.d/slapd restart
Stopping OpenLDAP: slapd.
Starting OpenLDAP: slapd.
Если всё нормально, создать в LDAP-директории пользовательскую запись для ftp-доступа. Как пример:
dn: cn=ftpuser,ou=Users,o=My Company,c=LT
cn: ftpuser
ipNetworkNumber: 12
uid: ftpuser
objectClass: ipNetwork
objectClass: posixAccount
objectClass: top
userPassword: {MD5}ce4O7AJ89gFcMRd7PVaE7Q==
gidNumber: 65534
uidNumber: 106
homeDirectory: /var/home/ftpuser
ftpQuota: false,hard,10485760,0,0,0,0,0
Отредактировать основной конфигурационный файл ftp-сервиса - /etc/proftpd/proftpd.conf. Добавить строки
LDAPServer localhost
LDAPDNInfo "cn=searcher,o=My Company,c=LT" password
LDAPDoAuth on "ou=Sites,o=
My Company,c=LT" "(&(uid=%v) (objectclass=posixAccount))"
LDAPDefaultGID 106
LDAPDefaultUID 65534
LDAPForceDefaultGID off
LDAPForceDefaultUID off
LDAPDoQuotaLookups on "ou=Users,o=
My Company,c=LT" "(&(uid=%v)(objectclass=posixAccount))"
QuotaLimitTable ldap:
QuotaLock /tmp/quota
QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaLog "/var/log/proftpd/quota.log"
QuotaShowQuotas on
QuotaTallyTable file:/var/log/ftpquota.tally
LDAPDNInfo - необходим, если у вас закрыт доступ для анонимного пользователя
LDAPDoAuth - аутентификация, база для поиска пользователя (по uid)
LDAPDoQuotaLookups - включить поиск квот, база для поиска

Перед перезапуском ftp-сервиса, чтобы изменения вступили в силу, необходимо создать файл /var/log/ftpquota.tally, который будет меняться, храня информацию об использовании лимитов ftp-пользователями.
# ftpquota --create-table --type=tally --units=Mb --table-path=/var/log/ftpquota.tally
# /etc/init.d/proftpd restart
Stopping ftp server: proftpd.
Starting ftp server: proftpd.
После перезапуска можно проверить
# ftp localhost
Connected to localhost.
220 ProFTPD 1.3.0 Server (Debian) [127.0.0.1]
Name (localhost:root): ftpuser
331 Password required for ftpuser.
Password:
230 User ftpuser logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quote SITE QUOTA
200-The current quota for this session are [current/limit]:
200-Name: ftpuser
200-Quota Type: User
200-Per Session: False
200-Limit Type: Soft
200- Uploaded Mb: 4.08/10.00
200- Downloaded Mb: unlimited
200- Transferred Mb: unlimited
200- Uploaded files: unlimited
200- Downloaded files: unlimited
200- Transferred files: unlimited
200 Please contact root@server if these entries are inaccurate

Ссылки:
  1. ProFTPd + OpenLDAP + quota
  2. ProFTPD module mod_quotatab_ldap
  3. ProFTPd - List of Directives

No comments: