Entwicklerhandbuch/Sudo: Unterschied zwischen den Versionen

Aus Delixs
Zur Navigation springen Zur Suche springen
(Anfang)
 
(kirmse)
 
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
__NOTOC__
__NOTOC__
{{Uberarbeiten}}


{{EditStatus|1|Kirmse}}


== Leben mit Debian: Die Entwickler Richtlinien ==


Alles was programmiert wird, soll sich an diese Richtlinien halten. Einige Dinge wie die Paketerstellung & -verwaltung, sowie die Konfiguration des Installers müssen sich auch an die "Debian Policy" halten.
== 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.


== Arbeiten mit .... ==
=== 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:
 
<source lang="text">
# 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
</source>
 
 
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:
 
<source lang="text">
# 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
</source>
 
 
=== 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.
 
<source lang="text">
# 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
</source>
 
 
== Weblinks ==
 
* http://www.gentoo.de/doc/de/sudo-guide.xml


...




----
----
<div align="right">[[Delixs:Entwicklerhandbuch|zurück]] | [[Hauptseite]]</div>
<div align="right">[[Delixs:Entwicklerhandbuch|zurück]] | [[Hauptseite]]</div>
[[Kategorie:Entwicklerhinweise]]

Aktuelle Version vom 16. März 2012, 12:59 Uhr


Diese Seite ist momentan eine Baustelle im Zustand: 1

Wird bearbeitet von: Kirmse
Hilfe zum Bearbeitungsstatus: Hilfe:Status eines Artikels


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:

<source lang="text">

# 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

</source>


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 angelegt
  • User_Alias ... werden Aliasse für User angelegt und
  • Host_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:

<source lang="text">

# 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 

</source>


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.

<source lang="text">

# 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

</source>


Weblinks



zurück | Hauptseite