Forum: PC-Programmierung Linux: Skript mit root-Rechten "anrtiggern"


von Hannes (Gast)


Lesenswert?

Hallo,

ich möchte, dass ein Nutzer shell-Skripte starten kann, die root Rechte 
benötigen. Ich möchte diesem Nutzer aber keine root Rechte einräumen.

Also habe ich mir folgendes überlegt: Der Nutzer soll die Ausführung nur 
veranlassen, root führt sie dann selbst aus.

Quick & Dirty könnte das z.B. so laufen: der Nutzer erstellt eine Datei 
in seinem home Verzeichnis. Root prüft regelmäßig, ob diese Datei 
vorhanden ist. Wenn ja, wird das Skript ausgeführt und anschließend die 
Datei gelöscht.

Das muss aber doch auch eleganter gehen. Ich bin aber kein Linux 
Experte. Kann mir da jemand einen Tipp geben?

Danke!
Hannes

von Peter II (Gast)


Lesenswert?

Hannes schrieb:
> Das muss aber doch auch eleganter gehen.

geht auch.

Entweder mit sudo
https://de.wikipedia.org/wiki/Sudo

oder einfach bei dem script das das SUID flag setzen (könnte aber sein 
das das bei scripten nicht mehr geht)

von Hannes (Gast)


Lesenswert?

Peter II schrieb:
> mit sudo

Der Nutzer soll keine root Rechte bekommen.

Es handelt sich um keine ausführbaren Dateien, sondern um shell und 
python Skripte.

von Peter II (Gast)


Lesenswert?

Hannes schrieb:
> Peter II schrieb:
>> mit sudo
>
> Der Nutzer soll keine root Rechte bekommen.
>
> Es handelt sich um keine ausführbaren Dateien, sondern um shell und
> python Skripte.

hast du gelesen, was man mit sudo alles machen kann?

von Tux (Gast)


Lesenswert?

suid

von sudo (Gast)


Lesenswert?

Hannes schrieb:
>> mit sudo
>
> Der Nutzer soll keine root Rechte bekommen.

Also mit sudo

Einfach mal die Doku lesen.

von Hannes (Gast)


Lesenswert?

sudo ist tatsächlich umfangreicher als ich dachte...

sudo
sudo.conf
sudoers
sudoers.ldap
sudoreplay
visudo
sudo_plugin


...insgesamt 140 Seiten Doku.

Ich lese dann mal.

Gute Nacht

von Marc S. (marc_s86)


Lesenswert?

Die Datei sudoers dürfte dein Problem lösen.

von Ray M. (ray_m)


Lesenswert?

was ich in diesem forum nie verstehen werde ...
warum schreibt ihr ihm die eine zeilen nicht einfach hin und gut ist,
verweise auf docu wenn jemand eine frage stellt werde ich nie verstehen 
...


1. suid auf scripte geht nicht, dann müsstest du den
   interpreter suid setzen und das streichst du bitte
   gleich aus deinem gehirn

2. ja, sudo ist das richtige mittel für dein problem


als bsp. hier mal das vorgehen auf ubuntu

1. alle benutzer die sudo verwenden sollen,
   müssen in der gruppe 'sudo' sein

     $> usermod -a -G sudo testbenutzer

2. in /etc/sudoers

  testbenutzer    ALL = NOPASSWD: /opt/huhu/meinScript1


ergebnis:
  der benutzer "testbenutzer" darf das script ohne
  passwortabfrage als root ausführen

von Ray M. (ray_m)


Lesenswert?

