Capabilities Beispiel readlogs

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Erstelle ein einfaches Programm

Wir erstellen ein einfaches C-Programm oder ein Skript, das versucht, eine Systemlog-Datei zu lesen, z.B. /var/log/messages, die normalerweise auf vielen Systemen beschränkt ist.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    FILE *fp;
    char ch;

    // Überprüfen, ob das Programm mit einem Dateipfad als Argument aufgerufen wurde
    if (argc != 2) {
        fprintf(stderr, "Usage: %s <file_path>\n", argv[0]);
        return EXIT_FAILURE;
    }

    // Versuch, die Datei zu öffnen
    fp = fopen(argv[1], "r");
    if (fp == NULL) {
        perror("Error opening file");
        return EXIT_FAILURE;
    }

    // Dateiinhalt ausgeben
    while((ch = fgetc(fp)) != EOF) {
        putchar(ch);
    }

    // Datei schließen
    fclose(fp);
    return 0;
}

Kompiliere dieses Programm (nehmen wir an, es heißt readlogs):

  • gcc readlogs.c -o readlogs

Oder hier runterladen

Festlegen der Capability

Setze die cap_dac_read_search Capability auf das Programm, um ihm zu erlauben, auf Dateien zuzugreifen, zu denen es normalerweise keinen Zugang hat.

  • sudo setcap cap_dac_read_search+ep ./readlogs