Конфиг совсем простой :)
# This NOT ;-) sample configuration file illustrates creating
# ftp-server with one NON-anonymous, NON-system account
ServerName "ProFTPD"
ServerType inetd
DefaultServer on
# Port 21 is the standard FTP port.
Port 21
# ограничиваем интервал портов для PASV-соединений
PassivePorts 65000 65535
# Ограничиваем ресурсы. Первое число - мягкий "лимит", второй - "жесткий".
# Здесь для ЦПУ - время в секундах на процесс, память - мегабайты,
# файлы - штуки )
RLimitCPU 10 25
RLimitMemory 4M 8M
RLimitOpenFiles 20 40
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022
# Set the user and group that the server normally runs at.
User nobody
Group nogroup
# Root - за пределы корня выйти нельзя
DefaultRoot /usr/local/apache/htdocs
# Перезапись файлов разрешена
AllowOverwrite on
# Это позволяет подключаться в активном режиме с компьтеров за NAT
AllowForeignAddress on
#Users Options
RequireValidShell off
#Тут сидят виртуальные юзеры. Ниже ссылка, как делать.
AuthUserFile /etc/proftpusers.txt
AuthGroupFile /etc/proftpgroup.txt
# Root
<Directory /usr/local/apache/htdocs>
UserOwner nobody
</Directory>
#Messaging
#DisplayConnect /etc/ftp_connect.msg
#DisplayLogin /etc/ftp_login.msg
AccessDenyMsg "Access denied. All connections logged."
AccessGrantMsg "Access granted."
DisplayGoAway "Go Away"
#Timeouts
TimeoutIdle 180
TimeoutLogin 120
TimeoutNoTransfer 360
TimeoutStalled 640
#Сильно ускоряет логин.
IdentLookups off
#Logging
SyslogLevel info
TransferLog /var/log/proftpd-transfer.log
SystemLog /var/log/proftpd-error.log
LogFormat default "%h %l %u %t \"%r\" %s %b %U"
ExtendedLog /var/log/proftpd.log ALL default
TransferLog /var/proftpd/xferlog.ftp
<Limit LOGIN>
Order Allow,Deny
#Список разрешенных доменов (откуда)
Allow from 81.123.123.123, 97.110., .myhost.com
DenyAll
</Limit>
# Одновременно коннектов. Работает только в режиме Standalone
MaxInstances 3
Ссылка: http://www.bsdportal.ru/kb.php?mode=article&k=92
В итоге эти Auth-файлы имеют вид, очень похожий на обычные passwd и group.
Чтобы виртуальный юзер имел право записи в DefaultRoot, придется сделать CHMOD +w на его uid. По имени не получится.