Vermeiden, dass Benutzer ein Skript beschädigen und verwenden


1

Ist es möglich, das Recht zum Kopieren von Dateien zu verweigern?

Ich habe ein Skript, das von anderen ausführbar sein sollte. Sie dürfen die Datei auch lesen (obwohl es kein Problem wäre, das Lesen zu verbieten). Ich möchte aber nicht, dass das Skript geändert und ausgeführt wird.

Es ist kein Problem, diese Berechtigungen festzulegen, aber man kann das Skript leicht kopieren, ändern und ausführen. Kann das überhaupt vermieden werden?

Das Betriebssystem ist Red Hat Enterprise Linux Workstation Version 6.2 (Santiago).


Reset Sie die Zugriffsrechte auf die Datei und nur setzen Sie sie auf +rxoder +xfür den Benutzer (oder Gruppe) , die es durch ausführen kannchmod '+rx' <user or group> '<exec file>'
arielnmz

Welches Betriebssystem? Es hängt wirklich vom Betriebssystem ab, ob Sie nur ausführbare Skripte haben können
Rich Homolka

@arielnmz Beispiel: script.sh von Benutzer1 mit Berechtigungen -rwxr-x---kann nicht von mir geändert werden. Wenn ich es kopiere (und daher der Besitzer dieser Kopie bin), kann ich es später schreiben und ausführen ... @RichHomolka Bearbeitet die Frage
EverythingRightPlace

Entfernen Sie dann einfach das Berechtigungsbit r aus der Datei, damit sie nicht kopiert werden kann.
Arielnmz

Antworten:


2

Sie können dafür sudo verwenden.

Sie können Ihren Benutzern erlauben, Ihr Skript und nur dieses Skript zu bearbeiten.

Schritt für Schritt:

  1. Erstellen Sie das Systemkonto "executor_account" (Sie können einen beliebigen Namen verwenden) und geben Sie ihm Berechtigungen für Ihr Skript. Verwenden Sie dafür kein Root-Konto.

  2. Konfigurieren Sie sudo.

    Sie müssen lernen, wie man sudo benutzt und Ihren Benutzern erlauben, "sudo executor_account myscript.sh" zu erstellen und sonst nichts. Es ist möglich, dass sie Dateien ausführen, die sie nicht ausführen können. Ich bin kein Linux-Experte, ich werde dies nicht erklären, aber Sie können überall viele Tutorials über sudo finden.

Ich denke, das ist die einzige Möglichkeit, dem Benutzer das Ausführen von Dateien zu ermöglichen, die er nicht lesen kann.

Das Skript wird von einem anderen Benutzerkonto ausgeführt, sodass alle "Produkte" des Skripts (Protokolle usw.) dem von Ihnen erstellten speziellen Konto gehören. Man muss damit irgendwie umgehen, wenn ein Skript oder ein Programm, das von einem Skript ausgeführt wird, einige Dateien erzeugt.


1

Nein, mit Linux-Dateiberechtigungen ist dies nicht möglich. Benutzer müssen das Shell-Skript lesen können, um es ausführen zu können. Dies bedeutet, dass sie eine Kopie erstellen, ändern und ausführen können.


1

Das ist ein bisschen kompliziert, aber - schreiben Sie ein C-Programm, das so aussieht:

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

    ︙

        DATEI * sh;

        sh = popen ("/ bin / sh", "w");            // Verwenden Sie "/ bin / bash", wenn Sie müssen.
        if (sh == (FILE *) NULL) {
                perror ("popen");
                Ausfahrt (1);
        }
                                        <-------- Füge hier Magie ein.
        fclose (sh);

An der " Insert Magie hier. Geben Sie den Code ein, in den das Skript geschrieben werden soll sh. zum Beispiel,

        fprintf(sh, "for x in red blue green\n");
        fprintf(sh, "do\n");
        fprintf(sh, "        echo x = \"$x\"\n");
        fprintf(sh, "done\n");

Wenn es mehr als nur ein paar Zeilen sind, kann es einfacher sein, es als String-Array zu speichern. Kompilieren Sie dann dieses Programm und lassen Sie die Binärdatei nur ausführen (z. B. Modus 710 oder 711).

Keine Lösung ist narrensicher, da Benutzer sehen können, welche Befehle psin einem anderen Fenster ausgeführt werden. Dies gibt ihnen jedoch nur fragmentarische Einblicke in das Skript.

Wenn die Logik Ihres Skripts sehr sensibel ist, besteht die eigentliche Antwort natürlich darin, es in eine kompilierbare Sprache zu übersetzen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.