Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Ubuntu 8.10 Dectop Proftpd-mysql  (Прочитано 3096 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн pink_porox

  • Автор темы
  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Ubuntu 8.10 Dectop Proftpd-mysql
« : 14 Декабрь 2008, 01:45:46 »
Plizz Help!
Суть вопроса:
Подниматься ftp сервер по инструкции  _https://forum.ubuntu.ru/index.php?action=dlattach;topic=37507.0;attach=9555 ...
Запнулся на пункте 5! При добавление в /etc/proftpd/proftpd.con :  "Добавим в этот файл, также следующие строки: DefaultRoot ~ SQLBackend              mysql# The passwords in MySQL are encrypted using CRYPT" и тд ....
Все добовляеться и сохраняеться тока при рестарте /etc/init.d/proftpd restart вот такая ошибка ....
 - Fatal: unknown configuration directive 'SQLBackend' on line 33 of '/etc/proftpd/proftpd.conf'       [fail]
И конечно дальнейшие действия не к чему не приведут .....
Установлены следующие пакеты ftp  : ProFTPd ,proftpd-basic ,proftpd-mod-ldap, proftpd-mod-pgsql,proftpd-mod-mysql.
Пакеты mysql : php5-mysql,libmysqlclient15-dev,libmysqlclient15off,mysql-client,mysql-client-5.0,mysql-common,mysql-server,mysql-server-5.0,mysql-admin,mysql-gui-tools-common,mysql-query-browser,libdbd-mysql-perl,libqt4-sql-mysql,libapache2-mod-auth-mysql,proftpd-mod-mysql.
Что не так ?

                                                                     

Оффлайн mailbird

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Ubuntu 8.10 Dectop Proftpd-mysql
« Ответ #1 : 21 Март 2009, 14:36:52 »
1. Устанавливаем MySQL
Установите пакеты mysql-server, mysql-client, libmysqlclient12-dev
   Создайте пароль для root пользователя MySql:
        mysqladmin -u root password MYSLOZHNYPAROL

2. Установка Proftpd с поддержкой MySQL
Для Debian доступен заранее сконфигурированный пакет proftpd-mysql.
Установите его как standalone daemon, подобно этому:
 apt-get install proftpd-mysql
 Run proftpd from inetd or standalone? <-- standalone
 Then we create an ftp group ("ftpgroup") and user ("ftpuser") that all our virtual users will be mapped to. Replace the group- and userid 2001 with a number that is free on your system:

 groupadd -g 2001 ftpgroup
 useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

   Затем создадим ftp группу ("ftpgroup") и пользователя ("ftpuser"), под    которыми будут работать все виртуальные пользователи. 
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

3. Создание MySQL базы для Proftpd

Создайте базу данных ftp и пользователя MySql, назовем его proftpd, daemon proftpd будет использовать его позже, чтобы соединиться с базой данных ftp.
 mysql -u root -p
 create database ftp;
 GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost' IDENTIFIED BY 'password';
 FLUSH PRIVILEGES;

Замените строку password на пароль который вы хотели бы использовать для пользователя MySQL proftpd. Еще в оболочке MySQL, мы создаем таблицы базы данных, которые нам нужны:
        USE ftp;
        CREATE TABLE ftpgroup (
        groupname varchar(16) NOT NULL default '',
        gid smallint(6) NOT NULL default '5500',
        members varchar(16) NOT NULL default '',
        KEY groupname (groupname)
        ) TYPE=MyISAM COMMENT='ProFTP group table';

CREATE TABLE ftpquotalimits (
name varchar(30) default NULL,
quota_type enum('user','group','class','all') NOT NULL default 'user',
per_session enum('false','true') NOT NULL default 'false',
limit_type enum('soft','hard') NOT NULL default 'soft',
bytes_in_avail int(10) unsigned NOT NULL default '0',
bytes_out_avail int(10) unsigned NOT NULL default '0',
bytes_xfer_avail int(10) unsigned NOT NULL default '0',
files_in_avail int(10) unsigned NOT NULL default '0',
files_out_avail int(10) unsigned NOT NULL default '0',
files_xfer_avail int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;

CREATE TABLE ftpquotatallies (
name varchar(30) NOT NULL default '',
quota_type enum('user','group','class','all') NOT NULL default 'user',
bytes_in_used int(10) unsigned NOT NULL default '0',
bytes_out_used int(10) unsigned NOT NULL default '0',
bytes_xfer_used int(10) unsigned NOT NULL default '0',
files_in_used int(10) unsigned NOT NULL default '0',
files_out_used int(10) unsigned NOT NULL default '0',
files_xfer_used int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;

CREATE TABLE ftpuser (
id int(10) unsigned NOT NULL auto_increment,
userid varchar(32) NOT NULL default '',
passwd varchar(32) NOT NULL default '',
uid smallint(6) NOT NULL default '5500',
gid smallint(6) NOT NULL default '5500',
homedir varchar(255) NOT NULL default '',
shell varchar(16) NOT NULL default '/sbin/nologin',
count int(11) NOT NULL default '0',
accessed datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id),
UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT='ProFTP user table';
quit;

Имя хоста вашей системы сервера ftp - это 4-318-0N.tspu.tula.ru Можно использовать IP    адрес вместо 4-318-0N.tspu.tula.ru

4. Конфигурация Proftpd
   Откройте /etc/proftpd.conf и добавьте следующие строки:
DefaultRoot ~
# The passwords in MySQL are encrypted using
AuthOrder                    mod_sql.c
SQLBackend              mysql
SQLAuthTypes            Plaintext
SQLAuthenticate         users

# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo  ftp@localhost proftpd tgh48rj
# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the
SQLUserInfo     ftpuser userid passwd uid gid homedir shell
# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the
SQLGroupInfo    ftpgroup groupname gid members
# set min UID and GID - otherwise these are 999
SQLMinID        500
# create a user's home directory on demand if it doesn't exist
SQLHomedirOnDemand on

# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatedir UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

# Update modified everytime user uploads or deletes a file
SQLLog  STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
# User quotas
# ===========
QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on
SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"
SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"
SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies
SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies
QuotaLimitTable sql:/get-quota-limitQuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
RootLogin off
RequireValidShell off

   Убедитесь в том что вы заменили строку password, на реальный пароль
   для MySQL пользователя proftpd в строке SQLConnectInfo!

   Перезапускаем Proftpd:

        /etc/init.d/proftpd restart

5. Заполнение базы данных и тестирование

   Для заполнения базы данных вы можете использовать оболочку MySql
        mysql -u root -p
        USE ftp;

Для начала мы добавим запись в таблицу ftpgroup. Она содержит поля groupname, groupid и username. Группу/пользователя ftp мы создали в конце шага два (замените groupid, на тот который вы указанный при создании пользователя):

INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES
          ('ftpgroup', 2001, 'ftpuser');

Сейчас мы закончили с таблицей ftpgroup. Нам не придется создавать дальнейших записей здесь. Каждый раз, когда вы создаете нового виртуального пользователя ftp, вы делаете это в таблицах ftpquotalimits и ftpuser. Так что давайте создавать нашего первого    пользователя (мы все еще находимся в оболочке MySQL):

INSERT INTO `ftpquotalimits` (`name`, `quota_type`, `per_session`, `limit_type`, `bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`, `files_in_avail`, `files_out_avail`, `files_xfer_avail`) VALUES ('exampleuser', 'user', 'true', 'hard', 15728640, 0, 0, 0, 0, 0); INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (1, 'exampleuser', 'secret', 2001, 2001, '/home/www.example.com', '/sbin/nologin', 0, '', '');
quit;

Соединитесь с созданным ftp сервером

Выполните команду ls -l /home

вы должны увидеть, что директория /home/4-318-0N.tspu.tula.ru (начальный каталог) автоматически создана, и она принадлежит ftpuser и ftpgroup (пользователя/группу мы создали в конце шага два).

5.1 Администрация Базы данных

   Каждый раз, когда вы создаете нового пользователя, вам придется    создать только записи в таблицах ftpquotalimits и ftpuser.

   Таблица ftpuser:
   userid: Имя виртуального пользователя Proftpd (напр. exampleuser).
   passwd: Незашифрованный (т.е., clear-text) пароль пользователя.
   uid: Userid пользователя ftp, вы создали в конце шага два (напр. 2001).
   gid: Groupid группы ftp, вы создали в конце шага два (напр. 2001).
   homedir: Начальный каталог виртуального пользователя Proftpd
(напр. /home/4-318-0N.tspu.tula.ru). Если его не существует, он будет создан, когда    новый пользователь пройдет первую авторизацию через FTP. Виртуальный  пользователь будет заключен в chroot окружение начального каталога, т.е., он не может обращаться к другим директориям за пределами его начального каталога.
   shell: Установите /sbin/nologin по умолчанию.

   Таблица ftpquotalimits:
   name: Имя виртуального пользователя Proftpd (напр. exampleuser).
   quota_type: Ограничить quota по пользователю или группе. Мы используем здесь пользователя.
   per_session: true или false. True лимиты квоты действительны только    для сессии. Например, если пользователь имеет квоту 15 МБ, и он переслал 15 МБ в течение текущей сессии, затем он не может пересылать что-либо еще. Но если он регистрируется опять, то он опять имеет доступных 15 МБ. false, пользователь имеет 15 МБ и безразлично если он регистрируется опять.
  limit_type: hard или soft. Hard лимит квоты - это лимит не может быть превышен, в то время как мягкая квота может быть временно превышена. Лучше использовать hard.
   bytes_in_avail: Лимит в байтах (напр. 15728640 для 15 МБ). 0 означает безгранично.
   bytes_out_avail: Лимит загрузки в байтах. 0 означает безгранично.
   bytes_xfer_avail: Лимит передачи в байтах.0 означает безгранично.
   files_in_avail: Upload лимит в файлах. 0 означает безгранично.
   files_out_avail: Download лимит в файлах. 0 означает безгранично.
   files_xfer_avail: Лимит Tranfer в файлах. 0 означает безгранично.

   Если вы хотите создать анонимный ftp аккаунт (аккаунт ftp, к которому каждый может получить доступ без логина и пароля), вы можете сделать это подобно этому:

   Для начала мы создаем пользователя и группу с именем anonymous_ftp.
   Пользователь имеет начальный каталог /home/anonymous_ftp:

groupadd -g 2002 anonymous_ftp
useradd -u 2002 -s /bin/false -d /home/anonymous_ftp -m -c "Anonymous FTP User" -g anonymous_ftp anonymous_ftp

   Затем мы создаем директорию /home/anonymous_ftp/incoming, которая позволит анонимному пользователю переслать файлы:
        mkdir /home/anonymous_ftp/incoming
        chown anonymous_ftp:nogroup /home/anonymous_ftp/incoming

И завершающий этап, открыть /etc/proftpd.conf и добавить следующие директивы к нему:

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

# Uncomment this if you're brave.
<Directory incoming>
# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask 022 022
<Limit READ WRITE>
  DenyAll
</Limit>

<Limit STOR>
  AllowAll
</Limit>
</Directory>
</Anonymous>

   Перезапустите Proftpd:  /etc/init.d/proftpd restart
   Сейчас анонимные пользователи могут входить на сервер, и они могут загрузить файлы с /home/anonymous_ftp, но upload ограничен в /home/anonymous_ftp/incoming (и как только файл загруже в /home/anonymous_ftp/incoming, он не может быть ни прочитан ни  загружен оттуда; администратору придется переместить его в /home/anonymous_ftp сразу, чтобы сделать файл доступным другим).

   (Заметьте: Вы можете создать только один анонимный ftp аккаунт на один IP адрес !)

   Ссылки:

   Proftpd: http://www.proftpd.org/
   MySQL: http://www.mysql.com/
   phpMyAdmin: http://www.phpmyadmin.net/

Материал лабораторной работы основан на http://howtoforge.org.ua/?q=node/22

Оффлайн Antik

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Ubuntu 8.10 Dectop Proftpd-mysql
« Ответ #2 : 02 Апрель 2009, 10:22:55 »
У меня возникла аналогичная проблема. К сожалению ответ никак не помог. Установлены те же модули что и автора темы. При попытке  установить модуль proftpd-mysql apt-get сообщает что не моет найти данный пакет, но он существует в списках зависимостей. Возможно он находиться на одном из репозиториев не прописанных у меня.
Подскажите как подружить proftpd и MySQL

Оффлайн hardman86

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Ubuntu 8.10 Dectop Proftpd-mysql
« Ответ #3 : 16 Апрель 2009, 16:13:51 »
Нашел решение. Автор мануала, когда выложил содержимое файла proftpd.conf не уточнил, что часть конфига, начинающаяся с
SQLBackend       mysql
и заканчивающаяся
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
должна быть ограничена операторными скобками
<IfModule mod_sql.c> - сверху (эта строка по умолчанию закомментирована, поэтому и выдается фатал эррор)
</IfModule> - снизу

 

Страница сгенерирована за 0.055 секунд. Запросов: 22.