LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Кажется я всё-таки нашёл способ, и он довольно на поверхности. Есть такое fexecve(), которым можно запускать бинарник по его открытому дескриптору, а не по имени файла. Придётся таскать с собой этот самый дескриптор везде, но вроде (если его не открывать с правом на запись) вреда от его утекания в злонамеренный контекст никакого не будет. Есть ограничения:

1) не работает на старых системах

Если Linux то нужно Linux 3.19+ и glibc 2.27+ (с более ранними его либо не будет, либо под этим названием будет неприемлемый костыль через /proc). Если FreeBSD то 8.0+. Другие системы не смотрел.

2) для скриптов не годится (там опять костыль с /proc только уже неисправимый), но это пофиг, речь же про бинарник

3) видимо гарантированную исправную работу можно получить только если бинарник статический, иначе в каком-нить chroot-е можно не найти нужные библиотеки, или найти не те, или вообще не найти динамический загрузчик если например хост 64 бита и контекст куда мы попали - 32.

Думаю это проще чем таскать с собой чистый форк везде.

Исходная версия firkax, :

Кажется я всё-таки нашёл способ, и он довольно на поверхности. Есть такое fexecve(), которым можно запускать бинарник по его открытому дескриптору, а не по имени файла. Придётся таскать с собой этот самый дескриптор везде, но вроде (если его не открывать с правом на запись) вреда от его утекания в злонамеренный контекст никакого не будет. Есть ограничения:

1) не работает на старых системах

Если Linux то нужно Linux 3.19+ и glibc 2.27+ (с более ранними его либо не будет, либо под этим названием будет неприемлемый костыль через /proc). Если FreeBSD то 8.0+. Другие системы не смотрел.

2) для скриптов не годится (там опять костыль с /proc только уже неисправимый), но это пофиг, речь же про бинарник

3) видимо гарантированную исправную работу можно получить только если бинарник статический, иначе в каком-нить chroot-е можно не найти нужные библиотеки, или найти не те, или вообще не найти динамический загрузчик если например хост 64 бита и контекст куда мы попали - 32. на старых линуксах/glibc он либо не работает, либо сделан не годящимся костылём в glibc - нужно linux 3.19+ и glibc 2.27+