Entwicklerhandbuch/Sudo: Unterschied zwischen den Versionen
(Anfang) |
Kirmse (Diskussion | Beiträge) (erster Fassung von dieser Seite) |
||
Zeile 3: | Zeile 3: | ||
== | == Programmrechte mit sudo vergeben == | ||
Es soll hier beschrieben werden, wie man <code>wwwrun</code> die Ausführung von Scripten bzw. Programmen ermöglicht, für die eigentlich root-Rechte benötigt werden. Dazu sei angenommen, das es unter <code>/usr/sbin</code> ein Script <code>example.pl</code> gibt, welches durch ein CGI-Script (also mit den Rechten von <code>wwwrun</code>) aufgerufen werden soll. | |||
=== Die Datei /etc/sudoers === | |||
Dazu muss im Verzeichnis <code>/etc</code> die Datei <code>sudoers</code> editiert werden. diese Datei sieht bei <code>delixs</code> so aus: | |||
... | # sudoers file. | ||
# | |||
# This file MUST be edited with the 'visudo' command as root. | |||
# | |||
# See the man page for the details on how to write a sudoers file. | |||
# | |||
# Host alias specification | |||
# Cmnd alias specification | |||
Cmnd_Alias ONLINE=/usr/sbin/online,/usr/sbin/onpassch,/usr/sbin/onipfwmasq | |||
Cmnd_Alias HTTPSW=/usr/sbin/httpswitch | |||
Cmnd_Alias MATERIAL=/usr/www/admin/material/material.sh | |||
# User specification | |||
root ALL=ALL | |||
%lehrer ALL=HTTPSW | |||
%online ALL=ONLINE | |||
%material ALL=MATERIAL | |||
Der entscheidende Abschnitt ist der unter <code># User specification</code>. Dort wird angegeben, wer was von wo ausführen darf. Die Syntax dazu lautet: | |||
User Rechner = Kommandos | |||
Ein Beispiel: wenn der User <code>mmustermann</code> vom Rechner <code>pc01</code> das Script <code>/usr/sbin/example.pl</code> ausführen können soll, dann müßte das so angegeben werden: | |||
mmustermann pc01=/usr/sbin/example.pl | |||
Wenn der User <code>mmustermann</code> das von jedem Rechner ausführen können soll, dann verwendet man für die Rechner den Alias <code>ALL</code> und die Zeile würde so aussehen: | |||
mmustermann ALL=/usr/sbin/example.pl | |||
Es gibt aber nicht nur den vorgegebenen Alias ALL, sondern man kann auch selbst für Gruppen von Programmen Aliasse anlegen | |||
Mit | |||
* <code>Cmnd_Alias</code> werden (andere) Aliasse für Programmgruppen angelegt | |||
* <code>User_Alias ...</code> werden Aliasse für User angelegt und | |||
* <code>Host_Alias ...</code> werden Aliasse für Rechner angelegt. | |||
Im gegebenen Beispiel werden nur Aliasse für Programme bereitgestellt. | |||
Es bedeutet | |||
root ALL=ALL | |||
root darf von allen Rechnern alle Programme ausführen. | |||
Die Zeile | |||
%lehrer ALL=HTTPSW | |||
bedeutet, alle Lehrer dürfen von allen Rechnern das Programm /usr/sbin/httpswitch ausführen. | |||
=== einen Eintrag in sudoers erstellen === | |||
Nun wollen wir die am Anfang gestellt Aufgabe in Angriff nehmen. Es sollte der User wwwrun das Script /usr/sbin/example.pl ausführen dürfen. Damit würde sich folgende Zeile ergeben: | |||
wwwrun ALL=/usr/sbin/example.pl | |||
Das ist aber leider nicht optimal, denn der Apache (also der wwwrun) läuft ja auf dieser Maschine. Es wäre also sinnvoll, nur diesen Rechner (localhost) anzugeben | |||
wwwrun localhost=/usr/sbin/example.pl | |||
Hier gibt es aber ein Problem, weil nämlich sudo ein Passwort verlangt, wir aber nicht das Passwort von wwwrun übergeben wollen. Dazu gibt man das so an: | |||
wwwrun localhost=NOPASSWD:/usr/sbin/example.pl | |||
Die Datei sudoers würde nun so aussehen: | |||
# sudoers file. | |||
# | |||
# This file MUST be edited with the 'visudo' command as root. | |||
# | |||
# See the man page for the details on how to write a sudoers file. | |||
# | |||
# Host alias specification | |||
# Cmnd alias specification | |||
Cmnd_Alias ONLINE=/usr/sbin/online,/usr/sbin/onpassch,/usr/sbin/onipfwmasq | |||
Cmnd_Alias HTTPSW=/usr/sbin/httpswitch | |||
Cmnd_Alias MATERIAL=/usr/www/admin/material/material.sh | |||
# User specification | |||
root ALL=ALL | |||
%lehrer ALL=HTTPSW | |||
%online ALL=ONLINE | |||
%material ALL=MATERIAL | |||
wwwrun localhost=NOPASSWD:/usr/sbin/example.pl | |||
=== Kosmetik === | |||
so richtig passt das aber noch nicht zum Stil der vorgegebenen Datei sudoers. wir erstellen also Alias für unser Script /usr/sbin/example.pl. Diesen nennen wir DEMO. Und weil wwwrun ein einzelner Nutzer genauso wie root ist, bringen wir den Eintrag gleich als zweiten. | |||
# sudoers file. | |||
# | |||
# This file MUST be edited with the 'visudo' command as root. | |||
# | |||
# See the man page for the details on how to write a sudoers file. | |||
# | |||
# Host alias specification | |||
# Cmnd alias specification | |||
Cmnd_Alias ONLINE=/usr/sbin/online,/usr/sbin/onpassch,/usr/sbin/onipfwmasq | |||
Cmnd_Alias HTTPSW=/usr/sbin/httpswitch | |||
Cmnd_Alias MATERIAL=/usr/www/admin/material/material.sh | |||
Cmnd_Alias DEMO=/usr/sbin/example.pl | |||
# User specification | |||
root ALL=ALL | |||
wwwrun localhost=NOPASSWD:DEMO | |||
%lehrer ALL=HTTPSW | |||
%online ALL=ONLINE | |||
%material ALL=MATERIAL | |||
---- | ---- | ||
<div align="right">[[Delixs:Entwicklerhandbuch|zurück]] | [[Hauptseite]]</div> | <div align="right">[[Delixs:Entwicklerhandbuch|zurück]] | [[Hauptseite]]</div> |
Version vom 28. April 2008, 17:36 Uhr
Diese Seite sollte nochmals überarbeitet werden. Eine Begründung befindet sich in der Regel unter Diskussion (oben). |
Programmrechte mit sudo vergeben
Es soll hier beschrieben werden, wie man wwwrun
die Ausführung von Scripten bzw. Programmen ermöglicht, für die eigentlich root-Rechte benötigt werden. Dazu sei angenommen, das es unter /usr/sbin
ein Script example.pl
gibt, welches durch ein CGI-Script (also mit den Rechten von wwwrun
) aufgerufen werden soll.
Die Datei /etc/sudoers
Dazu muss im Verzeichnis /etc
die Datei sudoers
editiert werden. diese Datei sieht bei delixs
so aus:
# sudoers file. # # This file MUST be edited with the 'visudo' command as root. # # See the man page for the details on how to write a sudoers file. # # Host alias specification # Cmnd alias specification Cmnd_Alias ONLINE=/usr/sbin/online,/usr/sbin/onpassch,/usr/sbin/onipfwmasq Cmnd_Alias HTTPSW=/usr/sbin/httpswitch Cmnd_Alias MATERIAL=/usr/www/admin/material/material.sh # User specification root ALL=ALL %lehrer ALL=HTTPSW %online ALL=ONLINE %material ALL=MATERIAL
Der entscheidende Abschnitt ist der unter # User specification
. Dort wird angegeben, wer was von wo ausführen darf. Die Syntax dazu lautet:
User Rechner = Kommandos
Ein Beispiel: wenn der User mmustermann
vom Rechner pc01
das Script /usr/sbin/example.pl
ausführen können soll, dann müßte das so angegeben werden:
mmustermann pc01=/usr/sbin/example.pl
Wenn der User mmustermann
das von jedem Rechner ausführen können soll, dann verwendet man für die Rechner den Alias ALL
und die Zeile würde so aussehen:
mmustermann ALL=/usr/sbin/example.pl
Es gibt aber nicht nur den vorgegebenen Alias ALL, sondern man kann auch selbst für Gruppen von Programmen Aliasse anlegen
Mit
Cmnd_Alias
werden (andere) Aliasse für Programmgruppen angelegtUser_Alias ...
werden Aliasse für User angelegt undHost_Alias ...
werden Aliasse für Rechner angelegt.
Im gegebenen Beispiel werden nur Aliasse für Programme bereitgestellt. Es bedeutet
root ALL=ALL
root darf von allen Rechnern alle Programme ausführen. Die Zeile
%lehrer ALL=HTTPSW
bedeutet, alle Lehrer dürfen von allen Rechnern das Programm /usr/sbin/httpswitch ausführen.
einen Eintrag in sudoers erstellen
Nun wollen wir die am Anfang gestellt Aufgabe in Angriff nehmen. Es sollte der User wwwrun das Script /usr/sbin/example.pl ausführen dürfen. Damit würde sich folgende Zeile ergeben:
wwwrun ALL=/usr/sbin/example.pl
Das ist aber leider nicht optimal, denn der Apache (also der wwwrun) läuft ja auf dieser Maschine. Es wäre also sinnvoll, nur diesen Rechner (localhost) anzugeben
wwwrun localhost=/usr/sbin/example.pl
Hier gibt es aber ein Problem, weil nämlich sudo ein Passwort verlangt, wir aber nicht das Passwort von wwwrun übergeben wollen. Dazu gibt man das so an:
wwwrun localhost=NOPASSWD:/usr/sbin/example.pl
Die Datei sudoers würde nun so aussehen:
# sudoers file. # # This file MUST be edited with the 'visudo' command as root. # # See the man page for the details on how to write a sudoers file. # # Host alias specification # Cmnd alias specification Cmnd_Alias ONLINE=/usr/sbin/online,/usr/sbin/onpassch,/usr/sbin/onipfwmasq Cmnd_Alias HTTPSW=/usr/sbin/httpswitch Cmnd_Alias MATERIAL=/usr/www/admin/material/material.sh # User specification root ALL=ALL %lehrer ALL=HTTPSW %online ALL=ONLINE %material ALL=MATERIAL wwwrun localhost=NOPASSWD:/usr/sbin/example.pl
Kosmetik
so richtig passt das aber noch nicht zum Stil der vorgegebenen Datei sudoers. wir erstellen also Alias für unser Script /usr/sbin/example.pl. Diesen nennen wir DEMO. Und weil wwwrun ein einzelner Nutzer genauso wie root ist, bringen wir den Eintrag gleich als zweiten.
# sudoers file. # # This file MUST be edited with the 'visudo' command as root. # # See the man page for the details on how to write a sudoers file. # # Host alias specification # Cmnd alias specification Cmnd_Alias ONLINE=/usr/sbin/online,/usr/sbin/onpassch,/usr/sbin/onipfwmasq Cmnd_Alias HTTPSW=/usr/sbin/httpswitch Cmnd_Alias MATERIAL=/usr/www/admin/material/material.sh Cmnd_Alias DEMO=/usr/sbin/example.pl # User specification root ALL=ALL wwwrun localhost=NOPASSWD:DEMO %lehrer ALL=HTTPSW %online ALL=ONLINE %material ALL=MATERIAL