Ray M. schrieb:
> was ich in diesem forum nie verstehen werde ...
> warum schreibt ihr ihm die eine zeilen nicht einfach hin und gut ist,
> verweise auf docu wenn jemand eine frage stellt werde ich nie verstehen
> ...
>
>
> 1. suid auf scripte geht nicht, dann müsstest du den
>    interpreter suid setzen und das streichst du bitte
>    gleich aus deinem gehirn
>
> 2. ja, sudo ist das richtige mittel für dein problem
>
>
> als bsp. hier mal das vorgehen auf ubuntu
>
> 1. alle benutzer die sudo verwenden sollen,
>    müssen in der gruppe 'sudo' sein
>
>      $> usermod -a -G sudo testbenutzer
>
> 2. in /etc/sudoers
>
>   testbenutzer    ALL = NOPASSWD: /opt/huhu/meinScript1
>
>
> ergebnis:
>   der benutzer "testbenutzer" darf das script ohne
>   passwortabfrage als root ausführen

kleine anmerkung noch am rande ...

scripte die du den usern so erlaubst als root auszuführen, sollten
immer root gehören und die rechte 700 besitzen !!!

  $> chown root.root meinScript
  $> chmod 700 meinScript

sonst könnte sie ein normaler user manipulieren und das willst du sicher 
nicht haben ...

: Bearbeitet durch User
von Marc S. (marc_s86)


Lesenswert?

Ray M. schrieb:
> was ich in diesem forum nie verstehen werde ...
> warum schreibt ihr ihm die eine zeilen nicht einfach hin und gut ist,
> verweise auf docu wenn jemand eine frage stellt werde ich nie verstehen

man nennt es "hilfe zur selbsthilfe". wenn man den leuten immer alles 
vorkaut kommen sie immer wieder und fragen, wenn man ihnen dagegen sagt, 
wie sie sich die lösung erarbeiten dann lernen sie auch den hintergrund.

Deine Lösung löst sein akutes problem, wenn er dann das nächste mal ein 
problem hat was sich ähnlich lösen lässt dann kommt er wieder fragen, 
wenn er aber dieses mal die doku gelesen hat, dann weiß er nächstes mal 
schon was sudo kann.

von LOL (Gast)


Lesenswert?

Ray M. schrieb:
> $> usermod -a -G sudo testbenutzer

Also das würde ich mit Sicherheit nicht machen.
Dadurch wird der Nutzer sudoer, d.h. er ist de facto root, denn meist 
steht das folgende in /etc/sudoers:
1
# Allow members of group sudo to execute any command
2
%sudo   ALL=(ALL:ALL) ALL

Hinterher Einschränken ist höchstens ein gut gemeinter aber 
hoffnungsloser Versuch zur Schadensbegrenzung.

Es ist nicht notwendig Mitglied von wheel, sudo oder admin zu sein 
wenn der Benutzer sudoer für bestimmte Befehle sein soll. Dazu reicht 
ein entsprechend konfigurierter Eintrag in /etc/sudoers für eine 
Benutzergruppe oder einen einzelnen Benutzer.

Insofern ist das mit den vorgekauten Lösungen also schon so eine Sache: 
Nicht nur der Lerneffekt ist niedriger, man riskiert auch eine nicht 
optimale Lösung.

von sudo (Gast)


Lesenswert?

Ray M. schrieb:
> 1. alle benutzer die sudo verwenden sollen,
>    müssen in der gruppe 'sudo' sein
>
>      $> usermod -a -G sudo testbenutzer

Möööp falsch. Besser mal die Doku lesen ;)

von Sven B. (scummos)


Lesenswert?

Effektiv ist das was du tun willst sehr schwer so zu erreichen dass es 
danach igendwie sinnvoll sicher ist.

Was willst du denn effektiv erreichen, d.h. was soll der Benutzer tun 
können? Sehr wahrscheinlich gibt es eine bessere Lösung, z.B. eine udev- 
oder polikt-Einstellung, für das was du tun willst, als sudo oder suid.

: Bearbeitet durch User
von Roland P. (pram)


Lesenswert?

Als Alternative möchte ich noch super in den Rqum stellen.

http://www.ucolick.org/~will/RUE/super/super.1.html

Gruß Roland

von LOL (Gast)


Lesenswert?

Sven B. schrieb:
> Effektiv ist das was du tun willst sehr schwer so zu erreichen dass es
> danach igendwie sinnvoll sicher ist.

