Es gibt mehrere Möglichkeiten, das hängt davon ab, wie sicher, flexibel und einfach die Lösung sein soll. http://www.dcoul.de/infos/alle_macht_dem_user.html bietet auch noch weitere Informationen und Möglichkeiten.
Die Billig-Methode
Benutze vor solchen Befehlen su -. Das fragt zwar ständig nach dem root Kennwort, aber das ist am sichersten.
Man kann su auch direkt ein Kommando mitteilen, das als Root ausgeführt werden soll, z.B. su -c "make install". Die genaue Syntax variiert auf anderen UNIX-Systemen. -- MartinSchmitt 2002-11-03 07:52:12
Die 'orthodoxere' Methode
Mache Dich mit dem Programm sudo vertraut. Dies erlaubt root, ganz bestimmte Programme mit ganz bestimmten Parametern (zu ganz bestimmten Zeiten) auch ohne Kennwortabfrage normalen Benutzern zur Verfügung zu stellen. Beispiel:
# /etc/sudoers # jens myhost=NOPASSWD: /etc/shutdown -h now
Dies erlaubt jens, auf dem Rechner myhost den Befehl shutdown -h now auszuführen (muss dann sudo shutdown -h now aufgerufen werden). Jens kann weder shutdown -r now ausführen noch kann jemand anders shutdown -h now ausführen. Jens benötigt dafür kein Kennwort.
Die Angabe des Hostnamens ist für den Fall gedacht, dass man eine sudo-Konfiguration zentral für einen ganzen Maschinenpark pflegen will. Anstelle von myhost kann man da auch einfach ALL schreiben, ohne was kaputt zu machen.
Die /etc/sudoers sollte niemals direkt bearbeitet werden, sondern nur über den von sudo bereit gestellten Befehl visudo - dieser führt vor dem Speichern einen Syntax-Check durch. Wichtig ist das auf Maschinen, für die man überhaupt kein Root-Passwort hat, und wo man aufpassen muss, dass man sich nicht selbst aussperrt.
Nur um das klar zu stellen: Wenn da nicht NOPASSWD steht, fragt Sudo nicht nach dem Root-Kennwort, sondern sicherheitshalber nach dem Kennwort des Users, der sudo ausführt. Dieses Kennwort wird dann für einige Minuten zwischengespeichert, falls man noch mehr Befehle über sudo ausführen muss. Darüber scheint es öfter mal Missverständnisse zu geben.
-- MartinSchmitt 2002-11-03 07:45:35
Die flexible Methode
Funktioniert leider nicht mit allen Programmen, route will es z.B. u.U. gar nicht. Aber ansonsten reicht es, wenn Du eine Gruppe erstellst, sagen wir "trusted", und allen entsprechenden Programmen folgende Rechte gibst:
chown root.trusted /usr/sbin/PROGRAMM chmod 4710 /usr/sbin/PROGRAMM
Das bedeutet, alle Gruppenmitglieder von trusted dürfen das Programm ausführen, aber nicht die binary Datei lesen (nur 'x' ist gesetzt), das Programm wird mit root-Rechten ausgeführt (die 4 am Anfang setzt das Set User ID Bit) und wer nicht der Gruppe trusted zugehört, darf gar nichts. Die Artikel über DateiRechte und DateiAttribute helfen, das vielleicht besser zu verstehen.
Dann fügt man einfach jeden, der "dürfen soll", der Gruppe trusted hinzu.
Diese SUID-Methode funktioniert nicht mit ShellScripts!
Die Hacker-Methode
Man kann obiges natürlich auch mit einem C-Programm erreichen. Hier ist es: scripts/suid-wrapper.c (Das kam von Ingvar Gilbert (ingvar@gmx.de), von mir etwas angepasst, hoffentlich gehts noch ;).
Dann das Programm mit gcc -Wall suid-wrapper.c -o suid-wrapper kompilieren, und mit
chown root suid-wrapper chmod 4711 suid-wrapper
das SUID-Bit setzen. Wenn man nicht will, dass jeder darf, nimmt man 4710 und macht das so mit den Gruppen wie oben.
Anmerkungen:
- 4711 ist hier keine 'random number', sondern voll beabsichtigt.
- Man MUSS das Programm anpassen, in Bezug auf die auszuführenden Befehle.