LINUX.ORG.RU

<?php
system(«sudo script.php»);
?>

только /etc/sudoers подправь

kam ★★
()
Ответ на: комментарий от Bers666

ничего не понял... Так как сделать правильно?

ssbury
() автор топика

А не лучше сделать владельцем скрипта рута и поставить suid-бит? Только надо быть на все 100% уверенным, что скрипт ничего не натворит, и никакой rootkit через него не залезет. И да, такой скрипт - хороший backdoor, можно вообще сделать http-терминал с правами рута, и, как только уволили... :)

Eddy_Em ☆☆☆☆☆
()

Набросок идеи:

/usr/local/sbin/my_root_proga.sh:

#!/bin/sh

read secret command args

sleep 1
[ «${secret}» != 'some_secret_string' ] && {
echo 'permissions denied'
exit 1
}

case «${command}» in
fs.ls)
/bin/ls ${args}
;;
sys.user.list)
getent passwd
;;
*)
echo 'Unknown command'
;;
esac
exit 0

Далее /etc/xinetd.d/my_root_proga:
service my_root_proga
{
id = myRootProgaId
type = UNLISTED
disable = no
port = 2345
socket_type = stream
protocol = tcp
wait = no
user = root
passenv = PATH
server = /usr/local/sbin/my_root_proga.sh
env = HOME=/tmp
bind = 127.0.0.1 # или просто закомментарьте
}

Далее:
killall -HUP xinetd

Далее, (если параметр 'bind' не был указан в настройке xinetd) /etc/hosts.allow:

myRootProgaId: <ip-адреса, кто может стучаться к сервису>

Далее, если есть SELinux:
semanage port --add --type 'http_port_t' 12345

/прочие системы укрепления безопасности уже изучайте сами/

Далее, из php открывайте сокет и пишите в него
<пароль> <команда> <параметры>
Читайте из него ответ. Всё.

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

спасибо за ответ. Если не влом покажи пожалуйста как правильно принять данные из скрипта в php.

ssbury
() автор топика
Ответ на: комментарий от Slavaz

если я правильно понял я должен сначала создать сокет и передать в него параметры при помощи функции socket_write(). Можете все таки набрасать небольшой примерчик «для лучшего уразумения» правильного вызова socket_write().

ssbury
() автор топика
Ответ на: комментарий от Slavaz

если я правильно понял скрипт не должен крутится постоянно его перезапустит сам xinetd? . И строку вы указали только для теста read secret command args или ее наличие необходимо?

ssbury
() автор топика
Ответ на: комментарий от ssbury

> если я правильно понял скрипт не должен крутится постоянно его перезапустит сам xinetd?
да

И строку вы указали только для теста read secret command args или ее наличие необходимо?

необходимо. Это команда интерпретатора bash.

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

Зделал все по примеру:
$in = «world world»;
$out="";

socket_write($socket, $in, strlen($in));
while($out = socket_read($socket, 2048)) { echo $out; }

браузер ожидает до бесконечности, к самому демону подсоединится могу по
#telnet localhost xxx [enter]
ля-ля [enter]
permissions denied.
#
Вроде все правильно.
«ля-ля» конечно так для проверки. что не так?

ssbury
() автор топика
Ответ на: комментарий от ssbury

все нашел ошибку сам. надо было
$in = «world world\n»;
пока вроде все нормально но как можно некий таймаут ожидания указать?

ssbury
() автор топика
Ответ на: комментарий от Slavaz

Так я же использую socket_connect и соответственно функции socket_*, а там fsockopen на сколько я понял это разные вещи.

ssbury
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.