Dies ist eine Lösung mit Bash-Skripts.
Ich gehe davon aus, dass Sie setuid nicht für Skripte verwenden können, wie in dieser U & L-Antwort erläutert . Der Rat darin ist zu verwenden
ein Wrapper, der die Umgebung desinfiziert (z. B.
sudo
mit derenv_reset
Option).
In diesem Beispiel verwende ich /etc/our_secrets.txt
anstelle von data.txt
. Beschränken Sie zunächst den Zugriff auf die Datei:
sudo chown root: /etc/our_secrets.txt sudo chmod 600 /etc/our_secrets.txt
Dann erstellen Sie ein Skript /usr/local/sbin/sget_my_secret
. Dies ist das Skript:
#!/bin/sh exec /bin/grep -w "^$SUDO_USER" /etc/our_secrets.txt
Und seine Berechtigungen:
sudo chown root: /usr/local/sbin/sget_my_secret sudo chmod 744 /usr/local/sbin/sget_my_secret
Jetzt sollten Sie sudo visudo
Ihre sudoers
Datei ausführen und ändern, damit Benutzer sie aufrufen können sudo /usr/local/sbin/sget_my_secret
. Der grundlegendste Weg ist das Hinzufügen
ALL ALL=(ALL) NOPASSWD: /usr/local/sbin/sget_my_secret
in die Datei. Jetzt kann jeder Benutzer laufen sudo sget_my_secret
. Zur Vereinfachung benötigen Sie ein anderes Skript /usr/local/bin/get_my_secret
:
#!/bin/sh exec /usr/bin/sudo /usr/local/sbin/sget_my_secret
Ihre Berechtigungen:
sudo chown root: /usr/local/bin/get_my_secret sudo chmod 755 /usr/local/bin/get_my_secret
In diesem Moment kann jeder Benutzer laufen get_my_secret
, um seine Informationen zu erhalten (falls vorhanden). Das ist, was passiert:
get_my_secret
läuft mit normalen Berechtigungen.- Es versucht zu rennen
sudo /usr/local/sbin/sget_my_secret
. sudoers
Datei sagt, dass es das kann.sget_my_secret
wird mit erhöhten Berechtigungen ausgeführt.- Erhöht
grep
die Datei.
Sicherheitshinweise:
- In meinem Debian ist die erwähnte
env_reset
Option standardmäßig aktiviert. - Sie können diese
ALL ALL=(ALL) ...
Zeile durch eine restriktivere ersetzen . - In den Skripten verwende ich volle Pfade, wo immer ich kann.
- Jeder, der
sget_my_secret
mit Spoofing laufen$SUDO_USER
kann, kann das Geheimnis eines anderen abrufen. Ich denke, wenn Sie das können, können Sie auchour_secrets.txt
direkt lesen . - Sie denken vielleicht, Sie könnten Benutzern die Ausführung erlauben
sudo grep
. aber dies würde siegrep
für alles in jeder Datei erlauben ! Essget_my_secret
geht darum, nur diese spezielle ausführbare Datei in diesudoers
Datei aufzunehmen.