Linux: Root soll selbstgeschriebenes C-Programm als anderer Benutzer starten

Im Unterforum Hardware, Betriebssysteme, Programmiersprachen - Beschreibung: Alles zu Software, Hardware, Windows, Linux, Programmiersprachen
Anfragen zu Modding, Games, Cracks, etc. unerwünscht.

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 07 10 2024  12:20:16      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Hardware, Betriebssysteme, Programmiersprachen        Hardware, Betriebssysteme, Programmiersprachen : Alles zu Software, Hardware, Windows, Linux, Programmiersprachen
Anfragen zu Modding, Games, Cracks, etc. unerwünscht.


Autor
Linux: Root soll selbstgeschriebenes C-Programm als anderer Benutzer starten

    







BID = 666007

Bartholomew

Inventar



Beiträge: 4681
 

  


Hoi,

Habe einen kleinen Daemon geschrieben, der einen Taster an der seriellen Schnittstelle überwacht, und das bei Bedarf Deluge (Torrentprogramm) starten und stoppen soll. Deluge soll vom User "delu" gestartet werden.
Wenn ich das Programm als "delu" ausführe, funktioniert das auch schon wie gewünscht (Delu ist in der Gruppe Dialout und darf auf /dev/ttyS0 zugreifen).
Nun soll das Programm per Initscript ja von root aufgerufen werden - aber der Prozess soll dem User "delu" gehören, damit deluged vom richtigen User gestartet wird.
Habe
"chown delu:delu" <Programmbinary> und "chmod 6755 <Programmbinary>" durchgeführt; wenn ich als root nun das Programm starte, gehört der Prozess trotzdem root (und nicht delu).

Warum funktioniert das so nicht? Muss ich das zwingend mit sudo machen?


Gruß, Bartho


Edit: Korrektur:
Hatte "chmod 6755 <Programmbinary>" vergessen. Wenn ich als User "bartho" die Binary starte, gehört der Prozess "delu", wie gewünscht. Deluged meint aber trotzdem, von "bartho" und nicht von "delu" aufgerufen worden zu sein?



Code :

$ Traceback (most recent call last):

File "/usr/bin/deluged", line 8, in <module>
load_entry_point('deluge==1.1.9', 'console_scripts', 'deluged')()
File "/usr/lib/python2.5/site-packages/pkg_resources.py", line 277, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/usr/lib/python2.5/site-packages/pkg_resources.py", line 2179, in load_entry_point
return ep.load()
File "/usr/lib/python2.5/site-packages/pkg_resources.py", line 1912, in load
entry = __import__(self.module_name, globals(),globals(), ['__name__'])
File "/usr/lib/pymodules/python2.5/deluge/main.py", line 50, in <module>
import deluge.configmanager
File "/usr/lib/pymodules/python2.5/deluge/configmanager.py", line 99, in <module>
_configmanager = _ConfigManager()
File "/usr/lib/pymodules/python2.5/deluge/configmanager.py", line 50, in __init__
self.config_directory = deluge.common.get_default_config_dir()
File "/usr/lib/pymodules/python2.5/deluge/common.py", line 132, in get_default_config_dir
return xdg.BaseDirectory.save_config_path("deluge")
File "/usr/lib/pymodules/python2.5/xdg/BaseDirectory.py", line 59, in save_config_path
os.makedirs(path, 0700)
File "/usr/lib/python2.5/os.py", line 171, in makedirs
mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/home/bartho/.config/deluge'
Exception exceptions.AttributeError: "'NoneType' object has no attribute 'debug'" in <bound method _ConfigManager.__del__ of <deluge.configmanager._ConfigManager instance at 0xb7afcf4c>> ignored



Edit2:
Wenn ich die Binary als root ausführe, mag er noch nicht mal den Comport öffnen. Hmm.

Werde das ganze mal mit sudo probieren. Mich interessiert trotzdem, warum das so nicht funktioniert.

[ Diese Nachricht wurde geändert von: Bartholomew am 26 Jan 2010 14:09 ]

BID = 666017

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach

 

  

http://de.wikipedia.org/wiki/Setuid

BID = 666018

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Moin Bartho,

Das ist schon richtig so.

Hole ich in meinem C-Programm den Namen des Users, der das Programm gestartet hat, wird intern auf die $USER-Variable verwiesen. Die wird durch die Shell nun mal auf root gesetzt.


Du kannst aber auch die euid anzeigen lassen, wobei das e für effective steht .
Das heißt, das Programm wird zwar aus der Shell des Users root gestartet, gehört aber effektiv einem anderen User (der es auch z.B. killen kann. In der Prozessliste taucht der effektive User auf.)



