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,…“)
 
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
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>
  
 
=Kompiliere dieses Programm (nehmen wir an, es heißt readlogs):=
 
=Kompiliere dieses Programm (nehmen wir an, es heißt readlogs):=
 
 
*gcc readlogs.c -o readlogs
 
*gcc readlogs.c -o readlogs
 +
=Oder hier runterladen=
 +
;Als root
 +
*cd /usr/local/bin
 +
*wget https://xinux.de/downloads/readlogs
 +
*chmod +x readlogs
  
 
=Festlegen der Capability=  
 
=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.
 
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
 
*sudo setcap cap_dac_read_search+ep ./readlogs
 +
==cap_dac_read_search==
 +
cap_dac_read_search ist eine Linux-Capability, die es dem Prozess erlaubt, den Zugriff auf Dateien und Verzeichnisse zu umgehen, die durch die traditionellen Dateizugriffsrechte (Discretionary Access Control, DAC) geschützt sind. Wenn ein Programm diese Capability besitzt, kann es beispielsweise Verzeichnisse lesen und nach Dateien suchen, selbst wenn die Dateisystemberechtigungen dies normalerweise nicht erlauben würden. Das ist besonders nützlich für Programme, die auf Systemdateien oder Benutzerdateien zugreifen müssen, ohne als Root ausgeführt zu werden.
 +
==+ep==
 +
Das +ep ist eine Anweisung, die angibt, wie die Capability angewendet wird:
 +
*e steht für "effective". Das bedeutet, dass die Capability sofort wirksam (effective) ist, wenn das Programm ausgeführt wird. Das ist notwendig für Capabilities, die vom Programm genutzt werden sollen, um ihre beabsichtigte Funktion auszuführen.
 +
*p steht für "permitted". Das erlaubt es dem Programm, diese Capability zu nutzen, wenn es ausgeführt wird. Es setzt also die erlaubte Capability-Liste des Prozesses auf diese Capability.

Aktuelle Version vom 14. Mai 2024, 15:27 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

Oder hier runterladen

Als root

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

cap_dac_read_search

cap_dac_read_search ist eine Linux-Capability, die es dem Prozess erlaubt, den Zugriff auf Dateien und Verzeichnisse zu umgehen, die durch die traditionellen Dateizugriffsrechte (Discretionary Access Control, DAC) geschützt sind. Wenn ein Programm diese Capability besitzt, kann es beispielsweise Verzeichnisse lesen und nach Dateien suchen, selbst wenn die Dateisystemberechtigungen dies normalerweise nicht erlauben würden. Das ist besonders nützlich für Programme, die auf Systemdateien oder Benutzerdateien zugreifen müssen, ohne als Root ausgeführt zu werden.

+ep

Das +ep ist eine Anweisung, die angibt, wie die Capability angewendet wird:

  • e steht für "effective". Das bedeutet, dass die Capability sofort wirksam (effective) ist, wenn das Programm ausgeführt wird. Das ist notwendig für Capabilities, die vom Programm genutzt werden sollen, um ihre beabsichtigte Funktion auszuführen.
  • p steht für "permitted". Das erlaubt es dem Programm, diese Capability zu nutzen, wenn es ausgeführt wird. Es setzt also die erlaubte Capability-Liste des Prozesses auf diese Capability.