Установка FTP сервера с переназначаемым корневым каталогом (chrooted FTP server)
Это раздел вставлен Marcus J Ranum <mjr@tis.com>
Пререкомпилируйте ваш ftpd без использования динамических библиотек и
попестите его в каталог ~ftp/bin. Влажельцем должен быть root.
Скомпилируйте без использования динамических библиотек программу ls и
поместите ее тоже в каталог ~ftp/bin. Для Sun, можно использовать портированную
из BSD версию комманы ls. Ее можно найти на
ftp://ftp.tis.com/pub/firewalls/toolkit/patches/ls.tar.Z Владельцем для ls
должет быть root.
Владельцем для каталога ~ftp сделайте root и права доступа установите в 0755
(ЭТО ОЧЕНЬ ВАЖНО!)
Создайте копии файлов ~ftp/etc/passwd и ~ftp/etc/group (незабудьте убрать
пароли), владельцем должен быть root.
Создайте программу враппер ("wrapper") (один из вариантов приведен
ниже) и пропишите ее в /etc/inetd.conf
/*
** Программа подразумевает, что вы выбрати в катестве базоваго
каталога /var/ftp
** Если у вас другой каталог, то замените во всем
тексте /var/ftp на полный путь
** к выбранному вами каталогу
**
Прим: Не используйте для ftp катагог '/'
(корневой)!
*/
main()
{
if(chdir("/var/ftp"))
{
perror("chdir
/var/ftp");
exit(1);
}
if(chroot("/var/ftp"))
{
perror("chroot
/var/ftp");
exit(1);
}
/* optional:
seteuid(FTPUID);
*/
execl("/bin/ftpd","ftpd","-l",(char
*)0);
perror("exec
/bin/ftpd");
exit(1);
}
Options:
Вы можете использовать 'netacl' из toolkit или tcp_wrappers для достижения
такого же эффекта.
Также вы можете в исходных текстах ftpd найти все места где вфзфвается ф-ция
seteuid() убрать эти вызовы, и в программе "враппере" вставить вызов
setuid(ftp) перед вызовом ftpd. Это предотвратит возможность подучения root
привелегий, если в вашем ftpd будет найдена "дырка".
Проследите, что бы во всей иерархии каталогов на FTP сервере были правильно
устаеовленны права доступа и владельцы файлов, и никогда не размещайте на FTP
исполняемые файлы (с установленным флагом executed).
Теперь файл ~/dtp/etc/passwd полностью отдельный и независимый от системного
файла /etc/passwd.
ЗАПОМНИТЕ:
Если через ваш ftpd кто то сможет получить привелегии "root" то это
может закончиться очень печально. В связи с этим очень хорошей рекомендацией
является следующее - старайтесь не запускать "демонов" от пользователя
root. Многие так стартуют, но не всем им нужны root'овые привелегии. Вы можете
проверить с какимы правами работают программы с помощью комманды 'ps
uax'