Некий демон запускается и понижает свои привилегии, для понижения привилегий используется следующая функция:
Код: Выделить всё
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;
}
Всё замечательно работает, но есть одно но - в данном режиме, т.е. с понижением привилегий, демон не стартует автоматически при старте системы. Если руками выполнить стартовый скрипт - демон стартует. Для запуска используется следующая команды:
Код: Выделить всё
start-stop-daemon --quiet --pidfile $PID --background \
-S --exec $DAEMON -- --config $CONFIG --user $USER
Работа ведётся в busybox, что, возможно, оказывает подобной эффект.
Вопрос - как правильно понижать привилегии демона, что бы он мог корректно стартовать при старте системы?