Ivanovo Linux Users Group - Not logged in
Forum Help Search Login
Previous Next Up Topic Софт / Программное обеспечение / ProFTPd UTF-8 CP-1251 (11116 hits)
- By hawk Date 25.12.09 12:15 Edited 25.12.09 12:21
Решил сегодня ФТП шник очередной замутить на Debian 5, выбор пал на ProFTPD, потому как интересно :-), vsFTPd патченный уж пару годков как работает, PureFTPd с поддержкой кодировок собрал недавно под FreeBSD для разнообразия теперь ProFTPd.
Для начала заинсталил его по умолчанию
# apt-get install proftpd

Настроил, запустил, убедился что залитые файлы с винды например по самбе на дебиан в ФТПшном подключении видны кракозябрами, попытался добавить секции
CharsetLocal UTF-8
CharsetRemote CP1251

в конфиг /etc/proftpd/proftpd.conf - руганулся, что не знает таких параметров, оно и понятно, надо патчить и пересобирать.
Сам патч берем отсюда http://groups.google.com/group/linux.debian.bugs.dist/browse_thread/thread/63ca9520247f3a04
Кидаем его с именем     proftpd-1.3.1-rus.patch в папку /usr/src
Переходим туда, теперь выкачиваем  сырцы профтпд:
# apt-get source proftpd

смотрим что появилось в /usr/src, дальше
mv proftpd-dfsg-1.3.1 proftpd-1.3.1

Копируем proftpd-1.3.1-rus.patch в папку proftpd-1.3.1 и патчим:
patch -p1 < proftpd-1.3.1-rus.patch

теперь, правим debian/rules
--enable-ctrls --with-modules=mod_readme --enable-ctrls --enable-nls --with-modules=mod_readme:mod_codeconv --enable-nls

Добавить нужно то что выделено жирным. Сохраняем, переходим на директорию выше в папку proftpd-1.3.1 и начинаем собирать, но сначало поставим нужное для этого дела:
apt-get install  autoconf automake libtool autotools-dev fakeroot
dpkg-buildpackage должен уже присутствовать и iconv.
Для свобрки :
# dpkg-buildpackage -rfakeroot
у меня ругнулось что не удовлетворены зависимости:
Неудовлетворённые сборочные зависимости: libmysqlclient15-dev (>= 5.0.16) libpam-dev debhelper (>= 5) libpq-dev libldap2-dev libssl-dev libwrap0-dev libcap-dev | not+linux-gnu libncurses5-dev dpatch libacl1-dev libattr1-dev

Доставляем что просит и заного
# dpkg-buildpackage -rfakeroot

Сборка пошла, сидим пьём кофе :-)
После сборки появились пакетики, тут я удалил умолчательный
aptitude remove proftpd
и накатил патченные
# dpkg -i proftpd_1.3.1-17lenny4_all.deb proftpd-basic_1.3.1-17lenny4_i386.deb proftpd-doc_1.3.1-17lenny4_all.deb proftpd-mod-ldap_1.3.1-17lenny4_i386.deb proftpd-mod-mysql_1.3.1-17lenny4_i386.deb proftpd-mod-pgsql_1.3.1-17lenny4_i386.deb

Залез в конфиг  /etc/proftpd/proftpd.conf и добавил две строчки:
CharsetLocal UTF-8
CharsetRemote CP1251

Перезапустил сервак:
# /etc/init.d/proftpd start

Еже без ругани, а стало быть строчки кодировок восприняты!
Ну и подключился из под винды по ФТП, теперь все те кракозябры стали русскими именами папок и файлов. УРА!
Пишу по памяти, пока в памяти :-):-):-).
Если надо, то могу предоставить и готовые пакеты, но лучше делайте сами )))
Вот пакетики:
/ProFTPd-patch-cp1251# ls
install                         proftpd-1.3.1-rus.patch                   proftpd-mod-mysql_1.3.1-17lenny4_i386.deb
proftpd                         proftpd-basic_1.3.1-17lenny4_i386.deb     proftpd-mod-pgsql_1.3.1-17lenny4_i386.deb
proftpd-1.3.1                   proftpd-doc_1.3.1-17lenny4_all.deb        readme
proftpd_1.3.1-17lenny4_all.deb  proftpd-mod-ldap_1.3.1-17lenny4_i386.deb

