У меня есть процесс с разрешениями 4750. В моей системе Linux есть два пользователя. Пользователь root и пользователь appz. Процесс наследует разрешения диспетчера процессов, который работает как пользователь «appz».правильный способ запускать программы setuid в C
У меня есть две основные процедуры:
void do_root (void)
{
int status;
status = seteuid (euid);
if (status < 0) {
exit (status);
}
}
/* undo root permissions */
void undo_root (void)
{
int status;
status = seteuid (ruid);
if (status < 0) {
exit (status);
}
status = setuid(ruid);
if (status < 0) {
exit (status);
}
}
Мой поток следующее:
int main() {
undo_root();
do some stuff;
do_root();
bind(port 80); //needs root perm
undo_root();
while(1) {
accept commads()
if (commands needs root user access)
{
do_root();
execute();
undo_root();
}
}
Как вы можете видеть, что я хочу, чтобы выполнить некоторые команды, как корень. Я пытаюсь временно удалить разрешения, и если задачам нужен доступ с правами root, я завершаю команду между вызовом do_root и undo_root.
Однако, похоже, что моя программа не работает.
Что такое канонический способ сделать это?
Вместо того, чтобы просто выйти из строя при сбое seteuid, вызовите функцию perror() и ваша программа расскажет вам, почему она терпит неудачу. –
Как только вы отбросите права root, вы не сможете их вернуть! – Petesh
Технически это файл с программой, которая имеет разрешение 4750, а не процесс. Вы прямо не говорите, что разрешения «root: group: 4750' - это безопасный вывод? –