_________________


[ Diese Nachricht wurde geändert von: DonComi am 26 Jan 2010 14:43 ]

[ Diese Nachricht wurde geändert von: DonComi am 26 Jan 2010 14:44 ]

BID = 666028

Bartholomew

Inventar



Beiträge: 4681

Hoi,

@Perl: Das suid-Bit und guid-Bit hatte ich mit "chmod 6755 <Programmbinary>" bereits gesetzt.

@Don:
Habe noch ein wenig rumprobiert.
Wenn ich das C-Programm mittels "sudo -u delu proggi" starte, gehört der Prozess delu.
Wenn in dem Programm mittels "system("sleep 1000 &");" ein sleep-Prozess im Hintergrund geöffnet wird, gehört dieser auch delu.

Offenbar wird der Prozess "deluged" also auch dem richtigen User (delu) zugeordnet, aber es wird versucht, die Configdateien des ursprünglichen Users (root) zu verwenden.

Dabei fällt mir ein, dass deluged ja mit einem Init-Script mitgeliefert wird (das ich nur nicht nutze). Ist bestimmt viel schlauer, das Init-Script aufzurufen

Offtopic :
PM ist angekommen, Danke Werde mir die Links beizeiten angucken.



Gruß, Bartho

BID = 666042

clembra

Inventar



Beiträge: 5404
Wohnort: Weeze / Niederrhein
ICQ Status  

Schlau ist es, wenn auch das selbstgeschriebene Programm nicht mit root-Rechten läuft. Die Konfiguration liegt wahrscheinlich im Home-Verzeichnis des jeweiligen Benutzers. Füge deinem sudo mal ein -H hinzu, dann sollte es klappen.

setuid-Bit gut und schön, bei Init-Skripten würde ich mich aber auch lieber auf `su -l user -c command` oder ähnliche Mechanismen verlassen. Das macht auch das Kopieren und Einrichten von Anwendungen einfacher. Denn sobald es zur Fehlersuche kommt wird genau das übersehen. sudo hingegen ist nicht unbedingt installiert oder konfiguriert, su hingegen (praktisch?) immer verfügbar.

_________________
Reboot oder be root, das ist hier die Frage.

BID = 666100

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Es ist schon rein sicherheitstechnisch besser, das als Prozess eines Benutzers ungleich root auszuführen.

Wieviele C-Programme sind was z.B. Pufferüberläufe oder nicht abgefangene Signale angeht, wirklich sicher?

_________________

BID = 666103

Bartholomew

Inventar



Beiträge: 4681


Zitat :
Füge deinem sudo mal ein -H hinzu, dann sollte es klappen.

So aufgerufen: "sudo -H -u delu proggi" läuft alles wie gewünscht

Schnell noch ein minimal-Init-Script a la http://www.debian-administration.or.....ebian gefrickelt, und schon ist es fertig.

Danke!


Gruß, Bartho

BID = 666111

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika


Zitat :

Offenbar wird der Prozess "deluged" also auch dem richtigen User (delu) zugeordnet, aber es wird versucht, die Configdateien des ursprünglichen Users (root) zu verwenden.

Wie gesagt, weil eben root das Programm startet und die globale Variable $USER auf root gesetzt ist.

Holst du dir im Programm mit char *user = getenv("USER");
den startenden User, bekommst du auch in diesem Falle "root".

Ergänzend: änderst du vor dem Forken des Programms (proggi&) den User mit export USER="delu", dann läuft alles wie gewünscht.
Dass das Murks ist sollte jedem klar sein, ich wollte nur unnützes Wissen verbreiten .

_________________

BID = 666227

clembra

Inventar



Beiträge: 5404
Wohnort: Weeze / Niederrhein
ICQ Status  

Nicht in diesem Fall, da die USER-Variable durchaus durch das sudo geändert wurde, nicht aber die HOME-Variable. Die muss mit dem Parameter -H erst überredet werden sich zu ändern.
Bevorzugen würde ich aber die oben genannte Methode mit su statt sudo.

_________________
Reboot oder be root, das ist hier die Frage.

BID = 666282

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Stimmt, in dem Fall muss man das nicht machen.


_________________


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag       heute wurden bisher 7 Beiträge verfasst
© x sparkkelsputz        Besucher : 182139014   Heute : 1900    Gestern : 5489    Online : 555        7.10.2024    12:20
4 Besucher in den letzten 60 Sekunden        alle 15.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.071946144104