Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по Linux (http://forum.oszone.net/forumdisplay.php?f=9)
-   -   ProFTPd: как скрестить доступ по паролю и анонимный доступ? (http://forum.oszone.net/showthread.php?t=86365)

ruddystepa 04-07-2007 13:13 607939

ProFTPd: как скрестить доступ по паролю и анонимный доступ?
 
Настраиваю FTP сервер на основе ProFTPd. Сначала он был настроен на чисто анонимный доступ без upload директории. Конфиг такой:
Цитата:

ServerName "My FTP"
ServerType standalone
DefaultServer on
AllowStoreRestart off
Port 21
Umask 022
MaxInstances 30
User nobody
Group nogroup
AllowOverwrite on
<Limit SITE_CHMOD>
DenyAll
</Limit>
PersistentPasswd off

<Anonymous ~ftp>
User ftp
Group ftp
# We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp

# Limit the maximum number of anonymous logins
MaxClients 10

# Don't make it require a valid password or shell.
RequireValidShell off
AnonRequirePassword off

# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayFirstChdir .message

# Limit WRITE everywhere in the anonymous chroot
<Limit WRITE>
DenyAll
</Limit>

</Anonymous>

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

Цитата:

ServerType standalone
DefaultServer on
Umask 022
ServerName "0.0.0.0"
ServerIdent on "My FTPD"
ServerAdmin Admin@this.domain.topdomain
IdentLookups off
UseReverseDNS off
Port 21
PassivePorts 49152 65534
#MasqueradeAddress None
TimesGMT off
MaxInstances 30
MaxLoginAttempts 3
TimeoutLogin 300
TimeoutNoTransfer 120
TimeoutIdle 120
DisplayLogin welcome.msg
DisplayFirstChdir .message
User nobody
Group nobody
DirFakeUser off nobody
DirFakeGroup off nobody
DefaultTransferMode binary
AllowForeignAddress on
AllowRetrieveRestart on
AllowStoreRestart on
DeleteAbortedStores off
TransferRate RETR 30
TransferRate STOR 40
TransferRate STOU 40
TransferRate APPE 40
SystemLog /var/log/secure
RequireValidShell off
#gp_random_username_length 6
#gp_random_password_length 6
#gp_randomize_case lower
#gp_useradd_homedir_path /var/ftp
#gp_useradd_upload_path /upload
#gp_html_path /var/www/html/ftp.htm
#gp_welcome_name welcome.msg
<IfModule mod_tls.c>
TLSEngine off
TLSRequired off
TLSVerifyClient off
TLSProtocol TLSv1
TLSLog /var/log/proftpd_tls.log
TLSRSACertificateFile /etc/gproftpd/gproftpd.pem
</IfModule>
<Limit LOGIN>
AllowUser someuser
DenyALL
</Limit>

<Anonymous /var/ftp/someuser>
User someuser
Group someuser
AnonRequirePassword on
MaxClients 5 "The server is full, hosting %m users"
DisplayLogin welcome.msg
DisplayFirstChdir .msg
<Limit LOGIN>
Allow from all
Deny from all
</Limit>
AllowOverwrite on
<Limit LIST NLST STOR STOU APPE RETR RNFR RNTO DELE MKD XMKD SITE_MKDIR RMD XRMD SITE_RMDIR PWD XPWD SIZE STAT CWD XCWD CDUP XCUP >
AllowAll
</Limit>
<Limit SITE SITE_CHMOD SITE_CHGRP MTDM >
DenyAll
</Limit>
</Anonymous>
А вот как скрестить эти конфиги, чтобы юзер после логина попадал в свою директорию, а анонимы в свою, и файлы друг друга видеть не могли. Пытался я просто добавить конфиг юзера к анониму - любой логин приводит в директорию анонима. В примерах на proftpd.org есть только конфиг для анонимного доступа, или базовый или для виртуальных хостов.
Помогите, пожалуйста, кто знает!


Telepuzik 04-07-2007 14:34 607996

ruddystepa
Необходимо использовать параметр DefaultRoot
Пример:
DefaultRoot /var/ftp/pub/user1 user1
Пользователь user1 будет попадать в папку /var/ftp/pub/user1 и выше подняться не сможет.
Каталог /var/ftp/pub/user1 задается директивой <Directory /var/ftp/pub/user1>описание прав доступа</Directory>

ruddystepa 04-07-2007 16:12 608075

Telepuzik
А в какую часть файла настроек надо помещать директиву DefaultRoot? Дело в том, что если поместить блок:
<Anonymous ~ftp>
.....
</Anonimous>
в файле настроек выше, чем
<Anonymous /var/ftp/someuser>
.....
</Anonymous>

То при любой попытке someuser залогиниться он попадает в директорию анонимных пользователей, и в свою директорию не попадет. А если я ставлю блоки настроек в другом порядке - происходит обратное - someuser логинится в свою директорию, а анонимы вообще не могут зайти - клиент пишет - неверный логин.
Так куда помещать эту директиву? Глобально? Или в каждый из блоков для пользователей?
Если глобально, то как разделить эту директиву между пользователями?


Telepuzik 05-07-2007 12:00 608466

ruddystepa
Цитата:

А в какую часть файла настроек надо помещать директиву DefaultRoot?
- ставиться глобально.
А почему у Вас две секции <Anonymous> ? - так работать не будет.
Для пользователя someuser необходимо описывать рабочий каталог через директиву <Directory>
В вашем случае должно быть что то типа этого:

Код:

DefaultRoot /var/ftp/someuser someuser

<Directory /var/ftp/someuser>
#        Тут задаються права что можно пользователю
        <Limit WRITE>
                AllowUser someuser
        </Limit>
        <Limit READ>
                DenyUser someuser
        </Limit>
</Directory>


<Anonymous ~ftp>
  User ftp
  Group ftp
  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias anonymous ftp

  # Limit the maximum number of anonymous logins
  MaxClients 10

  # Don't make it require a valid password or shell.
  RequireValidShell off
  AnonRequirePassword off

  # We want 'welcome.msg' displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin welcome.msg
  DisplayFirstChdir .message

  # Limit WRITE everywhere in the anonymous chroot
  <Limit WRITE>
    DenyAll
  </Limit>

</Anonymous>


~ftp это каталог /var/ftp, соответственно если вы описывате для someuser рабочий каталог /var/ftp/someuser то anonymous будет видеть этот каталог, можно либо указать для someuser рабочий каталог не в /var/ftp, либо лишить доступа пользователя ftp к папке /var/ftp/someuser на уровне файловой системы и добавить в секцию <Anonymous> параметр HideNoAccess on


ruddystepa 05-07-2007 15:46 608579

Telepuzik
Спасибо! развел анонимуса и реального пользователя по разным каталогам (то есть задал <Anonymous /var/ftp/pub> ), и все стало нормально работать. А два блока Anonimous я подсмотрел в книжке Колисниченко - нормально работает и теперь даже без DefaultRoot каждый попадает в свою директорию и в другую залезть не может. А в случае с директивой <Directory> непонятно, откуда демон узнает, что с somuserа надо требовать пароль?


Время: 16:17.

Время: 16:17.
© OSzone.net 2001-