Постараюсь найти им местечко на фтп каком нить для общего доступа в дальнейшем.
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent - By hawk Date 25.12.09 20:03 Edited 25.12.09 20:11
Пакетики выложил сюда...
За круглосуточную доступность не ручаюсь, как в прочем и за долговременность работы ссылки :-). В любом случае инструкции по сборке выше. Материал более развернутой статьи в скором времени дам у себя в блоге, линк на материал так же прикреплю к теме.
proftpd-1.3.1.patch-utf8-cp1251-src.tar.gz
сырцы полученные командой
# apt-get source proftpd
  и пропатченные, готовые к сборке.
proftpd_myconf.tar.gz
мои конфиги, минимально рабочие и настроенные на правильное отображение кодировок. Плюсом чутка добавлено побольше логов. Если немного заморочится, можно хранить пользователей в базе MySQL (я так делаю в PureFTPd + WEB морда для администрирования юзерей, добавление квотирование), так безопаснее. Смотрел на форуме посты, LOE отписал, что так и делает, если приведет дамп базы - огромное ему спасибо!
echo "good..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Parent By LOE (Site/forum admin) Date 25.12.09 20:25
Без проблем:
Создание таблиц:
CREATE TABLE `ftp_user` (
  `userid` varchar(16) NOT NULL default '',
  `passwd` varchar(32) NOT NULL default '',
  `uid` smallint(5) unsigned default '8000',
  `gid` smallint(5) unsigned default '876',
  `homedir` varchar(80) NOT NULL default '/tmp',
  `shell` varchar(32) NOT NULL default '',
  `count` int(10) unsigned default '0',
  `ltime` timestamp(14) NOT NULL,
  UNIQUE KEY `userid` (`userid`),
  UNIQUE KEY `uid` (`uid`),
  KEY `userid_2` (`userid`),
  KEY `uid_2` (`uid`),
  KEY `gid` (`gid`)
);
CREATE TABLE `ftp_group` (
  `groupname` varchar(16) NOT NULL default '',
  `gid` smallint(5) unsigned default '876',
  `members` varchar(16) NOT NULL default '',
  KEY `groupname` (`groupname`),
  KEY `gid` (`gid`),
  KEY `members` (`members`)
);

Опции из конфига:
<Global>
# авторизация на mysql сервере:
SQLConnectInfo mysql_BASE@mysql_HOST mysql_USER mysql_PASS
# варианты хранения хэша пароля в базе: crypt, mysql-евский, открытым текстом:
SQLAuthTypes Crypt Backend Plaintext
# описание таблицы с пользователями:
SQLUserInfo ftp_user userid passwd uid gid homedir NULL
# общая опция, но нужная в нашем случае описания home-fir'а:
RequireValidShell off
# описание таблицы с группами:
SQLGroupInfo ftp_group groupname gid members
# пара опций:
SQLMinUserUID 405
SQLMinUserGID 221
SQLAuthenticate users* groups* userset groupset
# создание счетчика числа подключений плюс авто-апдейт времени последней авторизации в таблице
SQLNamedQuery getcount SELECT "count, userid from ftp_user where userid='%u'"
SQLNamedQuery updatecount UPDATE "count=count+1 WHERE userid='%u'" ftp_user
SQLShowInfo PASS "230" "You've logged on %{getcount} times, %u"
SQLLog PASS updatecount
AuthOrder mod_sql.c
</Global>
# опция задания корневого каталога - это домашний каталог, выше него не перейдет:
DefaultRoot ~
"No! Try not! Do. Or do not. There is no try." -- Yoda
Previous Next Up Topic Софт / Программное обеспечение / ProFTPd UTF-8 CP-1251 (11116 hits)

Powered by mwForum 2.12.0 © 1999-2007 Markus Wichitill

Page created in 0.080s with 10 database queries.