Wie mache ich es so, dass eine Datei nur von root ausgeführt werden kann, aber nicht als root?

7

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.


quelle
Wenn es sowieso funktionieren würde, "Benutzer mit Root-Rechten" auf "Benutzer in der Sudo-Gruppe" zu beschränken, wäre das ziemlich einfach, sonst wäre es ziemlich kompliziert
kos
@kos: Es müssten Benutzer mit Root-Rechten sein.
@kos: Auf welche Weise kompliziert?
Könnten Sie eine neue Gruppe speziell für die Benutzer erstellen, die diese Anwendung ausführen möchten, diese Benutzer hinzufügen und dann die Gruppenberechtigungen für die Anwendung ändern?
@HeatherBrown: Ich würde es vorziehen, keine anderen Benutzer oder Gruppen zu erstellen.

Antworten:

7

Versuchen Sie es mit setuiddem Paket super. sudo apt-get install superErstellen Sie dann ein Shell-Skript, das nur als Root ausgeführt werden kann. Lassen Sie dieses Shell-Skript nur einen Befehl ausführen:

#!/bin/sh
setuid $ORIG_USER applicationcommand
exit 0

Legen Sie dann für jeden Benutzer einen Alias ​​fest, der applicationcommandauf das Shell-Skript verweist, das Sie durch Hinzufügen zu jeder ihrer .bashrcDateien erstellt haben:

alias applicationcommand="sh /path/to/shell/script"

Alternativ oder zusätzlich zum Erstellen einer können aliasSie die .desktopDatei der Anwendung bearbeiten, die Sie ausführen möchten, vorausgesetzt, Ihre Anwendungen .desktopverfü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 .desktopDatei), so dass die Exec=Zeile sh /path/to/shell/scriptdahinter steht, oder den Namen des Alias, wenn Sie sich dazu entschlossen haben, diesen zu erstellen. Sie finden .desktopDateien in /usr/share/applicationsund ~/.local/share/applications.


quelle
setuid(2)ist ein Systemaufruf, keine eigenständige ausführbare Datei. chmodUm das Setuid-Bit zu setzen, das Sie verwenden können . Ich verstehe auch nicht, was das Setuid-Bit hier tut. Bitte klären Sie.
Heemayl
setuidHier wird die UID für den Befehl applicationcommandauf die UID des ursprünglichen Benutzers gesetzt. Meine Quelle ist hier
@heemayl setuid ist in diesem Fall eine vom Paket bereitgestellte ausführbare Datei super. Ich vermute, es setzt setuid (2) und gibt dann den gewünschten Befehl aus oder führt ihn aus.
Nanofarad
8

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) :

sudo chgrp sudo /usr/bin/applicationcommand
sudo chmod 750 /usr/bin/applicationcommand

? Wenn die Benutzer verwenden können sudo, bedeutet dies, dass (2) sie in der sudoGruppe sind; Mit den obigen Befehlen kann die applicationcommandDatei nur für Mitglieder der sudoGruppe 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:

  1. Erstelle eine Gruppe, nenne sie privileged.
  2. sudo chgrp privileged /usr/bin/myappund dann sudo chmod 750 /usr/bin/myapp.
  3. Fügen Sie der Gruppe die Benutzer (nicht privilegiert!) hinzu, mit denen Sie die App ausführen möchtenprivileged

und jetzt wird der Benutzer myappals sein Benutzer ausgeführt, ohne dass sudoBerechtigungen 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. sudokann man sudoersauf zig Millionen Arten fein geschnitten werden (siehe ), daher hängt die Effektivität dieses einfachen Hacks davon ab, wie stark Sie ihn angepasst haben.

Rmano
quelle
1
Dies ist, worüber ich nachgedacht habe, als ich in die Kommentare unter der Frage geschrieben habe, aber während jeder Benutzer in der sudoGruppe tatsächlich Root-Rechte hat (zumindest standardmäßig), ist nicht jeder Benutzer mit Root-Rechten notwendigerweise in der sudoGruppe. Wenn Sie die Ausführung sudotechnisch auf Benutzer in der Gruppe beschränken, werden Benutzer möglicherweise ausgeschlossen. /etc/sudoergibt einen besseren Hinweis darauf, welche Benutzer über Root-Rechte verfügen, schließt jedoch (zum Beispiel) Benutzer aus, die sich über Polkit authentifizieren.
Kos
1
Ich denke auch, dass das Überprüfen auf Root-Berechtigungen basierend darauf, ob der Benutzer in der sudoGruppe ist oder nicht, in den meisten Konfigurationen gut genug ist, aber vielleicht sollte darauf hingewiesen werden?
Kos