Ich habe einen Benutzer mit eingeschränktem Zugriff auf das System (dh er ist kein Sudoer). Nennen wir ihn Bob .
Ich habe ein Skript oder eine Binärdatei, der ich als Systemadministrator vertraue und die ich problemlos als Root ausführen kann. Rufen wir das Skript auf get-todays-passphrase.sh
. Die Aufgabe dieses Skripts besteht darin, Daten aus einer "privaten" Datei (die einem anderen Benutzer / einer anderen Gruppe als Bob oder sogar einer Root-Datei gehört) zu lesen /srv/daily-passphrases
und nur eine bestimmte Zeile aus der Datei auszugeben: die Zeile, die dem heutigen Datum entspricht .
Benutzer wie Bob dürfen die Passphrase von morgen nicht kennen, obwohl sie in der Datei aufgeführt ist. Aus diesem Grund ist die Datei /srv/daily-passphrases
durch Unix-Berechtigungen geschützt, sodass Nicht-Root-Benutzer wie Bob nicht direkt auf die Datei zugreifen dürfen. Sie dürfen das get-todays-passphrase.sh
Skript jedoch jederzeit ausführen , wodurch die "gefilterten" Daten zurückgegeben werden.
Zusammenfassend (die TL; DR- Version):
- Bob kann die geschützte Datei nicht lesen
- Das Skript kann die geschützte Datei lesen
- Bob kann jederzeit das Skript ausführen, das die Datei lesen kann
Ist dies innerhalb von Unix-Dateiberechtigungen möglich? Oder wenn Bob ein Skript startet, ist das Skript dann immer dazu verdammt, mit denselben Berechtigungen wie Bob ausgeführt zu werden?
quelle
Vorwort:
Wie in den Kommentaren und aus den in dieser Antwort erläuterten Gründen erwähnt, ignoriert der Linux-Kernel das setuid / setguid- Bit bei der Behandlung eines Skripts. Ich werde Benjamins Antwort nicht duplizieren, sondern das Skript durch ein ausführbares ersetzen , um meine Antwort korrekt zu machen.
Kurze Antwort: Verwenden Sie setgid
Detaillierte Schritte:
sudo chown :readpass thatfile
sudo chmod g=r,o= thatfile
sudo chmod g+s thatfile
Auf diese Weise wird Ihre ausführbare Datei mit den Berechtigungen der besitzenden Gruppe ausgeführt und kann somit die Datei lesen.
quelle
thatfile
mit der Bob mit der Gruppe ausgeführt werden kannreadpass
.