Halte ich für ein Gerücht, das ist kein neuzeitliches Problem.
Das oben genannte Beispiel
1
  testbenutzer    ALL = NOPASSWD: /opt/huhu/meinScript1

in /etc/sudoers ist hinreichend sicher, wenn man den Tipp mit den 
Berechtigungen beachtet, also
1
sudo chmod a-rwx,u=rx /opt/huhu/meinScript1
2
sudo chown root:root /opt/huhu/meinScript1
da dann nur root das Script ändern kann.

Wenn man das ganze noch übertreiben will, kann man noch das 
immutable-bit mit chattr setzen, wenn das Dateisystem das hergibt:
1
sudo chattr +i /opt/huhu/meinScript1

Grundsätzlich ist außerdem noch besser, man verzichtet auf NOPASSWD so 
nicht zwingend notwendig, dann kann man auch sicher sein das derjenige 
der gerade am PC sitzt auch derjenige ist, der sich ursprünglich 
angemeldet hatte.

In jedem Script sollte man dann mindestens noch
1
PATH=/bin:/sbin:/usr/bin:/usr/sbin
vorgeben, damit da nix schiefgehen kann oder gleich absolute Pfade 
nehmen.
Variablen vor der ersten Verwendung explizit zu initialisieren hat auch 
noch nie geschadet und ist grundsätzlich guter Stil.

Ist letztendlich aber auch nur Zuckerguss:
Prinzipiell bereinigt sudo aber die Umgebungsvariablen vor dem Aufruf, 
das kann und sollte man auch entsprechend erzwingen.

Polkit & co. sind bei weitem nicht auf allen Systemen verfügbar und/oder 
sinnvoll, insbesondere auf Servern.

von Sven B. (scummos)


Lesenswert?

Kommt halt drauf an was das Skript macht. Generell muss sowas schon 
recht sorgfältig geschrieben sein, sodass man ihm keine Eingaben geben 
kann die irgendwas lustiges bewirken was so eigentlich nicht gedacht war 
...

Ist natürlich auch die Frage, ob das hier überhaupt relevant ist, wenn 
das ein privater Desktop-Rechner ist, ist das natürlich alles egal.

von Hannes (Gast)


Lesenswert?

Liebe Leute,

es hat funktioniert. Natürlich war sie sudoers Datei der Schlüssel. 
Danke an alle.

Das mit der Hilfestellung in Foren ist halt immer so eine Sache. Von 
fertigen Lösungen bis hin zu "read the f** manual" liest man ja alles.
Der Hinweis auf "sudo" war im Nachhinein schon richtig, der Verweis auf 
das Manual für meinen Geschmack etwas zu wenig. Aber als Fragesteller 
kritisiere ich niemanden, der sich die Zeit für eine Antwort nimmt.
Wichtig ist mMn, dass man vom Forum eine Richtung gezeigt bekommt. Und 
das hat ja dann super geklappt.

Danke nochmal und bis zum nächsten Mal!

hannes

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Peter II schrieb:
> oder einfach bei dem script das das SUID flag setzen (könnte aber sein
> das das bei scripten nicht mehr geht)

Ging noch nie für Scripts. Weder unter Linux noch unter irgendeinem 
anderen UNIX-Derivat.

von Peter II (Gast)


Lesenswert?

Frank M. schrieb:
> Ging noch nie für Scripts. Weder unter Linux noch unter irgendeinem
> anderen UNIX-Derivat.

Wenn du es besser weist, dann solltest du den Wiki Eintrag ändern.

https://de.wikipedia.org/wiki/Setuid
[...]
Auf den meisten Systemen funktioniert dies nur für ausführbare 
Binärdateien, nicht jedoch für interpretierte Scripts.
[...]

von tux (Gast)


Lesenswert?

