The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

chroot-в-chroot (chroot patch)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: chroot, patch,  (найти похожие документы)
_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _ From : Vitaly E.Lavrov 2:5030/580 08 Apr 99 11:09:28 Subj : chroot-в-chroot ________________________________________________________________________________ From: "Vitaly E.Lavrov" <lve@cit.aanet.ru> Alex Korchmar <Alex.Korchmar@f28.n5020.z2.fidonet.org> wrote: > Solar Designer <solar@cannabis.dataforce.net> wrote: > SD> нужен именно root (в wu.ftpd он, конечно, и есть), тогда как для ptrace > SD> достаточно, чтобы вне chroot'а было что-то под тем же UID'ом (правда, > т.е. на самом-то деле нужен опять root, поскольку все не-рутовые демоны > норовят (и в том числе по этой причине) запускать от специального юзера, > а не от одного nobody на всю систему. > SD> А так, да, года два назад я о возможности chroot-в-chroot не подумал. > SD> (Прямо "cd ..", как ты сказал, при правильно поставленном chroot'е, > я, естественно, пошутил. > Исправлять-то этот маразм кто-нибудь собирается? Я у себя такую заплатку поставил.Идея такова - из указанного fd должен быть доступен корень процесса. Hу и если после chroot() cwd указывает не туда куда надо, то его насильно устанавливают == root --------------- - --- linux-2.2.1/fs/open.c Mon Mar 1 22:16:36 1999 +++ linux-2.2.3/fs/open.c Mon Mar 29 22:40:09 1999 @@ -364,7 +364,10 @@ goto out_putf; if (!(inode = dentry->d_inode)) goto out_putf; - + if(d_rootpath(dentry)) { + error = -EBADF; + goto out_putf; + } error = -ENOTDIR; if (!S_ISDIR(inode->i_mode)) goto out_putf; @@ -414,7 +417,12 @@ current->fs->root = dentry; dentry = tmp; error = 0; - + if (d_rootpath(current->fs->pwd)) { + struct dentry *tmp1 = current->fs->pwd; + current->fs->pwd = dget(current->fs->root); + dput(tmp1); + printk(__FUNCTION__":pid %d: pwd not valid!\n",current->pid); + } dput_and_out: dput(dentry); out: - --- linux1/fs/dcache.c Sun Jan 31 00:48:28 1999 +++ linux/fs/dcache.c Mon Mar 29 20:46:56 1999 @@ -787,6 +788,27 @@ dentry = parent; } return retval; +} +int d_rootpath(struct dentry *dentry) +{ + struct dentry * root = current->fs->root; + + if (dentry->d_parent != dentry && list_empty(&dentry->d_hash)) { + return 1; + } + + for (;;) { + struct dentry * parent; + + if (dentry == root) + return 0; + dentry = dentry->d_covers; + parent = dentry->d_parent; + if (dentry == parent) + return 1; + dentry = parent; + } + return 1; } /* - --- linux1/include/linux/dcache.h Sun Jan 31 00:47:53 1999 +++ linux/include/linux/dcache.h Mon Mar 29 20:46:40 1999 @@ -175,6 +175,7 @@ /* write full pathname into buffer and return start of pathname */ extern char * d_path(struct dentry * entry, char * buf, int buflen); +extern int d_rootpath(struct dentry * entry); /* Allocation counts.. */ static __inline__ struct dentry * dget(struct dentry *dentry) ------------------- Виталий . --- ifmail v.2.14 * Origin: SPb State University of Aerospace Instrumentati (2:5030/580@fidonet)

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру