Назад | Перейти на главную страницу

ProFTPd создает разные виртуальные хосты для разных пользователей

Я совершенно не знаком с сервером ProFTPd и действительно не могу понять, как настроить то, что мне нужно. Я хотел бы получить некоторые пояснения по поводу виртуальных серверов и правил для каталогов.

Я использую Debian Debian Linux 6.0.7 (Squeeze) и ProFTPd версии 1.33.

Мне нужно, чтобы 2 разных пользователя (скажем, ftpuser1 и ftpuser2, который я уже создал как пользователи Unix на сервере) может иметь доступ через FTP к 2 разным папкам (/var/ftpfolder1 для ftpuser1 и /var/ftpfolder2 для ftpuser2).

Я имею в виду, что если ftpuser1 подключается через FTP (например, с клиентом FileZilla) к моему серверу, он должен иметь доступ ТОЛЬКО к папке /var/ftpfolder1 (то же самое для пользователя «2»). Они НЕ МОГУТ видеть другие папки на сервере.

Я думаю, что лучший способ - дать двум пользователям два разных URL-адреса, указывающих на один и тот же IP-адрес (тот же сервер), т.е. ftpsite1.domain.com для ftpuser1 и ftpsite2.domain.com для ftpuser2.
Поэтому я попытался создать виртуальный сервер для пользователя 1 и еще один для пользователя 2, ища в Интернете несколько руководств по этому вопросу, но я не могу достичь желаемого результата. Я также безуспешно пытался настроить директивы для каждого каталога. Проблема в том, что пользователи могут подключаться к серверу через FTP, но они могут видеть только свои HOME папки, а не те папки, которые мне нужны.

Здесь вы найдете мою попытку конфигурации.

Я также хотел бы понять от вас разницу между виртуальным сервером и директивой для каждого каталога. Я имею в виду: я полагаю, что это что-то похожее на то, что может делать Apache ... Но я действительно не могу полностью понять, как их правильно настроить.

Спасибо.

Попытка настройки каталога

ftpuser1

<Directory /var/ftpfolder1>
    <Limit ALL>
        DenyAll 
    </Limit>    

    <Limit ABOR APPE LIST MLSD NLST NOOP OPTS REST STOR PASS FEAT PWD USER CWD>
        DenyAll 
        AllowUser ftpuser1
    </Limit>    
</Directory>

 

ftpuser2

<Directory /var/ftpfolder2>
    <Limit ALL>
        DenyAll 
    </Limit>    

    <Limit ABOR APPE LIST MLSD NLST NOOP OPTS REST STOR PASS FEAT PWD USER CWD>
        DenyAll 
        AllowUser ftpuser2
    </Limit>    
</Directory>

 

Попытка настройки виртуального сервера

ftpuser1

<VirtualHost ftpsite1.domain.com>
        ServerName          "FTP for user 1"
        #Port               21
        #Umask              027

    <Limit LOGIN>
        DenyAll
        AllowUser ftpuser1
    </Limit>

    <snt_ftp /var/ftpfolder1>
        User            ftpuser1
        Group           proftpdusers
        UserAlias       ftpuser1    

        <Limit LOGIN>
            AllowAll
        </Limit>

        <Limit WRITE>
            DenyAll
            AllowUser ftpuser1
        </Limit>
    </snt_ftp>
</VirtualHost>

Вы можете использовать chroot

# useradd -s /sbin/nologin -d /var/ftpfolder1 ftpuser1
# useradd -s /sbin/nologin -d /var/ftpfolder2 ftpuser2

Добавьте следующую опцию в proftpd.conf

DefaultRoot ~ !adm

<Global>
    RequireValidShell           no
    ...
</Global>

И перезапустите сервер. Если вам действительно нужен виртуальный хост, вы можете попробовать что-то вроде следующего

<VirtualHost ftpsite1.domain.com>
    ServerName "FTP1."
    DefaultRoot ~
    Umask 002
    Port 21

    <LIMIT LOGIN>
        AllowUser ftpuser1
    </LIMIT>    
</VirtualHost>

<VirtualHost ftpsite2.domain.com>
    ServerName "FTP2."
    DefaultRoot ~
    Umask 002
    Port 21

    <LIMIT LOGIN>
        AllowUser ftpuser2
    </LIMIT>    
</VirtualHost>

вам не нужно ничего такого фантастического. все, что вам нужно сделать, это установить их HomeDir на что-то другое, а затем использовать chroot, установив DefaultRoot ~ в вашем конфиге. когда каждый пользователь входит в систему (независимо от имени, используемого для доступа к нему), он застревает в своем каталоге. не требуются виртуальные хосты (поскольку им потребуются отдельные IPS или порты, поскольку FTP не имеет виртуального хостинга на основе имени, такого как HTTP)