Csinaltam egy kis WEB UI-t egy Raspberry PI 3-hoz WIFI vegpontok tesztelesehez (hostapd+freeradius+dnsmasq).
van egy bash scriptem, amely parancsait a php shell_exec hivja meg: shell_exec('/usr/bin/sudo' . ' ' . $scriptnev . ' ' . '"parancs"' . ' ' . '"parameter1"' . ' ' . '"parameter2"');
a parancs a bash scriptben egy case valtoval van megoldva [szep magyar szenvedo szerkezet :-)]
php-n keresztul meghivva egy dolgot leszamitva minden rendesen mukodik.
A nem mukodo dolog:
shell_exec('/usr/bin/sudo' . ' ' . $scriptnev . ' ' . '"hostapd"');
a bash scriptben
case "$1" in
hostapd)
/usr/bin/python /mnt/WEB/oldal/scripts/hostapd.py
;;
*)
exit 1
esac
szerepel
ha kezzel futtatom a:
./script hostapd
parancsot, akkor rendben lefut
ha kezzel futtatom a kerdeses php filet:
php fileom.php
parancsot, akkor is rendben lefut
de bongeszobol hivva nem fut le.
ez a hostapd python script a: hostapd_cli -iwlan0 all_sta parancsot feldolgozva torli az osszes stationt: hostapd_cli -iwlan0 disassociate
Mert nem mukodik bongeszobol meghivva?
nginx error logja teljesen ures
- 937 megtekintés
Hozzászólások
Helló,
nginx kinek a nevében fut? (és főleg /etc/sudoers -ben van neki bejegyzés? Futtathatja ezt?)
KoviX
- A hozzászóláshoz be kell jelentkezni
arch linux
http a futtato neve es csoportja
termeszetesen van bejegyzes a sudoersben, hiszen mint irtam a bash script osszes tobbi parancsa lefut
(a case elosztoban van 10 bejegyzes es csak a hostapd nem fut le [pl. radiushoz tanusitvanycserek, amik csak root jogosultsaggal irhatok felul, mukodik])
- A hozzászóláshoz be kell jelentkezni
Szerintem is a sudoers az egyik, ahol körülnéznék, a másik esetleg a SELinux, ha használod, mert más kontextusból hívja a webszerver, mint az interaktív shell, s a védelem éppen ezen alapul, hogy az adott kontextusban mást szabad tennie egy programnak.
Szerk.: Ilyenkor érdemes valami debugot írni a programba. Például
echo -e "`date`\tParams: '""$*""'" >>/home/valaki/debug.txt
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
A hostapd minek van idézőjelben? Nincs benne szóköz. Kérdés, hogy literálisként dolgozódik-e fel a macskaköröm, vagy valóban idézőjelként, amely részleges elzárás a shelltől? Mivel itt teljesen felesleges, szerintem szedd ki, elég az aposztrof, azon belül nem kell az idézőjel is.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Kiprobaltam idezojel nelkul; ugyanaz a hiba
sztem itt a hostapd_cli kimenete lesz a ludas...
ha a scriptemben a feldolgozott valzotokat kiiratom egy fajlba, akkor php fajlt futtatva vagy a bash scriptet futtatva beleirja a kivant valtozokat a fajlba;
ellenben ha a bongeszobol hivom meg, akkor ures a fajl.
a python script:
#!/usr/bin/env python
import subprocess
import re
hostapd_cli_cmd = ['/usr/bin/hostapd_cli', '-i', 'wlan0', 'all_sta']
p = subprocess.Popen(hostapd_cli_cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
macreg = r'^('+r'[:-]'.join([r'[0-9a-fA-F]{2}'] * 6)+r')$'
for line in p.stdout.readlines():
if re.match(macreg, line.decode("utf-8") ):
print(line.decode("utf-8"), file=open("/mnt/output.txt", "a"))
hostapd_removesta = ['/usr/bin/hostapd_cli', '-i', 'wlan0', 'disassociate', line.decode("utf-8")]
p2 = subprocess.Popen(hostapd_removesta, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
persze meg nem jovok ra, hogy mi lehet a hiba...
- A hozzászóláshoz be kell jelentkezni
Anélkül, hogy nagyon gondolkodnék, ilyen rejtélyes hiba gyakran abból származik, hogy mások a környezeti változók az interaktív shellben, mint abban a környezetben, ahol szeretnéd, hogy működjön ez az egész. Viszont remekül lehet debugolni, mert a shell scriptből is bármit logolhatsz, php-ből is, pythonból is, szóval belátható idő alatt meglesz ez.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Mar mindent kiprobaltam es erre jutottam:
ha bongeszobol nyitom meg az oldalt, akkor ezt a hibauzenetet kapom egy sor fajlba irasa utan. (a script egyebkent meglehetosen sokaig fut > 10-15 sec)
'STA-FIRST' command timed out.
Szoval az van hogy timeouttal elhasal a hostapd_cli php fajlbol valo hivas eseten.
- A hozzászóláshoz be kell jelentkezni
Egy workarounddal megy.
A hostapd_cli -t lecsereltem iw -re
iw dev wlan0 station dump
iw dev wlan0 station del "$sta"
Ezzel tokeletesen mukodik.
Lenyeg a lenyeg: sztem valami nem stimmel a hostapd_cli kimenetevel nalam; 3 nap utan feladtam...
U.I.: koszonom a hozzaszolasaidat
- A hozzászóláshoz be kell jelentkezni
requiretty -et kommentezd ki a sudoersben, mar ha van
- A hozzászóláshoz be kell jelentkezni
Nem, nem volt benne, de koszonom a tippet.
- A hozzászóláshoz be kell jelentkezni