So gewähren Sie einer Gruppe Ausführungszugriff auf einen bestimmten Befehlssatz und einer anderen Gruppe einen anderen Befehlssatz

So gewähren Sie einer Gruppe Ausführungszugriff auf einen bestimmten Befehlssatz und einer anderen Gruppe einen anderen Befehlssatz

Angenommen, es gibt eine Reihe von Shell-Befehlen {ls, cat, kill}

Ich möchte Benutzern in Gruppe A die Möglichkeit geben, die Befehle {ls, cat} auszuführen. Und Benutzern in Gruppe B die Möglichkeit geben, die Befehle {cat, kill} auszuführen.

Wie geht das, was sind die besten Ansätze?

Ich habe über einige Lösungen nachgedacht, aber sie scheinen nicht 100 % sicher.

Antwort1

Eine Möglichkeit, die Möglichkeit zur Ausführung von Befehlen einzuschränken, ist dieeingeschränkte Schale.
Auszug aus dem Handbuch, in dem steht, dass Folgendes nicht erlaubt ist bzw. nicht durchgeführt werden darf:

Changing directories with the cd builtin.
Setting or unsetting the values of the SHELL, PATH, ENV, or BASH_ENV variables.
Specifying command names containing slashes.
Specifying a filename containing a slash as an argument to the . builtin command.
Specifying a filename containing a slash as an argument to the -p option to the hash builtin command.
Importing function definitions from the shell environment at startup.
Parsing the value of SHELLOPTS from the shell environment at startup.
Redirecting output using the ‘>’, ‘>|’, ‘<>’, ‘>&’, ‘&>’, and ‘>>’ redirection operators.
Using the exec builtin to replace the shell with another command.
Adding or deleting builtin commands with the -f and -d options to the enable builtin.
Using the enable builtin command to enable disabled shell builtins.
Specifying the -p option to the command builtin.
Turning off restricted mode with ‘set +r’ or ‘set +o restricted’. 

Anschließend können Sie einen Link zu dem Befehl hinzufügen, den Sie ausführen möchten.


Vielleicht führt ein anderer Weg zu Ihrem Ziel überdie Verwendung vonsudo.
In Ihrem Fall können Sie sudoersdie Datei (mit visudo) bearbeiten und erhalten etwas Ähnliches wie:

User_Alias     USERS_GROUP_A = joe, mike, cedric
User_Alias     USERS_GROUP_B = jude, zoe, cedric
Cmnd_Alias     COMMANDS_GROUP_A = /bin/ls,    /bin/cat, /usr/bin/zip
Cmnd_Alias     COMMANDS_GROUP_B = /bin/kill,  /bin/cat, /usr/bin/zip

USERS_GROUP_A ALL= COMMANDS_GROUP_A
USERS_GROUP_B ALL= COMMANDS_GROUP_B
# users of the group USERS_GROUP_A may run /bin/ls, /bin/cat, and /usr/bin/zip 
# from any machine (ALL).
# users of the group USERS_GROUP_B may run /bin/kill,/bin/cat and /usr/bin/zip
# from any machine (ALL).

Anmerkungen:

  • Ein Problem im Beispiel: In der Regel killist einIntegrierter Shell-Befehl(prüfen Sie es mit type kill). Wenn Sie Benutzern die Verwendung von ermöglichen, shellwerden Sie leider keine Möglichkeit finden, die Verwendung von zu vermeiden kill(es sei denn, Sie ändern den Quellcode der Shell auf geeignete Weise und kompilieren ihn neu ...).
  • Wenn die Befehle, die Sie für diese Benutzer schließen möchten, mit readeinem executionAttribut für alle (z. B. ls -l /usr/bin/zip) versehen sind

      -rwxr-xr-x 1 root root      188296 Oct 21  2013 /usr/bin/zip
    

    Möglicherweise können Sie einen Workaround verwenden, indem Sie das executionAttribut nur auf den Eigentümer und seine Gruppe beschränken sudo chattr o-x /usr/bin/zip.

      -rwxr-xr-- 1 root root      188296 Oct 21  2013 /usr/bin/zip
    

    Hinzufügen eines neuen Benutzers (z. B.cooluser) zu dieser Gruppe (möglicherweise mit /usr/sbin/nologinas shell) und schreiben Sie die folgenden 2 Zeilen anstelle der entsprechenden oben:

    USERS_GROUP_A ALL=(cooluser) NOPASSWD: COMMANDS_GROUP_A
    USERS_GROUP_B ALL=(cooluser) NOPASSWD: COMMANDS_GROUP_B
    # users of the USERS_GROUP_A may run /bin/ls, /bin/cat and /usr/bin/zip
    # as the user cooluser from any machine (ALL).
    # users of the USERS_GROUP_B may run /bin/kill,/bin/cat and /usr/bin/zip
    # as the user cooluser from any machine (ALL).
    

    Das Schlüsselwort NOPASSWD:ist, die Abfrage des Passworts zu vermeiden.
    Ihre Benutzer können die Befehle ausführen mit

    sudo -u cooluser /usr/bin/zip
    

    Nebenwirkung: Andere Benutzer können diesen Befehl nicht ausführen, sofern Sie sie nicht in die Gruppe des Dateibesitzers aufnehmen … und wenn das der Fall ist, rootsollte es nicht so sicher sein …

Verweise:

verwandte Informationen