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- 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
|
|
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
|
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
|
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.
_________________
|
|
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
|