Es gibt bestimmte Anwendungen, die nicht geöffnet werden sollen, es sei denn, sie verfügen über Root-Rechte. Ich möchte den Programmen jedoch keine Root-Rechte erteilen. Wie kann ich also festlegen, dass nur root bestimmte Anwendungen ausführen kann, die Anwendungen jedoch nicht als root ausgeführt werden (ich möchte aus Sicherheitsgründen nicht, dass sie ausgeführt werden)? Ich verwende Ubuntu GNOME 15.04 mit GNOME Shell und GNOME 3.16.
7
Antworten:
Versuchen Sie es mit
setuid
dem Paketsuper
.sudo apt-get install super
Erstellen Sie dann ein Shell-Skript, das nur als Root ausgeführt werden kann. Lassen Sie dieses Shell-Skript nur einen Befehl ausführen:Legen Sie dann für jeden Benutzer einen Alias fest, der
applicationcommand
auf das Shell-Skript verweist, das Sie durch Hinzufügen zu jeder ihrer.bashrc
Dateien erstellt haben:Alternativ oder zusätzlich zum Erstellen einer können
alias
Sie die.desktop
Datei der Anwendung bearbeiten, die Sie ausführen möchten, vorausgesetzt, Ihre Anwendungen.desktop
verfügen über eine Datei (wenn es sich nicht um eine Anwendung handelt, die in der GUI ausgeführt wird, sondern um die CLI, die wahrscheinlich nicht vorhanden ist eine.desktop
Datei), so dass dieExec=
Zeilesh /path/to/shell/script
dahinter steht, oder den Namen des Alias, wenn Sie sich dazu entschlossen haben, diesen zu erstellen. Sie finden.desktop
Dateien in/usr/share/applications
und~/.local/share/applications
.quelle
setuid(2)
ist ein Systemaufruf, keine eigenständige ausführbare Datei.chmod
Um das Setuid-Bit zu setzen, das Sie verwenden können . Ich verstehe auch nicht, was das Setuid-Bit hier tut. Bitte klären Sie.setuid
Hier wird die UID für den Befehlapplicationcommand
auf die UID des ursprünglichen Benutzers gesetzt. Meine Quelle ist hiersuper
. Ich vermute, es setzt setuid (2) und gibt dann den gewünschten Befehl aus oder führt ihn aus.Diese Antwort ist komplementär zu Heathers (die funktionieren wird).
Berücksichtigen Sie zunächst, dass unter Unix (und Linux) alles möglich ist , wenn Root-Berechtigungen verwendet werden können. Im Fall von Heather Antwort wird nichts Ihren Benutzer davon abhalten, nur
sudo /usr/bin/applicationcommand
(mit ein bisschen Suche nach dem wirklichen Pfad oder was auch immer). Aber ich nehme an, das ist okay für dich.Warum in diesem Fall nicht einfach (1) :
? Wenn die Benutzer verwenden können
sudo
, bedeutet dies, dass (2) sie in dersudo
Gruppe sind; Mit den obigen Befehlen kann dieapplicationcommand
Datei nur für Mitglieder dersudo
Gruppe gelesen / ausgeführt werden . Wenn sie es jedoch ausführen, führen sie es wie jeden anderen Befehl als ihren tatsächlichen Benutzer aus.Die "klassische" Unix-Lösung lautet jedoch:
privileged
.sudo chgrp privileged /usr/bin/myapp
und dannsudo chmod 750 /usr/bin/myapp
.privileged
und jetzt wird der Benutzer
myapp
als sein Benutzer ausgeführt, ohne dasssudo
Berechtigungen erforderlich sind .Beachten Sie, dass Sie den Set-UID-Mechanismus in Kombination mit den oben genannten Techniken verwenden können , wenn die Anwendung als anderer Benutzer ausgeführt werden soll.
Fußnoten:
(1) : Beachten Sie, dass Sie dies nicht tun können, wenn die Anwendung ein Set-Gid-Flag hat (dies passiert beispielsweise bei einigen Mailern). Überprüfen Sie dies, bevor Sie die Gruppe der Binärdatei ändern.
(2) : in den meisten Konfigurationen.
sudo
kannman sudoers
auf zig Millionen Arten fein geschnitten werden (siehe ), daher hängt die Effektivität dieses einfachen Hacks davon ab, wie stark Sie ihn angepasst haben.quelle
sudo
Gruppe tatsächlich Root-Rechte hat (zumindest standardmäßig), ist nicht jeder Benutzer mit Root-Rechten notwendigerweise in dersudo
Gruppe. Wenn Sie die Ausführungsudo
technisch auf Benutzer in der Gruppe beschränken, werden Benutzer möglicherweise ausgeschlossen./etc/sudoer
gibt einen besseren Hinweis darauf, welche Benutzer über Root-Rechte verfügen, schließt jedoch (zum Beispiel) Benutzer aus, die sich über Polkit authentifizieren.sudo
Gruppe ist oder nicht, in den meisten Konfigurationen gut genug ist, aber vielleicht sollte darauf hingewiesen werden?