[Debian] Как изменить корневую папку FTP

Тема в разделе "Десктопный Linux", создана пользователем AsanBosam, 3 июн 2009.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. AsanBosam

    AsanBosam Постоялец

    Регистр.:
    1 мар 2009
    Сообщения:
    139
    Симпатии:
    11
    Доброго времени суток!
    Как изменить корневую папку FTP для определенного юзера?
    Просто по умолчанию стоит /home/newuser а как и где менять не знаю
     
  2. drop

    drop

    Регистр.:
    1 янв 2007
    Сообщения:
    412
    Симпатии:
    190
    а какой ftp сервер хоть?
     
  3. AsanBosam

    AsanBosam Постоялец

    Регистр.:
    1 мар 2009
    Сообщения:
    139
    Симпатии:
    11
    Статус: Соединение установлено, ожидание приглашения...
    Ответ: 220 ProFTPD 1.3.1 Server (Debian) [XX.XXX.XXX.XX]

    как я понял ProFTPD 1.3.1 Server
     
  4. kuzmich111

    kuzmich111 Постоялец

    Регистр.:
    10 апр 2008
    Сообщения:
    146
    Симпатии:
    19
    Поправить файлик /etc/passwd
    Для пользователя ftp, задать нужную домашнюю директорию.
     
    AsanBosam нравится это.
  5. Cranik

    Cranik Постоялец

    Регистр.:
    9 мар 2009
    Сообщения:
    56
    Симпатии:
    5
    Если proftpd установлен в /sbin - ищем /etc/proftpd.conf
    если в /usr/local/sbin - /usr/local/etc/proftpd.conf

    конкретно ищем параметр
    DefaultRoot ~
     
  6. d1914

    d1914

    Заблокирован
    Регистр.:
    4 май 2007
    Сообщения:
    409
    Симпатии:
    64
    Вопрос внимательнее читай!
    При чем тут дефолт, когда вопрос о юзерах?
    Профтпд пускает юзера в его домашний каталог, смени домашний каталог юзера, сменишь и папку фтп для него...
     
  7. Cranik

    Cranik Постоялец

    Регистр.:
    9 мар 2009
    Сообщения:
    56
    Симпатии:
    5
    Ответ внимательнее читай!

    "DefaultRoot ~" означает, что дефолтовым рутовым каталогом для каждого пользователя будет его домашний каталог. Ты же в курсе насчет "~" ? То есть у пользователя "vasia" фтп каталог будет "/home/vasia", у пользователя "gena" - "/home/gena" и т.д.
     
  8. simon-epro

    simon-epro Читатель

    Заблокирован
    Регистр.:
    4 июн 2009
    Сообщения:
    19
    Симпатии:
    1
    1. собери proftpd с поддежкой mysql
    2. конфиг proftpd
    Код:
    # Конфиг proftpd - 2006-02-19
    
    
    # имя сервера - показывается коннектящимся клиентам
    ServerName              "Main FTP servant :)"
    # тип сервера (даже не тип самого сервера, а тип его запуска,
    # standalone/inetd - сам или через inetd)
    ServerType              standalone
    # смысл следующей директивы такой: если клиент коннектится не на имя
    # а на IP или на виртуальный хост, не описанный в конфиге, то при
    # установке в `off` он получит отлуп, если же установлено `on` то
    # он будет обслужен `сервером по-умолчанию`
    DefaultServer           on
    # e-mail администратора (по идее для каждого ВиртуалХоста его можно
    # поставить разный - но я делаю один сервер без извращений с
    # виртуальными хостами)
    ServerAdmin             admin@lissyara.su
    # файло где хранится инфа о сессиях
    #ScoreboardFile         /var/run/proftpd.scoreboard
    
    # порт на котором работает сервер
    Port                    21
    
    # Маска с которой создаются новые файлы (не совсем маска - маска получается
    # из этого значения, путём его вычитания из 777 - т.е. в даном случае получится
    # маска 755)
    Umask                   022
    
    # Максимальное число `детей` (работает только в standalohe режиме)
    # необходимо для защиты от атак типа `отказ в обслуживании` да и
    # от перегрузки сервера поможет :)
    MaxInstances            30
    
    # Юзер от которого работает сервер
    User                    ftp
    # группа, под которой работает сервер
    Group                   ftp
    
    
    # Тип авторизации (на самом деле - в каком виде хрянятся
    # пароли в БД - в данном случае - открытым текстом)
    SQLAuthTypes            Plaintext
    # Кого и как аутентифицируем - on - всех и вся :)
    # Но - если поставить `on` то он ломится в БД за группами.
    # мне группы никчему. Посему поставил `users`
    SQLAuthenticate         users
    # инфа для соединения с MySQL сервером:
    # имя_базы_данных@хост_где_MySQL:порт имя_пользователя пароль
    SQLConnectInfo          ftp@localhost:3306 ftp ftp
    # в каком порядке вернёт поля запрос - первое поле, это
    # имя таблицы, где лежат пользователи
    SQLUserInfo             `users_table` `username` `password` `uid` `gid` \
                            `homedir` `shell`
    # должен ли быть у юзера (для того, чтобы он мог коннектится),
    # `реальный` shell описанный в /etc/shells
    RequireValidShell off
    # лог файл работы с SQL
    SQLLogFile      /var/log/proftpd.log
    
    # Вот тут моя натура склонная к ведению логов на всё в
    # БД MySQL смогла разыграться на полную катушку :)
    # Записываем удачные логины в БД. Общий смысл такой - создаём
    # именованую кверю, с указанием что мы должны сохранять
    SQLLog          PASS            counter_login
    SQLNamedQuery   counter_login   UPDATE "`last_login`=UNIX_TIMESTAMP(), \
                                    `login_count`=`login_count`+1 WHERE \
                                    `username`='%u'" `users_table`
    # пишем неудачные логины в БД
    SQLLog          ERR_PASS        counter_err
    SQLNamedQuery   counter_err     UPDATE "`last_err_login`=UNIX_TIMESTAMP(), \
                                    `err_login_count`=`err_login_count`+1 WHERE \
                                    `username`='%U'" `users_table`
    
    # логируем что сохраняет и тащщит с сервера:
    # переменные
    # %u - имя пользователя (с которым залогинился)
    # %f - полный путь и имя файла который был скачан
    # %b - число байт, которые были скачаны
    # %h - имя клиента (из DNS), если не удалось разрешить - IP
    # %a - IP-адрес клиента
    # %m - имя команды полученной от клиента (RETR/STOR)
    # %T - время (секунд) ушедшее на передачу файла клиенту
    
    SQLLog          RETR,STOR               log_story_transfer
    SQLNamedQuery   log_story_transfer      INSERT "'',\
                                            UNIX_TIMESTAMP(),'%u',\
                                            '%f', '%b', '%h', \
                                            '%a', '%m', '%T'" \
                                             `xfer_table`
    # записываем ошибки при сохранении и чтении файлов
    # (в одну строку не влезли - но работает и в таком виде :))
    SQLLOG          ERR_RETR,ERR_STOR,ERR_DELE,ERR_RMD,ERR_RNTO\
                                            log_err_modify
    SQLNamedQuery   log_err_modify          INSERT "'',\
                                            UNIX_TIMESTAMP(),\
                                            '%u', '%f', '%h', \
                                            '%a', '%m'" `xfer_errors`
    
    # если вылезет проблема, типа тормозов при подключении
    # (в момент установления коннекта `задумывается` на 10-20 секунд)
    # то раскомментируйте следующие две строки
    #UseReverseDNS     off
    #IdentLookups      off
    
    
    
    # если надо чтобы ВСЕ пользователи по ftp были ограниченны
    # своей домашней директорией, то надо раскомментировать
    # следующую строку:
    #DefaultRoot            ~
    # у меня хитрее сделано - себе я разрешил шариться по всему серверу
    # а остальных за`chroot`ил. Если, например, надо чтобы пользователи
    # могли по серверу шариться а анонимоусы нет, то надо указать !users
    # также можно указать определённую группу.
    DefaultRoot             ~       !lissyara
    
    # Директории
    <Directory ~>
    AllowOverwrite          on
    <Limit Write>
    AllowAll
    </Limit>
    <Limit READ>
    AllowAll
    </Limit>
    </Directory>
    
    
    <Anonymous /usr/home/ftp>
    # пользователь от которого анонимоусы шарятся
    User            ftp
    # группа анонимоусов
    Group           ftp
    # альясы ананонимоусов (можно будет входить как ftp, а
    # не anonymous)
    UserAlias       anonymous ftp
    # максимально число анонимоусов
    MaxClients      10      "Sorry, max %m users - try again later"
    <Limit WRITE>
    DenyAll
    </Limit>
    </Anonymous>
    
    
    
    3. дамп базы mysql
    Код:
    --
    -- Table structure for table `users_table`
    --
    
    DROP TABLE IF EXISTS `users_table`;
    CREATE TABLE `users_table` (
      `unic_id` int(11) NOT NULL auto_increment,
      `username` varchar(20) NOT NULL,
      `password` varchar(20) NOT NULL,
      `groupname` varchar(24) NOT NULL,
      `uid` int(11) NOT NULL,
      `gid` int(11) NOT NULL,
      `homedir` varchar(50) NOT NULL,
      `shell` varchar(20) NOT NULL,
      `last_login` int(15) NOT NULL,
      `login_count` int(15) NOT NULL,
      `last_err_login` int(15) NOT NULL,
      `err_login_count` int(15) NOT NULL,
      PRIMARY KEY  (`unic_id`)
    ) ENGINE=MyISAM COMMENT='Таблица пользователей';
    
    --
    -- Dumping data for table `users_table`
    --
    
    INSERT INTO `users_table` VALUES (1,'user1','123','user1',
    1001,1001,'/usr/home/user1','/sbin/nologin',0,0,0,0);
    
    
    --
    -- Table structure for table `xfer_errors`
    --
    
    DROP TABLE IF EXISTS `xfer_errors`;
    CREATE TABLE `xfer_errors` (
      `unic_id` int(32) NOT NULL auto_increment,
      `timestamp` int(15) NOT NULL,
      `user_name` varchar(64) NOT NULL,
      `file_and_path` tinytext NOT NULL,
      `client_name` varchar(127) NOT NULL,
      `client_IP` varchar(15) NOT NULL,
      `client_command` varchar(5) NOT NULL,
      PRIMARY KEY  (`unic_id`)
    ) ENGINE=MyISAM COMMENT='Таблица ошибок при работе';
    
    --
    -- Dumping data for table `xfer_errors`
    --
    
    
    --
    -- Table structure for table `xfer_table`
    --
    
    DROP TABLE IF EXISTS `xfer_table`;
    CREATE TABLE `xfer_table` (
      `unic_id` int(32) NOT NULL auto_increment,
      `timestamp` int(15) NOT NULL,
      `user_name` varchar(64) NOT NULL,
      `file_and_path` tinytext NOT NULL,
      `bytes` int(15) NOT NULL default '0',
      `client_name` varchar(127) NOT NULL,
      `client_IP` varchar(15) NOT NULL,
      `client_command` varchar(5) NOT NULL,
      `send_time` varchar(9) NOT NULL default '0',
      PRIMARY KEY  (`unic_id`)
    ) ENGINE=MyISAM COMMENT='Таблица, чё приняли-передали';
    
    --
    -- Dumping data for table `xfer_table`
    --
    
    4. после пользователей заводить ручками в базе:
    INSERT INTO `users_table` VALUES (1,'ИМЯ_ЮЗЕРА','ЕГО_ПАРОЛЬ','СИСТЕМНОЕ_ИМЯ(проще всего ставить ftp под ним пашет proftpd)', 1001,1001,'/usr/home/user1','
    /sbin/nologin',0,0,0,0);

    /usr/home/user1 в данном случае путь к папке куда будет направлен пользователь после входа, пеняется на любой другой, с предоставлением прав соответственно данному пользователю на папку.

    1001 в данном случае UID и GID юзера в системе(в примере это пользователь ftp)

    по всем вопросам не обращаться, обращаться по существу в личку.
     
  9. Oleg17

    Oleg17 Постоялец

    Регистр.:
    11 янв 2009
    Сообщения:
    116
    Симпатии:
    14
    А в чем проблема ? Если пользоваться системными юзерами, а не SQL, то просто нужно добавить имя юзера / группы, через пробел. Например вот так:

    DefaultRoot / wheel
    DefaultRoot /usr/local/www/apache22/data www
     
  10. d1914

    d1914

    Заблокирован
    Регистр.:
    4 май 2007
    Сообщения:
    409
    Симпатии:
    64
    Ну так я об этом и говорю! При чем тут дефолт, если чел спросил конкретно про юзера?:)
    Смени домашний каталог юзеру, сменишь его для юзера и на фтп...


    # Use this to jail all users in their homes
    # DefaultRoot ~

    Т.е., дефолтрут нужно раскомментировать для того, чтобы запереть юзера в домашнем каталоге.

    Как Oleg17 предлагает не пробовал, не было нужды, у меня другие потребности... :)
     
Статус темы:
Закрыта.