Prozesse unter andere Benutzerid
- Jens
- Beiträge: 404
- Registriert: 31.03.2004 07:51:08
- Lizenz eigener Beiträge: MIT Lizenz
-
Kontaktdaten:
Prozesse unter andere Benutzerid
Hallo Forum,
mich würde eure Meinung interessieren zum im Betreff genanntem Thema. Ich habe eine Software die selber nicht dazu in der Lage ist per Config File unter einem anderen Benutzer zu laufen. Mein Ziel ist es jetzt das diese Software nach einem Neustart automatisch gestartet wird, in meinem Fall via rc.local. Da das ganze nicht unter Root laufen soll fallen mir pauschal nur zwei Möglichkeiten ein den Prozess unter einer bestimmten Benutzerid laufen zu lassen.
1. Owner der File ändern und SUID Bit setzen, Software startet mit den Owner Berechtigungen.
2. z.b. via su -c "/startline/progx"
Irgendwie gefällt mir das aber noch nicht so ganz, da in Variante 1 immer nur ein bestimmter Benutzeraccount genutzt wird und in Variante 2 immer ein su die ganze Zeit läuft.
Gibt es da bessere Varianten soetwas zu lösen?
mich würde eure Meinung interessieren zum im Betreff genanntem Thema. Ich habe eine Software die selber nicht dazu in der Lage ist per Config File unter einem anderen Benutzer zu laufen. Mein Ziel ist es jetzt das diese Software nach einem Neustart automatisch gestartet wird, in meinem Fall via rc.local. Da das ganze nicht unter Root laufen soll fallen mir pauschal nur zwei Möglichkeiten ein den Prozess unter einer bestimmten Benutzerid laufen zu lassen.
1. Owner der File ändern und SUID Bit setzen, Software startet mit den Owner Berechtigungen.
2. z.b. via su -c "/startline/progx"
Irgendwie gefällt mir das aber noch nicht so ganz, da in Variante 1 immer nur ein bestimmter Benutzeraccount genutzt wird und in Variante 2 immer ein su die ganze Zeit läuft.
Gibt es da bessere Varianten soetwas zu lösen?
Re: Prozesse unter andere Benutzerid
![Debian](/pics/debianpackage.png)
Syntax der Konfigdatei:
'man sudoers'
und /usr/share/doc/sudo/examples/sudoers.
Sicherheitstechnisch ein wenig tricky:
Erlaubtes 'Kommando+Parameter' sollte sauber definiert sein, damit ein Benutzer nicht 'Kommando+Parameter+weitereParameter' setzen kann.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
Re: Prozesse unter andere Benutzerid
Ich sehe nicht, was Dich an 2 stört. Ein "die ganze Zeit laufendes su" bedeutet doch in dem Fall nur, dass progx unter der neuen Nutzerkennung läuft. Die Vorsicht gegenüber "su" kommt doch daher, dass "su" im allgemeinen "su root" impliziert (oder irre ich mich da?). *Das* ist gefährlich, aber darum geht es doch hier nicht.
- Jens
- Beiträge: 404
- Registriert: 31.03.2004 07:51:08
- Lizenz eigener Beiträge: MIT Lizenz
-
Kontaktdaten:
Re: Prozesse unter andere Benutzerid
Das "su", mit dem gestartet wird, läuft auch so lange weiter bis der eigentliche Prozess beendet wird. Ob das jetzt schlimm ist lass ich mal dahingestellt =). Die Variante mit sudo werde ich mir aber nochmal genauer anschauen, ich denke könnte so funktionieren wie ich mir das denkeseverin hat geschrieben:Ich sehe nicht, was Dich an 2 stört. Ein "die ganze Zeit laufendes su" bedeutet doch in dem Fall nur, dass progx unter der neuen Nutzerkennung läuft. Die Vorsicht gegenüber "su" kommt doch daher, dass "su" im allgemeinen "su root" impliziert (oder irre ich mich da?). *Das* ist gefährlich, aber darum geht es doch hier nicht.
![Smile :)](./images/smilies/icon_smile.gif)
Danke für den Hinweiß
![Mr. Green :mrgreen:](./images/smilies/icon_mrgreen.gif)
Re: Prozesse unter andere Benutzerid
hi,
falls du cron laufen hast, kannst du das Programm auch aus /etc/crontab heraus starten:
Eigentlich brauchen wir doch eine abgespeckte Version von su. Es ist doch kaum mehr nötig als:
warum gibt es sowas nicht fertig?
falls du cron laufen hast, kannst du das Programm auch aus /etc/crontab heraus starten:
Code: Alles auswählen
@reboot jens /pfad/zum/programm
Code: Alles auswählen
setgid (gid);
setuid (uid);
execve ("/pfad/zum/program", args, env);
Beware of programmers who carry screwdrivers.
-
- Beiträge: 3800
- Registriert: 26.02.2009 14:35:56
Re: Prozesse unter andere Benutzerid
Sowas hb ich mir schon vor Monaten geschrieben, inclusive
Abgleich mit /etc/password und Userid 0 (root) wird nicht zugelassen.
Damit starte ich eigene Daemons usw mit der entsprechenden userid.
Das Teil heißt bei mir runas. Die libpferd wird nur für das Entfernen
des \n am Befehlsende usw gebraucht - läßt sich sicherlich auch
anders regeln. Ist auch sicherlich, da ich aus der Z/OS-Welt komme und
mir C selbst beigebracht habe, nicht wirklich perfekt - aber es funktioniert
problemlos..
Abgleich mit /etc/password und Userid 0 (root) wird nicht zugelassen.
Damit starte ich eigene Daemons usw mit der entsprechenden userid.
Das Teil heißt bei mir runas. Die libpferd wird nur für das Entfernen
des \n am Befehlsende usw gebraucht - läßt sich sicherlich auch
anders regeln. Ist auch sicherlich, da ich aus der Z/OS-Welt komme und
mir C selbst beigebracht habe, nicht wirklich perfekt - aber es funktioniert
problemlos..
Code: Alles auswählen
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <libpferd.h>
char udatum[] = __DATE__;
char uzeit[] = __TIME__;
char befehl[2048];
uid_t nuserid;
int extuserid;
int rc = 0;
void hoerauf(void);
int main (int argc, char *argv[]) {
printf("RZ der Pferdefreunde Lindheim - Runas - Version 0.1\n");
printf("%s%s%s%s\n","Umandlumg am ",udatum,"-", uzeit);
if (argc != 3) {
printf("Nur 2 Argumente erlaubt\n");
printf("1. Argument - Usernummer\n");
printf("2. Argument - Befehlsstring in \"\n");
printf(" Beispiel runas 222 \"befehl arg1 arg2\"\n");
rc = 1;
hoerauf();
}
extuserid = atoi(argv[1]);
printf("%s%i\n","Userid = ",extuserid);
strcpy(befehl,argv[2]);
nonewline((char *) &befehl);
printf("%s%s\n","Befehl = ",befehl);
nuserid = extuserid;
if (nuserid == 0) {
printf("Userid Root aus Sicherheitsgruenden nicht erlaubt\n");
rc = 1;
hoerauf();
}
rc = setuid(nuserid);
if (rc != 0) {
printf("Wechsel Userid dumm gelaufe\n");
hoerauf();
}
rc = system(befehl);
hoerauf();
return 0;
}
void hoerauf(void) {
printf("%s%04i\n","Programm-Ende Runas - RC:", rc);
exit (rc);
}
Re: Prozesse unter andere Benutzerid
Pferdefreund hat geschrieben:
und
Da kommt man ja direkt ins wiehern......Die libpferd
![Razz :P](./images/smilies/icon_razz.gif)
und
soll bestimmt Umwandlung heißen....oder?"Umandlumg am ",udatum
-
- Beiträge: 3800
- Registriert: 26.02.2009 14:35:56
Re: Prozesse unter andere Benutzerid
Soll wirklich Umwandlung heißen - aber mit solchen Programmfehlern
kann ich leben. Ja, die libpferd liefert einige Hilfsroutinen, um mir
das Leben mit C etwas leichter zu machen. Da gibts dann auch
einen inspect wie im Cobol, einen MVC für Strings, wie im Assembler
und ähnliche Dinge, z. B Datumsformatierungen, Systemdatum usw...
kann ich leben. Ja, die libpferd liefert einige Hilfsroutinen, um mir
das Leben mit C etwas leichter zu machen. Da gibts dann auch
einen inspect wie im Cobol, einen MVC für Strings, wie im Assembler
und ähnliche Dinge, z. B Datumsformatierungen, Systemdatum usw...
Re: Prozesse unter andere Benutzerid
besonders schön finde ich ja
das ist noch echte Assembler-Tradition, jedes Byte zählt ![Very Happy :D](./images/smilies/icon_biggrin.gif)
Code: Alles auswählen
printf("Wechsel Userid dumm gelaufe\n");
![Very Happy :D](./images/smilies/icon_biggrin.gif)
Beware of programmers who carry screwdrivers.
-
- Beiträge: 3800
- Registriert: 26.02.2009 14:35:56
Re: Prozesse unter andere Benutzerid
Tja, so war das früher - wir haben sogar bei gepacken Datumsfeldern
das Vorzeichen im rechten Halbbyte entfernt und so bei Meldezeiten z. B
pro Datumsfeld ein Byte gespart - bei Millionen von Datensätzen hatte sich
das gerechnet. Da wurden aus 4 Byte für dec fixed 7 dann 3 Byte - und
das pro Datumsfeld - da kamen schon ein paar MB zusammen...
Byte 1 2 3 4
Original war hex 0881220C für das 6-stellige datum 881220 (20.12.1988)
881220
das Vorzeichen im rechten Halbbyte entfernt und so bei Meldezeiten z. B
pro Datumsfeld ein Byte gespart - bei Millionen von Datensätzen hatte sich
das gerechnet. Da wurden aus 4 Byte für dec fixed 7 dann 3 Byte - und
das pro Datumsfeld - da kamen schon ein paar MB zusammen...
Byte 1 2 3 4
Original war hex 0881220C für das 6-stellige datum 881220 (20.12.1988)
881220
Re: Prozesse unter andere Benutzerid
genau so geht's, deshalb werde ich auch nie verstehen, warum die 12- und 24-Bit Architekturen so gut wie ausgestorben sind. Die Wortbreiten passen viel besser zum wirklichen Leben als 8 oder 16 Bit. Obwohl, DEC hat auf der PDP11 statt ASCII RAD50 verwendet. Damit passen drei Zeichen in ein 16-Bit Wort und wer braucht schon Kleinbuchstaben oder Sonderzeichen. Jedenfalls gab's keinen Stress mit Zwischenraum in Dateinamen.
Beware of programmers who carry screwdrivers.