[devel] Q: capset after pthread_create (droproot patch for 3proxy)

Sergey Vlasov vsu на altlinux.ru
Пн Июн 8 20:25:57 MSD 2009


On Mon, Jun 08, 2009 at 06:22:37PM +0400, Afanasov Dmitry wrote:
> как я понимаю, capset после pthread_create проставит capabilities только
> для текущего треда, так?

Да, именно так.  Упоминающийся в man capset параметр pid использовать
нельзя - в свежих версиях ядер он заблокирован окончательно;
допускается изменение только собственных параметров.

> вопрос: как постфактум проставить для всех порожденных тредов?

Только каким-то образом обеспечить вызов capset() во всех потоках, для
которых это необходимо (впрочем, при выполнении clone() при вызовах
pthread_create() результат capset() будет наследоваться; это не
работало в древней реализации Linuxthreads, где вызовы clone()
выполнялись в контексте отдельного потока "thread manager").

> если никак, то придется drop_root вписывать в пяток лишних файлов.

При вписывании следует учитывать, что функции set*id(), реализованные
в glibc, действуют на весь процесс (несмотря на то, что используемые
ими системные вызовы также меняют состояние только текущего потока).
Внутри glibc это реализовано передачей всем потокам зарезервированного
для этой цели сигнала, в обработчике которого выполняется запрошенный
системный вызов; функция __nptl_setxid() после рассылки сигналов всем
прочим потокам ожидает завершения их обработки, после чего выполняет
системный вызов set*id() для собственного потока.  Поэтому при наличии
в процедуре сброса привилегий вызовов set*id() следует аккуратно
синхронизировать инициализацию (иначе можно получить либо ложную
ошибку при повторном вызове set*id(), либо невозможность выполнения
других необходимых операций из-за слишком раннего выполнения set*id()
в другом потоке).
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 197 байтов
Описание: Digital signature
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20090608/b76e9144/attachment.bin>


Подробная информация о списке рассылки Devel