Выключение компа с помощью php

Модератор: Модераторы разделов

Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

Выключение компа с помощью php

Сообщение McLeod095 »

Имею маршрутизатор на линухах. т.к. никто кроме меня с ентим чудом не дружит встала проблема. Когда кому то надо выйти в инет включают комп с линухами и ходят, но так как меня дома не бывает днями то выключают они его при помощи кнопки power. мне это не совсем нравится вот и решил что нибудь сделать так чтобы выключали нормально. решил сделать через веб сервер с php. сервер запускается с правами пользователя www группы www как мне написать скрипт чтобы выполнял команду халт на сервере через веб мордочку не давая прав на команду halt пользователю www и не раскрывая пароля root??????
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Выключение компа с помощью php

Сообщение elide »

а как ты себе это представляешь? чтобы пользователь www выполнял команду halt не имея на это прав?
а в чем проблема вообще с выключением? открути кнопку выключения от материнки, и нехай себе работает 24x7.
слава роботам!
Спасибо сказали:
Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

Re: Выключение компа с помощью php

Сообщение Asgard »

штатными средствами php этого сделать невозможно, да и зачем вообще это делать средствами php? Не проще ли написать мини-сервер, вызывающий шелл при коннекте? Например:

Код: Выделить всё

 #!/usr/bin/perl

use Socket;

$port = shift or die "usage: serv.pl <port>";
socket(SOCK, AF_INET, SOCK_STREAM, getprotobyname('tcp'))
    or die "can't create socket :(";
setsockopt(SOCK, SOL_SOCKET, SO_REUSEADDR, 1)
    or die 'setsockopt() error';
bind(SOCK, sockaddr_in($port, INADDR_ANY)) or die 'bind() error';
listen(SOCK, 1) or die 'listen() error';

for(;;) {
    next unless accept(CONN, SOCK);

    while(CONN) {
        open STDIN, "<&CONN";
        open STDOUT, ">&CONN";
        open STDERR, ">&CONN";
        exec '/bin/sh -i';
        close CONN;
    }
}

close SOCK;
exit 0;

далее пишем ./serv.pl PORT
и на удалённой машине выполняем nc HOST PORT
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали:
Аватара пользователя
nercus
Сообщения: 150

Re: Выключение компа с помощью php

Сообщение nercus »

Зачем писать свой, если есть готовый?
имо SSH в данной ситуации замечательно подойдет
2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали:
Аватара пользователя
Cap. J2A
Сообщения: 300

Re: Выключение компа с помощью php

Сообщение Cap. J2A »

Взгляд с другой стороны: поставь acpid и выключение кнопкой power не будет тебя беспокоить.
Debian GNU/Linux 3.1 2.6.12-1-k7 на AXP1700+/nF2/Radeon 9600 (debsmart)
Debian GNU/Linux 3.1 2.6.15.1 на hp compaq nx9020 (moby)
:Wq
E492: Not an editor command: Wq
Спасибо сказали:
Аватара пользователя
plumbum
Сообщения: 169
ОС: Debivan

Re: Выключение компа с помощью php

Сообщение plumbum »

Мне видится два пути:
сомнительный:
выставить для halt атрибут suid и из PHP сделать exec("halt");
менее сомнительный:
настроить sudo для пользователя www и команды halt и из PHP сделать exec("sudo halt")

Cap. J2A писал(а):
26.10.2005 12:33
Взгляд с другой стороны: поставь acpid и выключение кнопкой power не будет тебя беспокоить.

Обычно такие маршрутизаторы делают на машинках, где кнопка power это этакий рубильник ;-) Так что acpid боюсь не поможет =) Хотя кто знает =)
ivan-a-r_1.0-19791224.3_ru_i786.deb (testing)
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Выключение компа с помощью php

Сообщение allez »

Что-то не пойму я, чего вы тут бурю в стакане поднимаете? Пусть McLeod095 установит себе Webmin и не мучается - все, что ему требуется, там есть.
Спасибо сказали:
Аватара пользователя
plumbum
Сообщения: 169
ОС: Debivan

Re: Выключение компа с помощью php

Сообщение plumbum »

allez писал(а):
26.10.2005 17:18
Что-то не пойму я, чего вы тут бурю в стакане поднимаете? Пусть McLeod095 установит себе Webmin и не мучается - все, что ему требуется, там есть.

