
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 sudoers
die 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
kill
ist einIntegrierter Shell-Befehl(prüfen Sie es mittype kill
). Wenn Sie Benutzern die Verwendung von ermöglichen,shell
werden Sie leider keine Möglichkeit finden, die Verwendung von zu vermeidenkill
(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
read
einemexecution
Attribut 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
execution
Attribut nur auf den Eigentümer und seine Gruppe beschränkensudo 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/nologin
asshell
) 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 mitsudo -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,
root
sollte es nicht so sicher sein …
Verweise: