Поток с другими правами

Модератор: Модераторы разделов

IMB
Сообщения: 2567
ОС: Debian

Поток с другими правами

Сообщение IMB »

Доброго дня!
Есть демон работающий с глобальным конфигурационным файлом, другие программы через него получаю и изменяют параметры, демон работает под непривелигированным аккаунтом.
Но есть необходимость при изменении ряда параметров переапускать ряд сервисов, для примера HTTP-сервер mini_httpd для которого в конфигурационном файла хранятся такие параметры как порт HTTP, порт HTTPS и обслуживать или нет HTTPS. Понятно что сам демон не может перезапустить HTTP-сервер через /etc/init.d. Сейчас для для этого используется inotifyd, который при измении файла-флага перезускает HTTP-сервер.
Следить за компилированием inotifyd и фомирвать для него необходимую инфраструкту лень и родилась идея возложить функционал по управлению сервисами на сам демон. А для того, что бы он мог использовать скрипты из /etc/init.d запустить в нём отдельный поток с правами root. Всё это работает на embedded-плате, поэтому организоватать работу через sudo как-то не хочется.
Вопрос - возможно ли запустить в программе поток/и с различными правами доступа или может быть есть более правильный способ организовать подобное взаимодействие?
Спасибо.
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Поток с другими правами

Сообщение Portnov »

А почему именно поток? Отдельный процесс не подойдёт?
Насколько я понимаю, все потоки одного процесса работают с правами, заданными для процесса.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Поток с другими правами

Сообщение IMB »

Если это будет отдельный процесс чем тогда эта схема будет отличаться от текущей с inotify? Правда появляется то удобство. что нового демона буду писать сам и тогда уж точно не забуду его скомпилировать, но его придётся запускать с root-правами, что не очень эстетично.
Если все потоки работаю с правами запустившего их, то я могу запустить этот поток до понижения прав всей программы.
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Поток с другими правами

Сообщение Portnov »

Ну в любом случае вы не сможете породить из потока, имеющего права юзера, поток, имеющий рутовые права. Права можно только понижать, но не повышать.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: Поток с другими правами

Сообщение IMB »

Ну для потока мне это и не требуется.
А по поводу повышения прав мне кажется Вы не совсем правы - сейчас программа, пока без потоков, работает как раз с понижением, а перед выходом с повышением прав. Программа запускается с root-правами, создаёт всю необходимую инфрастуктуру, например PID-файл, после этого использую seteuid и setegid права понижаются, перед завершением права повышаются используя setuid, надо для того что бы удалить PID-файл из /var/run.
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Поток с другими правами

Сообщение Portnov »

Ну это благодаря тому, что у вас изначально права root. man setuid, man seteuid, там всё расписано. Если вы запускаетесь не как рут, то рутовых прав вам не видать.

Да, ещё: что у вас там за потоки? pthreads? man 7 pthreads:

POSIX.1 also requires that threads share a range of other attributes (i.e., these attributes are process-wide rather than per-
thread):

- process ID

- parent process ID

- process group ID and session ID

- controlling terminal

- user and group IDs

- open file descriptors
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Поток с другими правами

Сообщение drBatty »

IMB писал(а):
17.10.2012 15:50
А по поводу повышения прав мне кажется Вы не совсем правы - сейчас программа, пока без потоков, работает как раз с понижением

что за ерунда??
Процесс может попродить другой процесс ТОЛЬКО от своего имени. ЛЮБОЙ, кроме процесса root'а.
Есть конечно и исключение - запуск файла с установленным SUID битом. Вот такой процесс будет работать от имени владельца файла.
Portnov писал(а):
18.10.2012 07:56
Да, ещё: что у вас там за потоки? pthreads? man 7 pthreads:

и как изменить, не подскажите?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: