ты еще сказал, что он будет работать в фоновом режиме - PullRequest
0 голосов
/ 24 марта 2011
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (int argc, char **argv) {
    char *command;
    if (argc != 2) {
        fprintf (stderr, "Wrong number of arguments\n");
        return 1;
    }
    if ((command = malloc (strlen (argv[1]) + 6)) == NULL) {
        fprintf (stderr, "Could not allocate memory\n");
        return 1;
    }
    strcpy (command, "echo ");
    strcat(command,argv[1]);
    system(command);
    free (command);
    return 0;
}

как пропатчить этот код, чтобы пользователю не давали привилегий, запустив это, я могу получить доступ от имени пользователя root, как отредактировать это, чтобы этого не произошло

Ответы [ 2 ]

3 голосов
/ 24 марта 2011

Позвоните seteuid(2), чтобы удалить привилегии root до вызова system(3).

1 голос
/ 24 марта 2011

Вы должны использовать system()? Самый простой способ избежать проблем безопасности - не вводить пользовательский ввод в system(). В вашем примере, что делает ваш system() звонок, чего вы не можете сделать с простым printf?

Программа ограничена разрешениями учетной записи пользователя, который запускает программу. Запустите программу, используя учетную запись с ограниченным доступом, у которой нет прав на использование sudo, su и т. Д. Создайте «тюрьму», используя chroot , и запустите программу внутри этой тюрьмы как непривилегированный пользователь, чтобы ограничить количество вашей системы, к которой программа имеет доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...