Доброго дня!
Есть демон работающий с глобальным конфигурационным файлом, другие программы через него получаю и изменяют параметры, демон работает под непривелигированным аккаунтом.
Но есть необходимость при изменении ряда параметров переапускать ряд сервисов, для примера 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: Поток с другими правами
А почему именно поток? Отдельный процесс не подойдёт?
Насколько я понимаю, все потоки одного процесса работают с правами, заданными для процесса.
Насколько я понимаю, все потоки одного процесса работают с правами, заданными для процесса.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
IMB
- Сообщения: 2567
- ОС: Debian
Re: Поток с другими правами
Если это будет отдельный процесс чем тогда эта схема будет отличаться от текущей с inotify? Правда появляется то удобство. что нового демона буду писать сам и тогда уж точно не забуду его скомпилировать, но его придётся запускать с root-правами, что не очень эстетично.
Если все потоки работаю с правами запустившего их, то я могу запустить этот поток до понижения прав всей программы.
Если все потоки работаю с правами запустившего их, то я могу запустить этот поток до понижения прав всей программы.
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: Поток с другими правами
Ну в любом случае вы не сможете породить из потока, имеющего права юзера, поток, имеющий рутовые права. Права можно только понижать, но не повышать.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
IMB
- Сообщения: 2567
- ОС: Debian
Re: Поток с другими правами
Ну для потока мне это и не требуется.
А по поводу повышения прав мне кажется Вы не совсем правы - сейчас программа, пока без потоков, работает как раз с понижением, а перед выходом с повышением прав. Программа запускается с root-правами, создаёт всю необходимую инфрастуктуру, например PID-файл, после этого использую seteuid и setegid права понижаются, перед завершением права повышаются используя setuid, надо для того что бы удалить PID-файл из /var/run.
А по поводу повышения прав мне кажется Вы не совсем правы - сейчас программа, пока без потоков, работает как раз с понижением, а перед выходом с повышением прав. Программа запускается с root-правами, создаёт всю необходимую инфрастуктуру, например PID-файл, после этого использую seteuid и setegid права понижаются, перед завершением права повышаются используя setuid, надо для того что бы удалить PID-файл из /var/run.
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: Поток с другими правами
Ну это благодаря тому, что у вас изначально права root. man setuid, man seteuid, там всё расписано. Если вы запускаетесь не как рут, то рутовых прав вам не видать.
Да, ещё: что у вас там за потоки? pthreads? man 7 pthreads:
Да, ещё: что у вас там за потоки? 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
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Поток с другими правами
что за ерунда??
Процесс может попродить другой процесс ТОЛЬКО от своего имени. ЛЮБОЙ, кроме процесса root'а.
Есть конечно и исключение - запуск файла с установленным SUID битом. Вот такой процесс будет работать от имени владельца файла.
и как изменить, не подскажите?