И с това се справих. Нека споделя с Вас цялостната настройка за CentOS 5.4.
Да започнем с инсталацията.
GeSHi (Bash):
[root@localhost ~]# yum install proftpd-mysql
Използвам пакет за промяна на файловете mc. Променяме /etc/proftpd.conf да изглежда по този начин.
GeSHi (Bash):
[root@localhost ~]# mcedit -cd /etc/proftpd.conf
GeSHi (Bash):
ServerName "ProFTPD Сървър"
ServerType standalone
DefaultServer on
Port 21
UseIPv6 off
Umask 022
MaxInstances 50
User ftpuser
Group ftpgroup
DefaultRoot ~
IdentLookups off
ServerIdent on "FTP сървъра е готов."
RootLogin off
RequireValidShell off
CreateHome on 755 dirmode 755
AllowOverwrite on
# Bar use of SITE CHMOD by default
#<Limit SITE_CHMOD>
# DenyAll
#</Limit>
SystemLog /var/log/proftpd/proftpd.log
Include "/etc/proftpd/mysql.conf"
Отваряме нов файл mysql.conf и в него въвеждаме
GeSHi ():
[root@localhost ~]# mcedit -cd /etc/proftpd/mysql.conf
GeSHi (Bash):
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_sql.c
SQLConnectInfo база_данни@localhost потребител_на_бд парола_за_потребителя
SQLAuthenticate users groups
SQLAuthTypes Plaintext Crypt
SQLDefaultHomedir ~
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
SQLLogFile /var/log/proftpd/proftpd-sql.log
# Count number of logins for each user
SQLLog PASS lastcount
SQLNamedQuery lastcount UPDATE "count=count+1 WHERE userid='%u'" ftpuser
# Save last login
SQLLog PASS lastlogin
SQLNamedQuery lastlogin UPDATE "modified=now() WHERE userid='%u'" ftpuser
# Do not let disabled or expired users to login
SQLUserWhereClause "disabled='1' OR expires='0000-00-00 00:00:00' OR expires>now()"
# 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
Следва да се свържем с mysql и да създадем потребителя, да му зададем права и да създадем базата данни с таблиците в нея, но преди това въвеждаме в терминала следните команди.
GeSHi (Bash):
[root@localhost ~]# groupadd -g 2001 ftpgroup
[root@localhost ~]# useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser
Свързваме се към mysql с root потребител
GeSHi (Bash):
[root@localhost ~]#mysql -u root -p
GeSHi (Bash):
create database ftp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'потребител_за_дб'@'localhost' IDENTIFIED BY 'парола_за_дб_потребителя';
FLUSH PRIVILEGES;
Избираме базата данни ftp:
GeSHi (Bash):
USE ftp;
Създаваме таблиците в нея:
GeSHi (Bash):
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';
GeSHi (Bash):
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;
GeSHi (Bash):
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;
GeSHi (Bash):
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',
`disabled` enum('0','1') NOT NULL default '0',
`expires` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `userid` (`userid`)
) ENGINE=MyISAM;
Изписваме quit; за да излезем от Mysql Shell-а и да се върнем отново към Linux Shell-а
GeSHi (Bash):
quit;
Дойде ред да направим proftpd да се стартира със зареждане на OS и да го стартираме самия него още сега.
GeSHi (Bash):
[root@localhost ~]# chkconfig --levels 235 proftpd on
[root@localhost ~]# /etc/init.d/proftpd start
За да създадем 1-вия потребител влизаме отново в mysql:
GeSHi (Bash):
[root@localhost ~]# mysql -u root -p
Отново избираме база ftp:
GeSHi (Bash):
USE ftp;
Вмъкмаме записите както следва:
GeSHi (Bash):
INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser');
GeSHi (Bash):
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 ('ftp_потребител', 'user', 'true', 'hard', 15728640, 0, 0, 0, 0, 0);
GeSHi (Bash):
INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`, `disabled`, `expires`) VALUES
(1, 'ftp_потребител', 'парола_за_ftp_потребителя', 2001, 2001, '/home/директорията/която/ще/ползва/потребителя', '/sbin/nologin', 14, '0000-00-00 00:00:00', '0000-00-00 00:00:00', '0', '0000-00-00 00:00:00');
Отново излизаме от mysql с команда quit;
GeSHi (Bash):
quit;
Проверяваме правата да изглеждат по следния начин.
GeSHi (Bash):
[root@localhost ~]# ls -l /home/
Трябва да Ви изведе нещо подобно
GeSHi (Bash):
drwxr-xr-x 2 ftpuser ftpgroup 4096 2010-05-24 13:10 ftp_потребителската_директория
Ако имате въпроси питайте... Продължението на темата, е настройка на httpd да ползва потребителските директории и да могат да се отварят със субдомейн примерно от типа
http://ftp_потребител.site.com + php скриптовете за регистрация на фтп акаунт и администрацията на тези.. Става въпрос да се получи системка за безплатен хостинг с поддомейни.