Capabilities Beispiel readlogs: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „=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,…“)
 
Zeile 5: Zeile 5:
 
#include <stdlib.h>
 
#include <stdlib.h>
  
int main() {
+
int main(int argc, char *argv[]) {
 
     FILE *fp;
 
     FILE *fp;
 
     char ch;
 
     char ch;
  
     fp = fopen("/var/log/messages", "r");
+
     // Ü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) {
 
     if (fp == NULL) {
 
         perror("Error opening file");
 
         perror("Error opening file");
Zeile 15: Zeile 22:
 
     }
 
     }
  
     while((ch = fgetc(fp)) != EOF)
+
    // Dateiinhalt ausgeben
 +
     while((ch = fgetc(fp)) != EOF) {
 
         putchar(ch);
 
         putchar(ch);
 +
    }
  
 +
    // Datei schließen
 
     fclose(fp);
 
     fclose(fp);
 
     return 0;
 
     return 0;
 
}
 
}
 +
 
</pre>
 
</pre>
  

Version vom 12. Mai 2024, 13:13 Uhr

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

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