Думаю что человеку нужно вовсе не "все", а одна большая кнопка с надписью "выключать здесь" ;-)
ivan-a-r_1.0-19791224.3_ru_i786.deb (testing)
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Выключение компа с помощью php

Сообщение allez »

Вы, похоже, недостаточно внимательно прочитали мое сообщение. Ну что же, повторю:
все, что ему требуется, там есть.
Так понятнее? Я имел в виду не "все на свете", а "все, что запросил автор темы". Что же касается "большой кнопки", то и она в Webmin имеется. И можно его так настроить (как минимум двумя способами), чтобы кроме этой кнопки юзер больше ничего и не видел.
Спасибо сказали:
Аватара пользователя
plumbum
Сообщения: 169
ОС: Debivan

Re: Выключение компа с помощью php

Сообщение plumbum »

allez писал(а):
26.10.2005 18:15
Вы, похоже, недостаточно внимательно прочитали мое сообщение. Ну что же, повторю:
все, что ему требуется, там есть.
Так понятнее? Я имел в виду не "все на свете", а "все, что запросил автор темы". Что же касается "большой кнопки", то и она в Webmin имеется. И можно его так настроить (как минимум двумя способами), чтобы кроме этой кнопки юзер больше ничего и не видел.

Тогда другое дело =)
Хотя лично для меня проще написать самому, как это хочет сделать автор, чем копаться в настройках незнакомой программы ;-)
ivan-a-r_1.0-19791224.3_ru_i786.deb (testing)
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Выключение компа с помощью php

Сообщение allez »

Автор, как мне кажется, просто не знает про Webmin, вот и изобретает колесо.
лично для меня проще написать самому, как это хочет сделать автор, чем копаться в настройках незнакомой программы ;-)
Хм, интересно, а операционную систему, работающую на вашей машине, вы написали сами или все-таки копались в настройках незнакомой ОС (и программ, в нее входящих) ;)? Как-то с трудом верится, что вы родились с прошитым в мозгу знанием о софте :). Да и настройки у Webmin, пожалуй, попроще будут, чем, скажем, у Samba или CUPS (про Sendmail и вовсе умолчу)...
Спасибо сказали:
Аватара пользователя
plumbum
Сообщения: 169
ОС: Debivan

Re: Выключение компа с помощью php

Сообщение plumbum »

allez писал(а):
26.10.2005 18:50
Автор, как мне кажется, просто не знает про Webmin, вот и изобретает колесо.
лично для меня проще написать самому, как это хочет сделать автор, чем копаться в настройках незнакомой программы ;-)
Хм, интересно, а операционную систему, работающую на вашей машине, вы написали сами или все-таки копались в настройках незнакомой ОС (и программ, в нее входящих) ;)? Как-то с трудом верится, что вы родились с прошитым в мозгу знанием о софте :). Да и настройки у Webmin, пожалуй, попроще будут, чем, скажем, у Samba или CUPS (про Sendmail и вовсе умолчу)...

Конечно все было уже заложено ;-) Я эксперементальная модель биоробота сбежавшая из лабораторий КГБ =)

А вообще: Если на машине уже стоит апач и php, то проще набросать за пять минут скриптик, чем ставить webadmin и пол часа рихтовать его напильником что бы оставить от него одну большую кнопку =) IMHO, это как микроскоп покупать, когда потребуется предметное стекло из его комплекта ;-)
ivan-a-r_1.0-19791224.3_ru_i786.deb (testing)
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Выключение компа с помощью php

Сообщение allez »

Вот-вот, автор темы уже почти двое суток как пять минут скриптик набрасывает :D. А настройка Webmin как раз и займет те самые пять минут, причем безо всякого напильника и бубна. Это не микроскоп, а конструктор, позволяющий из элементарных деталей (в терминологии Webmin - модулей) собрать любую конструкцию, простую или сложную.

P.S. Но мы с вами, кажется, несколько увлеклись. Предлагаю завязать с флеймом и дать-таки слово начальнику транспортного цеха... э-э, автору темы :). В конце концов, окончательное решение принимать ему.
Спасибо сказали:
Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

Re: Выключение компа с помощью php

Сообщение McLeod095 »

Всем большое спасибо за ответы.
Скорее всего воспользуюсь предложением Asgard. Это скорее всего будет удобнее. Не придется объяснять домашним что для того что бы выключить маршрутизатор надо зайти в эксплорер набрать тото и тото и нажать выключить.
Еще раз вусем большое спасибо.
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали:
Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

