hostapd_cli + bash script + php

 ( Balu007 | 2017. május 15., hétfő - 23:04 )

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

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Helló,

nginx kinek a nevében fut? (és főleg /etc/sudoers -ben van neki bejegyzés? Futtathatja ezt?)

KoviX

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])

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

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

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

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.

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

requiretty -et kommentezd ki a sudoersben, mar ha van

Nem, nem volt benne, de koszonom a tippet.