Титла: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: h7d8 в Jul 02, 2014, 20:49 Здравейте.Опитвам се да подкарам баш скрипт,който да спира пппое и после да го пуска.Крайния резултат искам да бъде рестартиране на пппое клиента през уеб страница.
index.html Код: <html> inet.php Код: <?php resetnet.sh Код: #!/bin/bash До момента при изпълнение през уеб inet.php не изпълнява resetnet.sh.Предполагам,че проблема идва от правата. root@beast:/home/user/public_html/all# ls -l html/ total 12 -rwxr-xr-x 1 root www-data 123 Jul 2 19:29 index.html -rw-r--r-- 1 root www-data 63 Jul 2 20:23 inet.php -rwxr-xr-x 1 root www-data 93 Jul 2 20:33 resetnet.sh root@beast:/home/user/public_html/all# Ще се радвам на малко помощ. [_]3 Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: BRADATA в Jul 02, 2014, 21:01 http://stackoverflow.com/questions/16740802/how-to-make-a-system-call-remotely/22953339#22953339
Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: Naka в Jul 02, 2014, 23:34 php-то върви с привилегиите на apache.
и понеже имаш -rwxr-xr-x 1 root www-data 93 Jul 2 20:33 resetnet.sh r-x за всички други няма проблем с пермишъните на файла. а на самата директория /home/user/public_html/all/html/ дали имаш правилните пермишъни и може ли apache-то да влезе вътре? опитай и така exec("/bin/bash /home/user/public_html/all/html/resetnet.sh"); С exec() 2-ри и трети параметър може да хванеш изхода от командата и exitcode-то. тука гледам че има има още една функция. http://www.php.net/manual/en/function.shell-exec.php Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: h7d8 в Jul 03, 2014, 00:36
drwxr-xr-x 2 root www-data 4096 Jul 2 20:33 /home/user/public_html/all/html/ Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: h7d8 в Jul 03, 2014, 01:07 Пробвах следното:
inet.php Код: <?php В браузъра ми излиза следното съобщение: Цитат /usr/bin/poff: /bin/kill failed. None stopped. ls -la /etc/ppp/peers/dsl-provider -rw-r----- 1 root dip 141 Jan 23 2013 /etc/ppp/peers/dsl-provider Въпроса е дали да сменям "dip" на "www-data" или друг вариант? Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: wfw в Jul 03, 2014, 01:11 в /etc/group
намери реда, който започва с dip и добави след последното двуеточие www-data, ако вече имаш, а най-вероятно имаш потребител, го раздели със запетайка. трябва да изглежда така: dip:x:30:niki,www-data Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: h7d8 в Jul 03, 2014, 01:18 в /etc/group dip:x:30:xplod го промених на dip:x:30:www-data,xplod но пак няма ефект Цитат /usr/bin/poff: /bin/kill failed.Мисля си,че апачето няма права върху /usr/bin/poff и /usr/bin/pon Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: wfw в Jul 03, 2014, 01:26 Цитат usr/bin/poff: /bin/kill failed. None stopped. грешката е доста добре описана - само потребители на групата dip могат да използват тази команда. потребителя www-data вече е в тази група, значи не би трябвало това да е проблема... според мен poff е някакъв shell script, който в някакъв момент вика /bin/kill, който вече не е с правата, които трябва. може би трябва да послушаш BRADATA и да подкараш sudo. Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: h7d8 в Jul 03, 2014, 01:31 /usr/bin/pon
Цитат
/usr/bin/poff Цитат
Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: h7d8 в Jul 03, 2014, 01:42 Нещо елементарно бъркам.Просто искам някакъв баш скрипт през уеб да спре пппое клиента и да го пусне . :o
Цитат
Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: wfw в Jul 03, 2014, 09:25 Не е точно така, искаш потребител, който няма право, да убие процес на друг потребител, затова ти се дъни.
я покажи командата pppd с какви правa е? има лесен начин да правиш това през уеб сървъра, но не е много красив. Пишеш в 1 файл със скрипта, като примерно има само 0 или 1 във файла. Пускаш един крон с root и проверяваш на всяка минута какво има във файла. Ако има 1, пускаш pon и poff и записваш 0. Ако пише 0, само exit. Собственик на файла е уеб сървъра... :) Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: gat3way в Jul 03, 2014, 10:09 Всъщност е по-красив. Много лоша идея е да се изпълняват външни програми от уеб сървъра. Плаче за проблеми. Особено ако им се подава вход под формата на GET или POST параметри. И да не им се дава, пак е проблемно. Отваря широко вратата за DoS атаки.
Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: Naka в Jul 03, 2014, 21:58 Цитат това значи че трябва да направиш юзер apache да е член на групата dip. ------ Цитат dip:x:30:niki,www-dataзащо намесвате www-data ??? освен ако юзера apache не се казва www-data. поне в редхатските дистота httpd върви с името apache. С какъв юзер ти върви apache-тo? Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: pennywise в Jul 03, 2014, 22:40 На debian-ските user-a е www-data от същата група. Поне при Убунту и Дебиан е така.
Edit: На мен най ми харесва варианта на wfw с cron - прабвай да видиш дали така ще се получи. Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: wfw в Jul 03, 2014, 23:11 Цитат dip:x:30:niki,www-data Виж в първия пост още, файловете са с група www-data, така че е доста вероятно да съм познал... едит: основен проблем в случая е, че командата kill не работи, а не, че самите скриптове не работят, затова му предложих още един вариант за измъкване от ситуацията, освен този на БРАДАТА. Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: h7d8 в Jul 04, 2014, 01:36 Не е точно така, искаш потребител, който няма право, да убие процес на друг потребител, затова ти се дъни. Ще пробвам този вариант,ако имаш написан скрипт тестван може да подхвърлиш нещо.Ако нямаш аз ще го напиша само да имам време и ще го постна.Този вариант е по-добър.Май я карам парлапанската ( дали заради времето или пак заради времето ),само да не ми излезе през ноздрите. :) Благодаря! [_]3 Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: wfw в Jul 04, 2014, 09:02 най-лесния начин да запишеш 1 във файла, когато искаш да ресетнеш според мен е:
Код: #!/bin/bash после за крон-а, нещо от рода на: Код: #!/bin/bash не съм го тествал дали работи, но трябва да е нещо близко до това Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: edmon в Jul 04, 2014, 13:18 SuExec
CGI Са все неща които може да провериш, защо съществуват и кой келеш ги е измислил!:) Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: gat3way в Jul 04, 2014, 14:22 Цитат cat 1 > /path/to/file Освен ако нямаш файл кръстен "1" със съдържание "1", това няма да сработи. Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: wfw в Jul 04, 2014, 20:57 моя грешка.
echo 1 > /path/to/file Титла: Re: Изпълнение на баш скрипт през апаче уеб сървър Публикувано от: h7d8 в Jul 15, 2014, 21:02 Снощи ми остана малко време да прегледам до къде бях стигнал и какво в крайна сметка ще се получи от всичко до момента по темата.Днес също заделих малко време,защото смятам че е редно да публикувам крайния резултат и за в бъдеще да сработи идеята и при друг.
index.html Код: <html> inet.php Код: <?php resetnet.sh Код: #!/bin/bash Файловете index.html inet.php resetnet.sh се намират в директория,която се индексира от апачето и юзър различен от root. Под root се изпълняват следните файлове: inet.sh resetnet.sh (resetnet.sh е с различно съдържание от предходния!За удобство може да му бъде променено името,но и да бъде отразено в останалите файлове.) inet.sh Код: #!/bin/bash resetnet.sh Код: #!/bin/bash root@beast:~# crontab -l * * * * * /root/inet.sh >/dev/null 2>&1 root@beast:~# Скрипта се изпълнява всяка минута и проверява във файл data дали е 1 или 0,ако е 1 скрипта сваля pppoe връзката после я вдига и логва във файл inet.log Файла data съм го направил с права на апаче юзър и групата ( chown -R www-data:www-data data - така апачето може да записва 1 или 0 в този файл..при мен е www-data т.е дебиан ) root@beast:~# ls -la /home/user/public_html/all/inet/data -rwxr-xr-x 1 www-data www-data 2 Jul 15 20:38 /home/user/public_html/all/inet/data root@beast:~# Ако използвате този метод - дистанционно и ръчно да сваляте и вдигате пппое връзката е важно да ограничите достъпа до index.html до определен адрес,адреси или цяла подмрежа.Защо ми беше нужно това?Днс-ите на доставчика ми се шашкат (може и рутера при мен) и от време на време трябва да се убие пппое връзката,а после да се вдигне,а когато не сте наблизо или нямате време идва на помощ довереник,който без роот достъп да свърши тази задача.Към момента не коментирам възможността с реализация на скрипт,който да пингва даден адрес и ако има проблем с връзката да направи същото.Очаквам мнения и решения за нещо по читаво като изпълнение. :) Благодаря на съфорумците,които се включиха и ми спестиха време и нерви.Идеята не е моя и затова по [_]3 на автора и. (http://s8.postimg.org/hodc4srk5/linuxbg_reset_pppoe_client.jpg) |