Показать сообщение отдельно

Совершенный Сервер на Ubuntu 8.10 ( часть 2)
  #11  
Старый 24.12.2008, 02:43
Belfigor
Участник форума
Регистрация: 14.11.2007
Сообщений: 195
С нами: 9731283

Репутация: 98
По умолчанию Совершенный Сервер на Ubuntu 8.10 ( часть 2)

В этой части будет рассказанно , как установить FTP c поддержкой Mysql в частности это будет Proftpd-Mysql

Для начала установим Apache, Mysql и PhpMyadmin , как это сделать я подробно описал ТУТ

сделать это нужно в консоли по рутом

Код:
sudo su
установим всё одной командой

Код:
apt-get install mysql-server mysql-client libmysqlclient15-dev phpmyadmin apache2
Во время установки вас попросят задать пароль для Mysql , сделаем это

Цитата:
New password for the MySQL "root" user: <-- ваш пароль для mysql
теперь просмотрим коректно ли работают наши устанолвенные программы Apache, Mysql и PhpMyadmin , в папке www создадим файл test.php c следующим содержанием

PHP код:
<?php
phpinfo
();
?>
зайдя на свой хост вы должны уведеть следующие : http://127.0.0.1/test.php



Если всё нормально , едем дальше , и установим proftpd-mysql

Код:
apt-get install proftpd-mysql
при установки proftpd-mysql вы можете столкнуться с некоторыми проблемами :

PHP код:
 apt-get install proftpd-mysql
Чтение списков пакетов
... Готово
Построение дерева зависимостей      
Чтение информации о состоянии
... Готово
Пакет proftpd
-mysql недоступен, но упомянут в списке зависимостей другого пакета.
Это может означать, что пакет отсутствует, устарел, или доступен из источников, не упомянутых в sources.list
E: Для пакета proftpd-mysql не найдены кандидаты на установку 
в Ubuntu 8.04 , проблем не было , но ничего это всё решаемо :

Идём во сюда http://packages.ubuntu.com/ru/dapper...mysql/download

Страница загрузки пакета proftpd-mysql_1.2.10-27ubuntu3.1_i386.deb для архитектуры Intel x86

далее :

Цитата:
Если вы работаете в Ubuntu, для загрузки и установки пакетов настоятельно советуем использовать менеджер пакетов, например aptitude или synaptic, а не делать это вручную через данный сайт.

Используйте любой из серверов-зеркал, добавив его в свой файл /etc/apt/sources.list, например так:

deb http://fr.archive.ubuntu.com/ubuntu dapper-updates main universe

Заменив fr.archive.ubuntu.com/ubuntu нужным сервером.
затем sources.list я добавил

Код:
deb http://mirrors.kernel.org/ubuntu dapper-updates main universe
и устанавливаем proftpd mysql :

Код:
apt-get install proftpd-mysql
во время установки вам зададут вопрос , ответе:

Цитата:
Run proftpd: <-- standalone
Теперь создадим ftp группу и ftp юзера



PHP код:
groupadd -g 2001 ftpgroup
useradd 
-u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser 
Теперь нужно создать в mysql базу для Proftpd :

PHP код:
create database ftp;
  
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost' IDENTIFIED    BY 'password';
  
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost.localdomain'    IDENTIFIED BY 'password';
  
FLUSH PRIVILEGES; 
теперь создадим структуру таблиц в базе ftp:

PHP код:
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'; 
PHP код:
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; 
PHP код:
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; 
PHP код:
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'; 
выходим из mysql

Код:
quit;
Теперь открываем /etc/proftpd.conf и в конец файла добавлем следующие строки :

Код:
DefaultRoot ~


# The passwords in MySQL are encrypted using CRYPT
SQLAuthTypes            Plaintext Crypt
SQLAuthenticate         users* groups*


# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo  ftp@localhost proftpd password


# 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 db
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 db
SQLGroupInfo    ftpgroup groupname gid members

# set min UID and GID - otherwise these are 999 each
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 updatecount 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-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

RootLogin off
RequireValidShell off
проверте что вы заменили строку password вашем настроящим паролем для MySQL user proftpd в линии SQLConnectInfo!

Также в /etc/proftpd.conf можно добавить вот такие строки :
из мануала

Цитата:
Martin Mrajca has sent me these lines that you can add to /etc/proftpd.conf so that Proftpd sends you a banner with used / available space after LIST:
Код:
SQLNamedQuery gettally  SELECT "ROUND((bytes_in_used/1048576),2) FROM ftpquotatallies WHERE name='%u'"
SQLNamedQuery getlimit  SELECT "ROUND((bytes_in_avail/1048576),2) FROM ftpquotalimits WHERE name='%u'"
SQLNamedQuery getfree   SELECT "ROUND(((ftpquotalimits.bytes_in_avail-ftpquotatallies.bytes_in_used)/1048576),2) FROM ftpquotalimits,ftpquotatallies WHERE ftpquotalimits.name = '%u' AND ftpquotatallies.name = '%u'"

SQLShowInfo   LIST    "226" "Used %{gettally}MB from %{getlimit}MB. You have %{getfree}MB available space."
Не забудьте перезагрузить Proftpd после добавления этих строк

Вернёмся в mysql и создадим группу и юзера в базе FTP:
Код:
 mysql -u root -p
PHP код:
USE ftp;

INSERT INTO `ftpgroup`    (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser'); 
PHP код:
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, '', ''); 
выходим из mysql
Код:
quit;
Итак мы создали юзера exampleuser с паролем secret и директорией /home/www.example.com ,





здесь вы можете указать свою директорю /home/user или /www/user1/ и тд .

Заходим в phpmyadmin и может добавлять новых юзеров , выставлять квоты на размер диского пространства и тд и тп :

http://127.0.0.1/phpmyadmin/





Таблица ftpuser Table

* userid: имя виртального юзера Proftpd user (e.g. exampleuser).
* passwd: пароль храниться в открытом виде , это недостаток , имхо ( The unencrypted (i.e., clear-text) password of the user.)
* uid: юзер ид (The userid of the ftp user you created at the end of step two (e.g. 2001).
* gid: ид группы ( The groupid of the ftp group you created at the end of step two (e.g. 2001).
* homedir: директория виртуально юзера proftpd например /home/www.example.com


Удачной установки и настройки , с уважением Belfigor

источник http://www.howtoforge.com/proftpd_mysql_virtual_hosting

(c)stopxaker.ru

Последний раз редактировалось Belfigor; 25.04.2009 в 16:26..
 
Ответить с цитированием