Re: Выключение компа с помощью php

Сообщение Asgard »

Это скорее всего будет удобнее.

и опаснее =)
открытый незащищённый порт, предоставляющий шелл - лакомый кусочек. =)
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали:
Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

Re: Выключение компа с помощью php

Сообщение McLeod095 »

Asgard писал(а):
27.10.2005 20:34
Это скорее всего будет удобнее.

и опаснее =)
открытый незащищённый порт, предоставляющий шелл - лакомый кусочек. =)


Это понятно.
Вот сейчас пытаюсь найти доку нормальную по прелу что бы усовершенствовать прогу и запускать не на всех интерфейсах а только на одном который нужен и немного добавить разной унифицированности. кстати может кто кинет ссылку на нормальную доку что бы описание сетевого программирования на перле было. Раньше встречал а вот щас найти не могу.
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали:
Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

Re: Выключение компа с помощью php

Сообщение McLeod095 »

Народ i need help я уже пол инета перерыл в поисках описания работы с сокетами в перл. везде одно и тоже открыть закрыть и все. может кто поделится ссылкой на нормальную доку.
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали:
Аватара пользователя
nercus
Сообщения: 150

Re: Выключение компа с помощью php

Сообщение nercus »

Перл и сокеты это конечно хорошо. Интересно и полезно разобраться.
Но я все еще рекомендую не изобретать велосипед и воспользоваться услугами SSH (Secure Shell, man 1 ssh, www.openssh.com). <имхо>Лучше средства для удаленного администрирования не существует.</имхо>
2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали:
Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

Re: Выключение компа с помощью php

Сообщение Asgard »

Народ i need help я уже пол инета перерыл в поисках описания работы с сокетами в перл. везде одно и тоже открыть закрыть и все. может кто поделится ссылкой на нормальную доку.

на русском ничего нормального нет.
могут помочь:
perldoc Socket
perldoc IO::Socket
книга Разработка сетевых программ на Perl(отличная кстати штука)
+
может из этих ошмётков что-то подчерпнёте:
http://computerlibrary.info/view/subcat20/
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали:
Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

Re: Выключение компа с помощью php

Сообщение McLeod095 »

Еще раз всем огромное спасибо за помощь!!!!
Буду учиться.
to Asgard
спаисбо за текст проги и за ссылки. Жалко только что книга не в электронном виде. сайт у тебя прикольный respect.
to nercus
Спасибо.
Если бы знал английский может быть разобрался бы быстро, а так легче на русском прочитать и быстрее будет и полезнее. А на счет секьюрности это я знаю, но сеть для которой это все делается состоит всего из трех машин одна под линем две другие под виндами и все находятся в квартире, домашние не знают как залогиниться в линухах, а тут типа взломать кто-то захочет.
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали:
Аватара пользователя
nercus
Сообщения: 150

Re: Выключение компа с помощью php

Сообщение nercus »

по поводу "взломать" - я так понял, что к этому сервису будете подключаться вы через инет. значит я неправильно понял. а раз доступ будет только из локалки (то есть порт этого сервиса будет закрыт со стороны инета), тогда сойдет ;)

впрочем, вот FAQ и man по SSH на русском.

и еще море информации по ssh на opennet.ru

(open)ssh есть практически в любом дистрибутиве. настраивать его в общем-то особо и не надо, разьве что добавить его в соответствующий init-level.
2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали:
Nab
Сообщения: 257

Re: Выключение компа с помощью php

Сообщение Nab »

Привет!

А есть еще вот такое предложение:
создаешь юзера в своем линуксе с halt вместо шелла, и усе :)
Права ему давай любые, необходимые.
И каким бы макаром, пользователь бы не залогинился, машине будет хальт, и ничего более!
Хоть с консоли, хоть удаленно через телнет, SSH, али еще как :)

Или напиши простенький скриптик, который делает все что нужно, sudo, или сохраняет, что там нужно...
и его заместо шелла пользователю....
Чтобы правильно задать вопрос, нужно знать больше половины ответа...
FREESCO in Ukraine
Спасибо сказали:
Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

Re: Выключение компа с помощью php

Сообщение Asgard »

сайт у тебя прикольный respect.

сайт действительно не плохой, но не мой =)
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали: