Process futtatása más felhasználóval (PHP, Apache2 és php-fpm)
Üdv mindenkinek!
Debian alatt szeretnék futtatni cli parancsokat php-vel, egy bizonyos felhasználóval.
Jelenlegi állás szerint Apache2 van felrakva fcgid-vel, ami a megfelelő php-fpm pool-lal kommunikál. Ez a pool "webuser" felhasználóval és "www-data" csoporttal fut.
Ha ebben az esetben futtatok egy parancsot, akkor az ugyan ezzel a felhasználóval fog futni. Ez az, amin változtatni szeretnék. /webuser helyett www-data felhasználóval szeretném futtatni a parancsot, sudo nélkül/
Processz indulásakor nem várok annak a befejeződésére, hanem a háttérbe passzolom, valamint kiíratom a PID-t, amit eltárolok, és az szerint ellenőrzöm, hogy fut-e még.
/Mielőtt nekiálltam sudo-t használni, minden működött./
Gondoltam, "sudo -u www-data" -val megoldódik minden problémám, de azt nem vettem számításba, hogy az overhead mellett így a sudo pid-jét kapom vissza. Ezt hiába lövöm le, az általa futtatott processz tovább fut.
Hogy lenne a legcélszerűbb megoldani azt, hogy leállítható maradjon a sudo által futtatott folyamat illetve annak a pid-jét kapjam vissza?
Extra info:
A parancsokat az exec() függvénnyel adom ki.
Startnál basically: sudo -u www-data **COMMAND** > /dev/null 2>&1 & echo $!
- pid lementve
Stop: sudo kill **PID** -10mp várakozás- ha nem állt le: sudo kill -9 **PID**
■ Debian alatt szeretnék futtatni cli parancsokat php-vel, egy bizonyos felhasználóval.
Jelenlegi állás szerint Apache2 van felrakva fcgid-vel, ami a megfelelő php-fpm pool-lal kommunikál. Ez a pool "webuser" felhasználóval és "www-data" csoporttal fut.
Ha ebben az esetben futtatok egy parancsot, akkor az ugyan ezzel a felhasználóval fog futni. Ez az, amin változtatni szeretnék. /webuser helyett www-data felhasználóval szeretném futtatni a parancsot, sudo nélkül/
Processz indulásakor nem várok annak a befejeződésére, hanem a háttérbe passzolom, valamint kiíratom a PID-t, amit eltárolok, és az szerint ellenőrzöm, hogy fut-e még.
/Mielőtt nekiálltam sudo-t használni, minden működött./
Gondoltam, "sudo -u www-data" -val megoldódik minden problémám, de azt nem vettem számításba, hogy az overhead mellett így a sudo pid-jét kapom vissza. Ezt hiába lövöm le, az általa futtatott processz tovább fut.
Hogy lenne a legcélszerűbb megoldani azt, hogy leállítható maradjon a sudo által futtatott folyamat illetve annak a pid-jét kapjam vissza?
Extra info:
A parancsokat az exec() függvénnyel adom ki.
Startnál basically: sudo -u www-data **COMMAND** > /dev/null 2>&1 & echo $!
- pid lementve
Stop: sudo kill **PID** -10mp várakozás- ha nem állt le: sudo kill -9 **PID**
SUID
Ha ennek ellenére szeretnél magadra bajt hozni, akkor a futtatandó parancs tulajdonosa legyen a céluser (tehát pl. www-data) és legyen beállítva rajta a SUID bit. Ezzel a parancs nem a meghívó, hanem a tulajdonos userként fog futni.
Példa
Vegyünk példának egy java alkalmazást:
Szeretném webes felületről elindítani, leállítani.
Az indításhoz és leállításhoz a topikindítóban leírtak szerint járok el jelenleg.
Viszont szeretném tudni leállítani, és elindítani webes felületről, bármikor -realtime-.
Rossz úton jársz
Ha tehetek egy javaslatot és a feladat megengedi, nézd meg a Docker API-t. Gyakorlatilag HTTP-n tudsz vele beszélgetni és lehetőséged van nagyon lightweight containereket indítani mindenféle feladatokra. (Értsd: alig eszik többet mint ha csak simán elindítod a programot.) Cserébe a Docker megoldja neked az egész szolgáltatás menedzsment kérdés.
Ha ez nem járható út, akkor viszont kénytelen leszel valami olyan daemont keresni vagy implementálni ami elintézi helyetted a szolgáltatások elindítását és leállítását, mert az Apache alól elindított folyamatokkal sok boldogtalanságnak nézel elébe.
Nincs erre valamelyik control
systemd?
systemd
Köszönöm a válaszokat
Ilyesmi úton indultam el. Mivel többször elég egyedi összeállítással kell dolgozni (különböző bin, paraméterek, stb.), írtam egy daemont, ami kezeli a parancsok futtatását. Ezt a systemd kezeli.
Socket-en lehet vele kommunikálni, tehát kipipáltam azt is, hogy remote lehessen parancsokat futtatni.
Elég fapados, tehát kb. annyival vagyok előrébb, hogy tudom futtatni a kívánt userrel a dolgokat és nem a webszerver child-processe.
Todo: multi-user support
PHP?
Pl ott az mcollective és az
Es nincs ilyen sexy apija