[PHP] exec() Userproblem

Fallwrrk

Urgestein
Thread Starter
Mitglied seit
11.12.2011
Beiträge
5.638
Ort
NRW
Mojnsen!

Ich möchte für ein paar Jungs bei uns aufm TeamSpeak ein winzig kleines Dashboard erstellen, welches nur dazu dient, um per exec() oder system() oder wasweißich unsere kleine Audioritze, also den Musikbot, zu starten oder zu beenden. Das möchte ich deshalb so realisieren, weil der Bot doch schon einen ordentlichen Haufen meiner geringen Ressourcen frisst und weil die Jungs nicht alle die technikaffinsten sind und ich denen deshalb, neben den Sicherheitsbedenken, lieber keinen SSH-Zugriff gewähre. Nun stoße ich aber vor die Sicherheitslimitierungen eines UNIX-Systems. Nginx und PHP laufen selbstverständlich als der User www-data. Der TS läuft aber zusammen mit der Audioritze auf dem User teamspeak und auch nur der User teamspeak kann TS und Bot starten (abgesehen von root). Dementsprechend kann ich den natürlich nicht starten, neben der Tatsache, dass ich den eigentlich auch gar nicht als User www-data starten will. Jetzt fallen mir nur die folgenden Lösungen ein, wobei ich weiß, dass die Lösung eigentlich so nah und einfach ist:

  1. Root-Passwort im PHP-Script hintergelegen (gewaltige Katastrophe)
  2. Passwort des Users "teamspeak" im Script hinterlegen (genauso bescheuert)
  3. PHP als Root laufen lassen (genauso durch wie Punkt 1)
Natürlich könnte ich jedes Mal das Passwort des Users "teamspeak" abfragen, wenn jemand den Bot starten/ neustarten/ killen möchte, aber das kann doch auch nicht die Lösung sein. Bin mir sicher, dass dann alle zwei Tage wieder nach dem Passwort gefragt wird, weil man es wieder vergessen, verloren oder in sonstiger Weise misshandelt hat.

Bietet PHP da vllt was ganz Einfaches, was ich bisher übersehen habe? Oder gibt es wirklich nur diese drei (bzw. vier) Möglichkeiten?

mfg Marcel
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Falls es nicht zu zeitkritisch ist, lös das ganze doch über einen Cron-Job, der abhängig von der Existenz oder dem Inhalt einer Datei euren Bot startet, beendet/killt oder durchstartet.
Der Cron kann dann ruhig als root oder was auch immer laufen und dein PHP-Script würde mit sehr niedrigen rechten auskommen.
Nachteil ist dabei halt, dass Cronjobs nur im Minutentakt durchlaufen.
 
Zuletzt bearbeitet:
Wieso kannst Du nicht das Passwort vom user "Teamspeak" im Script hinterlegen? Jedes CMS mit Configfile macht das z.B. für den MySQL Zugang. Das ist gang und gäbe.
 
Zuletzt bearbeitet:
@Cobrion: Das wäre tatsächlich eine Idee. Zeitkritisch ist das nicht. Die können sich ruhig auch ne Minute gedulden. ;)

@Ali: MySQL und nen Useraccount lässt sich nicht vergleichen. Dem MySQL könnte ich anweisen, dass er nur bestimmte Nutzer sich anmelden lässt. Wenn aber jemand sich das Passwort vom Teamspeak-User holt, kann der ne Menge Müll unter fremdem Namen machen. Da hatte n Bekannter mal ganz derbe Probleme wegen Warez auf seinem Server.
 
Alternativ kannst du auch einen Eintrag in der /etc/sudoers anlegen, welcher dem User www-data erlaubt Prozesse im Namen von deinem TS User OHNE Passwort zu starten.
Mittels exec kannst du dann den Befehl "sudo -u teamspeak /hier/dein/start/befehl" ausführen.


Der sudoers Eintrag müsste glaube in etwa so ausschauen:

www-data ALL = (teamspeak) NOPASSWD: /hier/dein/pfad/zum/start/script
 
Das kenn ich noch gar nicht. Heißt das, dass www-data dann nur bestimmte Befehle ausführen kann?
 
du könntest den www-data (und ggf teamspeak) auch einfach in eine Gruppe schmeißen und dann entsprechend Rechte/Gruppe auf die aufzurufende Datei setzen. Das wäre wohl die einfachste Variante.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh