LINUX.ORG.RU

Понижение прав демона


0

1

Доброго дня!
Исходные данные
система на основе busybox v1.18.4, демон запускается при старте системы и понижает свои права
стартовый скрипт системы

...................
for i in etc/rcS.d/S**; do                                                    
    $i start                                                
done
.................
etc/rcS.d
lrwxrwxrwx    1 1000     1000            22 Oct 28  2011 S10monitor -> ../init.d/monitor.sh
lrwxrwxrwx    1 1000     1000            22 Oct 28  2011 S40httpd -> ../init.d/minihttpd.sh
lrwxrwxrwx    1 1000     1000            19 Oct 28  2011 S45telnet -> ../init.d/telnet.sh
команда запуска демона
PID=/var/run/monitd.pid                                                                     
DAEMON=monitd                                                                                   
CONFIG=/etc/monitor
USER=monitor

start()
{
        start-stop-daemon --quiet --pidfile $PID --background \      
                -S --exec $DAEMON -- --config $CONFIG --user $USER             
}
функция понижения прав
int8_t drop_root(const char *user)
{
	struct passwd *pwd = NULL;

	if (NULL == (pwd = getpwnam(user)))
		return -1;

	if (setgid(pwd->pw_gid) || setuid(pwd->pw_uid))
		return -1;

	return 0;
}

Проблема
демон monitor не стартует при старте системы, порядок запуска не влияет на поведение
если отключить понижение прав - стартует нормально, при запуске руками - стартует нормально с понижением прав
Вопрос
как необходимо организовать понижение прав демона что бы он стартовал вместе с системой?

Спасибо.

★★

Вывод: демон запускается но падает. Значит проблема в коде который не выводит отладочную информацию.

true_admin ★★★★★
()
Ответ на: комментарий от imb

> Ну а если понадобится ещё «поджать» систему и будет выкинут start_stop_daemon?

тогда придется разобраться, в чем дело. глазами что-то не видать. есть возможность запустить strace? должно сразу помочь.

anonymous
()
Ответ на: комментарий от imb

Почему же он тогда нормально стартует если я его запускаю?

посмотри в логах что не так.

true_admin ★★★★★
()

судя по скрипту он запускается с правами юзера monitor, а он вероятно не может устанавливать uid и gid. а когда руками, то наверное от рута запускаете и все работает.

s0L
()

а еще надо юзать seteuid и setegid

s0L
()
Ответ на: комментарий от s0L

Нет, демон всегда стартует от root-а, но в командной строке ему передаётся до какого пользователя ему надо понизиться.
P.S. Как то криво звучит.

imb ★★
() автор топика
Ответ на: комментарий от imb

Это то, что нужно использовать вместо return -1. Возможно, укажет на ошибку.

Еще стоит без start-stop-daemon поотлаживать.

unsigned ★★★★
()

нахера два раза понижать права?
1) start-stop-daemon ... --user $USER
2) int8_t drop_root(const char *user)

когда запускаешь руками, срабатывает только вариант N2;
когда запускает система при старте, работают оба варианта, соответственно второй раз, видимо, возникает ошибка в setgid() или setuid()

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.