Как обмануть getpwnam("ftp") в pureftpd? Подставить другой $HOME для отдельного процесса Pure-FTPd?
Возникла задача запускать еще один экземпляр Pure-FTPd в пределах одного сервера. Нужно сделать так, чтобы при заходе на рызные IP сервера, отдавались разные anonymous directory (что-то вроде vurtual domains).
После долгих мытарств с конфигами Убунту и написания двух отдельных init-скриптов и врапперов конфигов, удалось запустить два демона для двух деменов с разными IP.
Но тут возникла проблема: директорию anonymous демон умеет брать только у юзера «ftp» (его домашняя директория). Это поведение захардкодено: покопавшись в исходниках я нашел вызов getpwnam(«ftp»).
Вопрос: как можно в Linux обмануть демона, подусунув ему другой homedir для библиотечного вызова getpwnam(«ftp»)?
А может у кого-то получилось заставить один процесс работать с VIRTUAL SERVERS как это описано в мануале?
Пока только два варианта вижу:
1) в init-скрипте перед запуском каждого демона редактировать юзера «ftp», меняя ему HOME в /etc/passwd
2) модифицировать исходник так, чтобы демон читал в getpwnam() переменную командной строки.
upd. Я ошибся — getpwnam(«ftp») вызывается каждый раз при новом коннекте к серверу. Просто я не закрывал браузер (не рвал сессию) — это ввело меня в заблуждение. Исходники я не понял.
Кстати, комментарии в исходниках этого чуда отсутствуют как класс.
Ну про модификацию /etc/passwd — это конечно сильно, слов нет.
Я бы посмотрел на другие ftp сервера, у которых есть нужные настройки и возможности. Не уверен на 100%, но в ProFTPD было достаточно много всяких настроек, в том числе и разных виртуалхостов — может это то, что Вам надо?
ProFTPD вполне умеет все, что мне нужно. Просто было лень мигрировать.
Сейчас сделал тот костыль с модификацией домашней директории юзера ftp — вроде работает.
Но выявилось вот что: читается этот юзер 1 раз, при обращении первого клиента. Т.е., после запуска сервера, надо тут же дёргать ftp клиентом (пропишу в init-скрипт).
переменную окружения вставить в rc-скрипт или в inetd скрипт, в зависимости от того, как запускаете. В крайнем случае можно сделать два шелл скрипта, вида:
хм, не понимаю, зачем делать кучу костылей, да еще и несекурных, если проблема же по Вашим же словам решается вполне цивилизованно? («ProFTPD вполне умеет все, что мне нужно. Просто было лень мигрировать.»)
Не очень понятно зачем его как-то особо готовить. У меня куча виртуальных ftp юзеров сидящих каждый в своем chroot-е. Это можно задавать при создании юзера (флаг d).
P.S. Замечание безотносительно начальному топику, только касательно данного комментария.
Так для юзеров самого сервера у меня и так работает chroot, но нужно чтобы по разным ip была своя директория anonymous.
Вы подали мне идею запускать отдельный демон в своем chroot, чтобы тот смотрел другой /etc/passwd на предмет директории юзера ftp. И у меня уже почти получилось настроить это окружение.
Proftpd конечно понтов, позиционируется как апач пира фтп, но вот мне с ним как-то не повезло. Достаточно давно он у меня на фряхе не завелся, да и вообще оставил впечатление громоздкого сервера. Pureftpd же запустился с ходу и сконфигурировать его под требуемую задачу получилось очень быстро. Я к тому, что перед миграцией стоит его немного поюзать с целью оценить личное удобство работы. Ну если это конечно еще не было сделано.
да был у меня опыт и с pure и с pro… pure очень примитивен и не умеет и 20-ой части того, на что способен Pro. Но вот в Pro постоянно дырки находят вроде…