Peter II schrieb:
>> Ging noch nie für Scripts. Weder unter Linux noch unter irgendeinem
>> anderen UNIX-Derivat.
>
> Wenn du es besser weist, dann solltest du den Wiki Eintrag ändern.
>
> https://de.wikipedia.org/wiki/Setuid
> [...]
> Auf den meisten Systemen funktioniert dies nur für ausführbare
> Binärdateien, nicht jedoch für interpretierte Scripts.
> [...]

ähmm, wo ist jetzt der Unterschied zu Frank seiner Aussage?

von Peter II (Gast)


Lesenswert?

tux schrieb:
> ähmm, wo ist jetzt der Unterschied zu Frank seiner Aussage?

Ging noch nie für Scripts

ist wohl etwas anders als

Auf den meisten Systemen funktioniert

von Steffen R. (steffen_rose)


Lesenswert?

Hannes schrieb:
> es hat funktioniert. Natürlich war sie sudoers Datei der Schlüssel.

Hannes schrieb:
> der Nutzer erstellt eine Datei

Wenn der Nutzer wirklich die Datei verändern können soll, frage ich mich 
schon, ob das der richtige Weg ist. Zumindest falls der Plan umgesetzt 
wurde, das ganze Skript mit sudo auszuführen.

LOL schrieb:
> da dann nur root das Script ändern kann.

: Bearbeitet durch User
von Student (Gast)


Lesenswert?

Da hast du was falsch verstanden, Steffen.

Er stellt sich das als Art Daemon Process vor und der Nutzer touch-ed 
nur eine Datei, als eine Art "Flag" zur Ausführung.

Der Daemon sieht dann in etwa so aus:
[-f $user/run_script] && ./run_script.sh

(Wobei ich nicht mehr so firm in Shell bin, vermutlich ist die Syntaktik 
der eckigen Klammern genauso falsch wie das -f für file exists)

Da wäre jedenfalls ein Sudo für die einzelne Datei besser bzw. je nach 
Anwendungsfall wäre es einfacher das Skript non-root kompatibel zu 
machen (z.B. Port > 1024)

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Peter II schrieb:
> Ging noch nie für Scripts
>
> ist wohl etwas anders als
>
> Auf den meisten Systemen funktioniert

Also ich kenne unter anderem:

UNIX System V
Unixware
ULTRIX
HP-UX
Solaris
AIX
SCO
SINIX

und einige der BSD-Derivate ziemlich genau, da ich seit 1984 mit 
unixoiden Systemen arbeite.

Auf keiner dieser Plattformen wirkt ein suid-Bit für Scripts. Ob da 
vielleicht irgendein exotisches Etwas, das UNIX-ähnlich aussieht, das 
suid-Bit akzeptiert, kann ich selbstverständlich nicht ausschließen. 
Aber ich halte dies für extrem unwahrscheinlich. Wahrscheinlich wollte 
der Autor des Wikipedia-Artikels sich da ein Hintertürchen aufhalten - 
aus verständlichen Gründen angesichts der Artenvielfalt, dies es bei 
unixoiden System gibt.

Aber darauf pochen, dass es ein gibt, ohne eins nennen zu können, ist 
wenig zielführend. Oder kennst Du ein Gegenbeispiel?

von Ralf D. (doeblitz)


Lesenswert?

Frank M. schrieb:
[...]
> Aber darauf pochen, dass es ein gibt, ohne eins nennen zu können, ist
> wenig zielführend. Oder kennst Du ein Gegenbeispiel?

Sieh dir mal http://www.in-ulm.de/~mascheck/various/shebang/#setuid an, 
da werden ein paar Beispiele genannt.

Ich meine mich auch dunkel zu erinnern, daß das bei Linux mal ging und 
erst mit Kernel 1.x irgendwann abgestellt wurde, aber das ist schon 
etwas zu lange her um mich noch genau genug erinnern zu können.

Dein "das ging noch nie" ist daher definitiv falsch, es ist nur auf den 
meisten Systemen nicht (mehr) möglich, SUID-Scripts zu nutzen. Aber es 
ging früher mal.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.