Wie kann ich einem Benutzer erlauben, eine bestimmte Systemdatei zu bearbeiten, die normalerweise auf root beschränkt ist?

8

Ich versuche, /etc/network/interfacesmit einem Benutzer zu schreiben , der keine Root-Rechte hat.

Der Grund dafür, dass Sie darauf schreiben möchten, besteht darin, dass der Benutzer eine statische IP festlegen kann, da ich nur einen Befehlszeilenserver ausführe. Welche Berechtigung muss ich dem Benutzer geben etc/sudoers?

Ich möchte nicht, dass der Benutzer über vollständige Root-Berechtigungen verfügt. Nur die Möglichkeit, diese Datei zu bearbeiten.

Keith
quelle

Antworten:

25

Anstatt zu verwenden sudo, legen Sie einfach eine ACL für die Datei fest:

$ ls -l /var/tmp/foo
-rw-rw---- 1 root root 4 Jul 31 15:26 /var/tmp/foo
$ sudo setfacl -m u:white:rw /var/tmp/foo
$ whoami
white
$ cat /var/tmp/foo
bar

Jetzt gehört die Datei 'root', aber der Benutzer 'white' kann sie lesen und schreiben. Der Benutzer 'weiß' kann jetzt seinen Lieblingseditor verwenden, um die Datei zu bearbeiten.

Jeff White
quelle
Ein bisschen verwirrt. Ist /var/tmp/foo= /etc/network/interfaces? Ich habe noch nie gesehen, was Sie dort sagen wollen. Ich bin ziemlich neu in Linux.
Keith
Es ist nur eine Datei. Sie können jede gewünschte Datei verwenden.
Jeff White
1
Nett. Ich dachte, dass ACLs nur verwendet werden können, um Berechtigungen einzuschränken und nicht zu erteilen - schön zu wissen, dass dies nicht der Fall ist!
Rmano
setfacl: /etc/logrotate.conf: Operation not supported
Scheint
8

Bereiten Sie ein Skript vor, das die gewünschte Bearbeitung ausführt, z. B. ein Skript, das die richtige Datei mit der statischen IP-Adresse schreibt (was in dieses Skript eingefügt werden soll, fällt nicht in den Geltungsbereich dieser Fragen und Antworten). Nennen wir dieses Skript /root/set_static_ip. (1)

Bearbeiten /etc/sudoers(2) (mit visudoist besser, es prüft auf Vernunft, es ist sehr schwierig , ein System mit einer ungültigen Sudoers-Datei wiederherzustellen, sogar unmöglich von Remote (3)) und hinzufügen

user_name_to_authorize ALL=NOPASSWD: /root/set_static_ip 

Jetzt kann dieser Benutzer sudo /root/set_static_ip ohne Kennwort verwenden, und das Skript wird mit allen Berechtigungen ausgeführt. Es ist kein anderer Befehl zulässig.

Wenn Sie möchten, dass der Benutzer eine Datei einfach durch eine beliebige ersetzt, kann das Skript einfach so sein (nennen Sie es /root/unsafe-overwrite-interface).

#! /bin/bash -e
#
cp /tmp/temp-iface.txt /etc/network/interfaces 
exit 0

... und Sie weisen den Benutzer an, zu bearbeiten /tmp/temp-iface.txtund dann auszuführen sudo /root/unsafe-overwrite-interface--- aktivieren Sie es in sudoers wie oben angegeben. Sie können den Benutzer auch zu einer ACL-Liste hinzufügen und ihm eine Schreibberechtigung für die jeweilige Datei erteilen .

Beachten Sie jedoch, dass, wenn Sie den Dateiinhalt nicht auf Sicherheit prüfen , absichtlich oder unbeabsichtigt Chaos auftreten kann .


Fußnoten :

(1) Dieses Skript muss so sicher wie möglich sein. Überprüfen Sie die Eingänge und so weiter. Es wird mit vollen Berechtigungen ausgeführt.

(2) In der modernen Sudo-Installation können Sie eine Datei zum /etc/sudoers.d/Verzeichnis hinzufügen, die besser ist - sie überlebt Updates.

(3) Normalerweise halte ich ein Terminal mit einer Root-Sitzung offen ( sudo -i), wenn ich den Sudoers-Mechanismus ändere, und ein Backup zur Hand.

Rmano
quelle
Das einzige Problem dabei ist, dass die statischen IP-Einstellungen bei Bedarf geändert werden müssen. Mein Verständnis des Skripts, das Sie empfehlen, würde die /etc/network/interfacesDatei grundsätzlich so umschreiben , wie es /root/set_static_ipist. Es sei denn, Sie können ein Skript erstellen, das den Benutzer auffordert, die IP-Adresse, das Gateway usw. einzugeben. Dafür bin ich nicht gut genug.
Keith
Sie können ein Skript schreiben, das Parameter akzeptiert ... aber ja, dies ist der sicherste Weg. Was passiert, wenn der Benutzer die Datei blind bearbeitet, wenn er einen Fehler macht? Sie können Ihren Server außer Reichweite haben ... daher muss das Skript nicht nur die Parameter in irgendeiner Weise abfragen, sondern auch prüfen, ob sie sicher sind.
Rmano
3
In Bezug darauf /etc/sudoersist es visudonicht sudoedit.
Saiarcot895
Wenn jemand diese Art von Frage stellt, ist es wahrscheinlich nicht möglich, ein sicheres Bash-Skript zu schreiben. Es gibt einen Grund, warum Sie ein Bash-Skript nicht als Root festlegen können.
Rox0r