Доброго дня! Раскурил как направлять людей с локальной сети на адрес сервера, таким образом можно сделать уведомление, например: сегодня в сети с 15 до 16 будут производиться работы. Но это неудобно, пользователь будет все время редиректиться на эту страницу. Хотелось бы прикрутить например так: сегодня в сети с 15 до 16 будут производиться работы. (и чуть ниже кнопочка: Я УВЕДОМЛЕН) и по нажатию на эту кнопку в /etc/rc.firewall прописывается удаление правила перенаправления и перечитывание конфига ipfw.
Очень много покопавшись по форумам, повторяю ооочень много, но не нашел ничего дельного вовсе, а все что нашел, и попытался скрутить, даже вывод команды в файл не писало. Подскажите, как попроще сделать это? Или хотя бы подскажите, как обратиться к командному процессору из php? А дальше я бы сам разобрался
да, извне доступ к серверу закрывается, т.е. атаковать и исполнять кто-то левый обращения командного процессора не будет, только те, кто под шлюзом, а там врядли кому-то надо это делать
функцией exec (http://docs.php.net/manual/en/function.exec.php) давать команды ipfw (man ipfw)
> функцией exec (http://docs.php.net/manual/en/function.exec.php) давать команды ipfw
> (man ipfw)дело в том, что этой функцией можно давать комманды процессору /bin/sh. Но апач логинится под логином с ограниченными правами, поэтому требуется произвести вход в root. при написании что-то типа:
<?php
shell_exec('su');
shell_exec('пароль');
?>dmesg -a ввыписывает вот что:
Feb 5 13:59:12 srv2 su: BAD SU admin to root on tty
Feb 5 13:59:54 srv2 su: in prompt_echo_off(): tcgetattr(): Inappropriate ioctl for deviceа под пользователем www (который апач создал для себя), нет доступа к команде (хотя бы) ipfw show. Дальше как?
1. дать пользователю www такие права
2. есть такой роутер-дистр на базе FreeBSD, m0n0wall, у него интерфейс на php написан. Было дело, разбирался, так там все на exec'ах реализовано, в том числе и управление файрволлом. Можно расковырять.
Сслыка: http://m0n0.ch/wall/
Вот, еще нашел:"sudo can be executed without storing pass in a file
system('echo "PASS" | sudo -u root -S COMMAND');"
(http://docs.php.net/manual/en/function.shell-exec.php#101440)
> Вот, еще нашел:
> "sudo can be executed without storing pass in a file
> system('echo "PASS" | sudo -u root -S COMMAND');"
> (http://docs.php.net/manual/en/function.shell-exec.php#101440)блииин... даже не знаю в какую сторону курить, сайтом не понятно :(
есть хоть какая-нибудь наброска для php, что бы получить например ipfw show? Если не сложно?
>> Вот, еще нашел:
>> "sudo can be executed without storing pass in a file
>> system('echo "PASS" | sudo -u root -S COMMAND');"
>> (http://docs.php.net/manual/en/function.shell-exec.php#101440)
> блииин... даже не знаю в какую сторону курить, сайтом не понятно :(
> есть хоть какая-нибудь наброска для php, что бы получить например ipfw show?
> Если не сложно?Все гениальное просто. :)
Если стоит пакет sudo, тогда переходим ко вторй части марлезонского балета.
Если нет, то -
cd /usr/ports/security/sudo
make install clean
rehash
добавить в /usr/local/etc/sudoers
www ALL=NOPASSWD: /sbin/ipfw
если надо добавить что-то еще - то готовить по вкусуА теперь обещанная вторая часть
минимум
cat /usr/local/www/apache22/data/test.php<html>
<body>
<?php
print "<pre>";
echo system("/usr/local/bin/sudo /sbin/ipfw show");
print "</pre>";
?>
</body>
</html>Заходим, проверяем, любуемся :)
В качестве бонуса - exec() system() passthru() popen() и самое главное - escapeshellcmd()Вот такие дела..
> Вот такие дела..с виду просто, только я в итоге где-то накосячил, я менял группы и пользователей в httpd.conf
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User apache
Group apacheно ничего не проканало, все равно писал бэд пассворд, а сейчас поставил обратно www и www. Теперь ничего кроме hello, не выводит, даже на это:
hello!
<html>
<body>
<?php
print "<pre>";
echo system("/usr/local/bin/sudo ls /");
print "</pre>";
?>
<?php
exec('ls /');
?>
</body>
</html>может кто сталкивался? где же я так накосячил-то...?
зы. а раньше выводил корень, и даже dmesg -a выводил...
зыы. а на
<?php
shell_exec('su');
shell_exec('12345');
?>в dmesg выводит это:
Feb 6 18:16:46 srv2 su: BAD SU www to root on ttyэто уже значит апач работает под пользователем www. Почему же он не выводит тогда правила и прочее теперь?
зыыы... нашел что то в дмесге, вот это выплевывает на скрипт (в начале сообщения):
Feb 6 18:25:11 srv2 sudo: www : /usr/local/etc/sudoers is mode 0644, should be 0440 ; TTY=unknown ; PWD=/usr/local/www/apache22/data/hotspot ; COMMAND=ls
Feb 6 18:25:11 srv2 sudo: www : no valid sudoers sources found, quitting ; TTY=unknown ; PWD=/usr/local/www/apache22/data/hotspot ; COMMAND=lsчто значит mode 0644, should be 0440 ? и где это моде наверное прописывается?
зыыыы. вот что в sudoers прописано:www ALL=NOPASSWD: /sbin/ipfw
> с виду просто, только я в итоге где-то накосячил, я менял группы
> и пользователей в httpd.conf
> # User/Group: The name (or #number) of the user/group to run httpd
> as.
> # It is usually good practice to create a dedicated user and
> group for
> # running httpd, as with most system services.
> #
> User apache
> Group apacheХмм..
Вообще-то, при стандартной установке апача из портов по дефолту
User www
Group wwwЕсли от у вас apache
о в /usr/local/etc/sudoers
вместо
www ALL=NOPASSWD: /sbin/ipfw
нужно
apache ALL=NOPASSWD: /sbin/ipfwно, в таком случае, пользователь apache должен быть в системе!
>[оверквотинг удален]
> Вообще-то, при стандартной установке апача из портов по дефолту
> User www
> Group www
> Если от у вас apache
> о в /usr/local/etc/sudoers
> вместо
> www ALL=NOPASSWD: /sbin/ipfw
> нужно
> apache ALL=NOPASSWD: /sbin/ipfw
> но, в таком случае, пользователь apache должен быть в системе!это я понял, уже все сделал, может тупо сам апач переустановить... блин. за ним и пхп потянется и это еще мороки надолго, может тупо заменить httpd.conf? или где может быть косяк?
уже даже серв ребутнул, благо есть возможность
>[оверквотинг удален]
>> о в /usr/local/etc/sudoers
>> вместо
>> www ALL=NOPASSWD: /sbin/ipfw
>> нужно
>> apache ALL=NOPASSWD: /sbin/ipfw
>> но, в таком случае, пользователь apache должен быть в системе!
> это я понял, уже все сделал, может тупо сам апач переустановить... блин.
> за ним и пхп потянется и это еще мороки надолго, может
> тупо заменить httpd.conf? или где может быть косяк?
> уже даже серв ребутнул, благо есть возможностьВот это - 100% работает :)
<html>
<body>
<?php
print "<pre>";
echo system("man man | col -b");
print "</pre>";
?>
</body>
</html>
<html>
<body>
<?php
function message($msg){
echo "$msg";
flush();
}
message("<p>Results:<blockquote>");
$cmd=("ping -c5 ya.ru");
if (! $msg .= trim(nl2br(`ping -c5 ya.ru`)))
$msg .= "</blockquote></p>";
message($msg);
?>
</body>
</html>
<html>
<body>
<?php
exec("ls -al .",$output);
foreach($output as $file)
print "$file
";
?>
</body>
</html>
> Feb 6 18:25:11 srv2 sudo: www
> : no valid sudoers sources found, quitting ; TTY=unknown ; PWD=/usr/local/www/apache22/data/hotspot
> ; COMMAND=lsну не знаю... может путь к бинарнику криво прописан?
но вот:<html>
<body>
<?php
print "<pre>";
echo system("/usr/local/bin/sudo /sbin/ipfw show");
print "</pre>";
?>
</body>
</html>srv2# whereis sudo
sudo: /usr/local/bin/sudo /usr/local/man/man8/sudo.8.gz /usr/ports/security/sudo
>[оверквотинг удален]
> зыыы... нашел что то в дмесге, вот это выплевывает на скрипт (в
> начале сообщения):
> Feb 6 18:25:11 srv2 sudo: www
> : /usr/local/etc/sudoers is mode 0644, should be 0440 ; TTY=unknown ;
> PWD=/usr/local/www/apache22/data/hotspot ; COMMAND=ls
> Feb 6 18:25:11 srv2 sudo: www
> : no valid sudoers sources found, quitting ; TTY=unknown ; PWD=/usr/local/www/apache22/data/hotspot
> ; COMMAND=ls
> что значит mode 0644, should be 0440 ? и где это моде
> наверное прописывается?chmod 0644 /usr/local/etc/sudoers
> зыыыы. вот что в sudoers прописано:
> www ALL=NOPASSWD: /sbin/ipfw
>[оверквотинг удален]
>> : /usr/local/etc/sudoers is mode 0644, should be 0440 ; TTY=unknown ;
>> PWD=/usr/local/www/apache22/data/hotspot ; COMMAND=ls
>> Feb 6 18:25:11 srv2 sudo: www
>> : no valid sudoers sources found, quitting ; TTY=unknown ; PWD=/usr/local/www/apache22/data/hotspot
>> ; COMMAND=ls
>> что значит mode 0644, should be 0440 ? и где это моде
>> наверное прописывается?
> chmod 0644 /usr/local/etc/sudoers
>> зыыыы. вот что в sudoers прописано:
>> www ALL=NOPASSWD: /sbin/ipfwПротестите вышестоящие примеры, они безо всякого судо работают
> Протестите вышестоящие примеры, они безо всякого судо работаютFeb 6 19:02:35 srv2 sudo: www : /usr/local/etc/sudoers is mode 0644, should be 0440 ; TTY=unknown ; PWD=/usr/local/www/apache22/data/hotspot ; COMMAND=/sbin/ipfw
Feb 6 19:02:35 srv2 sudo: www : no valid sudoers sources found, quitting ; TTY=unknown ; PWD=/usr/local/www/apache22/data/hotspot ; COMMAND=/sbin/ipfw
chmod 0440 сделал для sudoers. вывело правила ipfw. спасибо друзья! теперь дуду курить как изменять правила :)
> chmod 0440 сделал для sudoers. вывело правила ipfw. спасибо друзья! теперь дуду
> курить как изменять правила :)В sudo нужно задать список всех команд, что будут выполняться. Для себя я так делал:
cat /usr/local/etc/sudoers | grep ipfw
www ALL = NOPASSWD: /sbin/ipfw show
www ALL = NOPASSWD: /sbin/ipfw pipe showcat ipfw.sh
#!/bin/shecho Content-type: text/plain
echo/usr/local/bin/sudo /sbin/ipfw show
cat dummynet.sh
#!/bin/shecho Content-type: text/plain
echo/usr/local/bin/sudo /sbin/ipfw pipe show
Скрипты выполняются апачем.
я решил пойти немного другим путем, может быть вопрос будет задан не там, но не подскажете, ли вы, как можно из формы, вытащить переменную и воспользоваться ею. Ну в общем кто не понял (хотя я думаю все не поняли;) ) я ввожу в поле номер пайпа, скорость, нажимаю кнопочку и все это изменяется. Чуть ниже тестовый скрипт, что бы тупо показывал номер пайпа из формы ввода. Так вот никак не могу скормить сюда: system("/usr/local/bin/sudo ipfw pipe $pipenum show"); номер пайпа.Скриптик примерно такой вышел:
<html>
<body><FORM ENCTYPE="multipart/form-data" ACTION="bandwidth.php" METHOD=POST>
Pipe number: <INPUT NAME="pipenum" TYPE="text">
Bandwidth: <INPUT NAME="bw" TYPE="text">
<INPUT TYPE="submit" VALUE="Cnahge">
</FORM><?php
print "<pre>";
system("/usr/local/bin/sudo ipfw pipe $pipenum show");
print "</pre>";?>
</body>
</html>вот одно не ясно, как указать в команде system("/usr/local/bin/sudo ipfw pipe $pipenum show");, на месте $pipenum, что нужно взять число из формы ввода? Тут-то оно ясно, что сейчас $pipenum берется откуда-то из переменных в самой системе, а такой-то переменной и нет. Может тупо писать инфу из формы ввода в файл, а потом как-нибудь через echo писать в файл .sh комманду для фаервола и исполнять ее? но это уже вообще закручено. вообще голова не варит, сижу уже 4 часа, сообразить не могу, как это сделать, впринципе все просто, я уверен, но вот... догадаться не могу. Вообще, если обобщить: как взять из формы и передать это командой?
может взять переменную, сначала подставить system("/usr/local/bin/sudo ipfw pipe потом подклеить $pipenum и еще подклеить show"); и передать сразу уже на исполнение для system?
чем дальше иду, тем сильнее зарываюсь, вот что по мотивам http://www.lissyara.su/articles/freebsd/programms/hotspot/ вышло:
<html>
<body><FORM ENCTYPE="multipart/form-data" ACTION="bandwidth.php" METHOD=POST>
Pipe number: <INPUT NAME="pipenum" TYPE="text">
Bandwidth: <INPUT NAME="bw" TYPE="text">
<INPUT TYPE="submit" VALUE="Cnahge">
</FORM><?php
echo ($_POST["pipenum"]);
define('EXECUTE', "/usr/local/bin/sudo ipfw pipe %s show");
define('PIPENUMBER', $pipenum);
$command = sprintf(EXECUTE, PIPENUMBER);
print "<pre>";
system($command);
print "</pre>";
?></body>
</html>теперь хоть что-то выводит, только все равно не то что нужно
короче вот, на этом закончилась моя фантазия, мозг и рабочий день:<html>
<body><FORM ENCTYPE="multipart/form-data" ACTION="bandwidth.php" METHOD=POST>
Pipe number: <INPUT NAME="pipenum" TYPE="text">
Bandwidth: <INPUT NAME="bw" TYPE="text">
<INPUT TYPE="submit" VALUE="Cnahge">
</FORM>
<?phpdefine('DEBUG', true);
define('EXECUTE1', '/usr/local/bin/sudo ipfw pipe ');
define('EXECUTE2', '231');
define('EXECUTE3', ' show');
$command = sprintf(EXECUTE1, EXECUTE2, EXECUTE3);
print "<pre>";
system($command);
print "</pre>";
echo ($_POST["pipenum"]);?>
</body>
</html>
по идее, введенное число в поле проходит через весь скрипт, и в итоге оказывается внизу, я тут попытался с помощью $command слепить 3 объявленные переменные и исполнить их )system($command); но увы, ничего не вышло :( с сожалением ложусь спатьзы. такое впечатление, что скрипт даже не выполняется!
и правда, не клеится скрипт почему-то, заработало вот так, но опять же без чтения из формы ввода:<html>
<body><FORM ENCTYPE="multipart/form-data" ACTION="bandwidth.php" METHOD=POST>
Pipe number: <INPUT NAME="pipenum" TYPE="text">
Bandwidth: <INPUT NAME="bw" TYPE="text">
<INPUT TYPE="submit" VALUE="Cnahge">
</FORM>
<?phpdefine('DEBUG', true);
define('EXECUTE1', '/usr/local/bin/sudo ipfw pipe %s show');
define('EXECUTE2', '230');
define('EXECUTE3', 'pipe show');
$pipenum = EXECUTE2;
$command = sprintf(EXECUTE1, $pipenum);
print "<pre>";
system($command);
print "</pre>";
echo ($_POST["pipenum"]);?>
</body>
</html>
в итоге прочитало пайп 230, блин, да как же вместо 230 подставить перемененную из поля ввода...
>[оверквотинг удален]
> $command = sprintf(EXECUTE1, $pipenum);
> print "<pre>";
> system($command);
> print "</pre>";
> echo ($_POST["pipenum"]);
> ?>
> </body>
> </html>
> в итоге прочитало пайп 230, блин, да как же вместо 230 подставить
> перемененную из поля ввода...Не знаю, что вы затеяли.. :), но наменяют они вам там скорость, ох и наменяют.
Хотя бы селектом в выпадающем списке задать конкретные значения и предлагать выбрать, а то ежели сами будут указывать, будут пихать в эту форму все-что ни попадя, небезопасно все это.А так..
<html>
<body>Show pipe?
<form method="post">
<input type="submit" value="OK" name="submit">
</form><?
if(isset($_POST['submit'])) pipeshow();function pipeshow() {
print "<pre>";
echo system("/usr/local/bin/sudo /sbin/ipfw pipe show");
print "</pre>";
}print 'Chage bandwidth?
Enter number pipe and new bandwidth
<form method="post">
<table border="0">
<tr>
<td>PIPE</td>
<td><input type="text" name="pipe"></td>
</tr>
<tr>
<td>BW</td>
<td><input type="text" name="bw"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="OK"><input type="reset" value="reset"></td>
</tr>
</table>
</form>';if(isset($_POST['pipe']) && isset($_POST['bw'])) {
if(empty($pipe[pipe])) {echo "<font color=red>ENTER PIPE!</font>"; exit;}
if(empty($bw[bw])) {echo "<font color=red>ENTER BW!</font>"; exit;}
checkpipe($pipe,$bw);
}function checkpipe($pipe,$bw) {
$cmd = escapeshellcmd("$cmd");
$cmd="/usr/local/bin/sudo /sbin/ipfw pipe $pipe show | grep $pipe:";
exec($cmd,$ouput,$return);
if($return==1) echo "<font color=red>PIPE NOT FOUND!</font>";
elseif($return==0) changepipe($pipe,$bw);
}function changepipe($pipe,$bw) {
$cmd = escapeshellcmd("$cmd");
$cmd="/usr/local/bin/sudo /sbin/ipfw pipe $pipe config mask dst-ip 0xffffffff bw $bw"."Kbit/s";
echo $cmd;
exec($cmd);
echo "<p><font color=green>Bandwidth for pipe $pipe changed on $bw successfully!</font></p>";
}
?>
</body>
</html>
Но немного лучше вот так (хотя повторюсь, не знаю ваших задач, вам виднее)<html>
<body>Show pipe?
<form method="post">
<input type="submit" value="OK" name="submit">
</form><?
if(isset($_POST['submit'])) pipeshow();function pipeshow() {
print "<pre>";
echo system("/usr/local/bin/sudo /sbin/ipfw pipe show");
print "</pre>";
}print 'Chage bandwidth?
Enter number pipe and new bandwidth
<form method="post">
<table border="0">
<tr>
<td>PIPE</td>
<td><input type="text" name="pipe"></td>
</tr>
<tr>
<td>BW</td>
<td>
<select name="bw">
<option></option>
<option>256</option>
<option>512</option>
</select>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="OK"><input type="reset" value="reset"></td>
</tr>
</table>
</form>';if(isset($_POST['pipe']) && isset($_POST['bw'])) {
if(empty($pipe[pipe])) {echo "<font color=red>ENTER PIPE!</font>"; exit;}
if(empty($bw[bw])) {echo "<font color=red>ENTER BW!</font>"; exit;}
checkpipe($pipe,$bw);
}function checkpipe($pipe,$bw) {
$cmd = escapeshellcmd("$cmd");
$cmd="/usr/local/bin/sudo /sbin/ipfw pipe $pipe show | grep $pipe:";
exec($cmd,$ouput,$return);
if($return==1) echo "<font color=red>PIPE NOT FOUND!</font>";
elseif($return==0) changepipe($pipe,$bw);
}function changepipe($pipe,$bw) {
$cmd = escapeshellcmd("$cmd");
$cmd="/usr/local/bin/sudo /sbin/ipfw pipe $pipe config mask dst-ip 0xffffffff bw $bw"."Kbit/s";
echo $cmd;
exec($cmd);
echo "<p><font color=green>Bandwidth for pipe $pipe changed on $bw successfully!</font></p>";
}
?>
</body>
</html>То есть вся разница в формах.
превосходно, правда пайп не меняется ;) пишет ENTER PIPE! Надо покурить...сделал даже тупо так:
<html>
<body>Show pipe?
<form method="post">
<input type="submit" value="OK" name="submit">
</form><?php
if(isset($_POST['submit'])) pipeshow();function pipeshow() {
print "<pre>";
echo system("/usr/local/bin/sudo /sbin/ipfw pipe show");
print "</pre>";
}print 'Chage bandwidth?
Enter number pipe and new bandwidth
<form method="post">
<table border="0">
<tr>
<td>PIPE</td>
<td><input type="text" name="pipe"></td>
</tr>
<tr>
<td>BW</td>
<td><input type="text" name="bw"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="OK"><input type="reset" value="reset"></td>
</tr>
</table>
</form>';function changepipe($pipe,$bw) {
$cmd = escapeshellcmd($cmd);
$cmd="/usr/local/bin/sudo ipfw pipe $pipe config bw $bw"."Kbit/s";
system($cmd);
echo "<p><font color=green>Bandwidth for pipe $pipe changed on $bw successfully!</font></p>";
}
?>
</body>
</html>все равно не меняет правила, что ж такое-то а...
> превосходно, правда пайп не меняется ;) пишет ENTER PIPE! Надо покурить...Так а пайп там и не меняется, изменяется только bw у pipe
Все пайпы заданы сразу же вначале (у меня во всяком случае).А вприведенном примере просто проверяется существующий пайп, если он найден - можно сменить bw, а если pipe не найден - то отлуп.
Повторюсь, у меня сразу же при запуске фаервла
pipe 128 config mask dst-ip 0xffffffff bw 256Kbit/s
pipe 256 config mask dst-ip 0xffffffff bw 512Kbit/s
pipe 512 config mask dst-ip 0xffffffff bw 1024Kbit/sномер пайпа сознательно так задан (изначально), чтобы легче ориентироваться по скорости (мне во всяком случае), а потом я могу, к примеру, ночью увеличить тупо в 2 раза скорость каждой трубы, ну или той которой мне нужно.
> Так а пайп там и не меняется, изменяется только bw у pipeну смотри, ввожу пайп и скорость тут:
<form method="post">
<table border="0">
<tr>
<td>PIPE</td>
<td><input type="text" name="pipe"></td>
</tr>
<tr>
<td>BW</td>
<td><input type="text" name="bw"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="OK"><input type="reset" value="reset"></td>
</tr>
</table>
</form>';
> Все пайпы заданы сразу же вначале (у меня во всяком случае).у меня тоже в фаерволе цикл что-то типа:
p=4
while [ $p != 254 ]
do${FwCMD} add pipe $p ip from not ${NetIn}/${NetMask} to 192.168.0.${p}
# Speed to all not in rules
${FwCMD} pipe $p config bw 256Kbit/s
(тра та-та, тра-та-та, и там где-то конец цикла, т.е. пайпы от 4 до 254 создались)> А вприведенном примере просто проверяется существующий пайп, если он найден - можно
> сменить bw, а если pipe не найден - то отлуп.пытаюсь поменять скорость у пайпа который ввел ($pipe), на скорость, которую ввел ($bw):
function changepipe($pipe,$bw) {
$cmd = escapeshellcmd("$cmd");
$cmd="/usr/local/bin/sudo ipfw pipe $pipe config bw $bw"."Kbit/s";
system($cmd);
echo "<p><font color=green>Bandwidth for pipe $pipe changed on $bw successfully!</font></p>";
}в итоге echo даже не вываливается, жму ОК, и все. как будто обновил страницу
что значит тут:
> $cmd = escapeshellcmd("$cmd");escapeshellcmd?
как с тобой связаться вне форума?
>[оверквотинг удален]
> $cmd = escapeshellcmd("$cmd");
> $cmd="/usr/local/bin/sudo ipfw pipe $pipe
> config bw $bw"."Kbit/s";
> system($cmd);
> echo "<p><font color=green>Bandwidth for
> pipe $pipe changed on $bw successfully!</font></p>";
> }
> в итоге echo даже не вываливается, жму ОК, и все. как будто
> обновил страницу
> как с тобой связаться вне форума?Я вроде exec а не system указывал в примере (разница между ними все-таки есть),
это во-первых, во-вторых, попробуй указать полный путь к ipfw , тоесть /sbin/ipfw
в консоли ipfw pipe show вывод что показывает?или в моем примере кнопочкой показать пайпы вывод есть? Скопируй мой пример полностью, и проверь
> Я вроде exec а не system указывал в примере (разница между ними
> все-таки есть),
> это во-первых,изменил обратно, думал нет разницы. косяк
> во-вторых, попробуй указать полный путь к ipfw , тоесть /sbin/ipfw
сделал, ниже покажу
> в консоли ipfw pipe show вывод что показывает?все те, что создались циклом, все верно, и допустим среди них 111 пайп есть, над которым я экспериментирую
> или в моем примере кнопочкой показать пайпы вывод есть?кусок:
00204: 256.000 Kbit/s 0 ms burst 0
q131276 50 sl. 0 flows (1 buckets) sched 65740 weight 0 lmax 0 pri 0 droptail
sched 65740 type FIFO flags 0x0 0 buckets 0 active
00136: 256.000 Kbit/s 0 ms burst 0
q131208 50 sl. 0 flows (1 buckets) sched 65672 weight 0 lmax 0 pri 0 droptail
sched 65672 type FIFO flags 0x0 0 buckets 0 active
00068: 256.000 Kbit/s 0 ms burst 0
q131140 50 sl. 0 flows (1 buckets) sched 65604 weight 0 lmax 0 pri 0 droptail
sched 65604 type FIFO flags 0x0 0 buckets 0 active
00205: 256.000 Kbit/s 0 ms burst 0
q131277 50 sl. 0 flows (1 buckets) sched 65741 weight 0 lmax 0 pri 0 droptail
sched 65741 type FIFO flags 0x0 0 buckets 0 active
00137: 256.000 Kbit/s 0 ms burst 0
q131209 50 sl. 0 flows (1 buckets) sched 65673 weight 0 lmax 0 pri 0 droptail
sched 65673 type FIFO flags 0x0 0 buckets 0 active
00069: 256.000 Kbit/s 0 ms burst 0
q131141 50 sl. 0 flows (1 buckets) sched 65605 weight 0 lmax 0 pri 0 droptail
sched 65605 type FIFO flags 0x0 0 buckets 0 active
00206: 256.000 Kbit/s 0 ms burst 0
q131278 50 sl. 0 flows (1 buckets) sched 65742 weight 0 lmax 0 pri 0 droptail
sched 65742 type FIFO flags 0x0 0 buckets 0 active
00138: 256.000 Kbit/s 0 ms burst 0
q131210 50 sl. 0 flows (1 buckets) sched 65674 weight 0 lmax 0 pri 0 droptail
sched 65674 type FIFO flags 0x0 0 buckets 0 active
> Скопируй мой пример полностью, и проверьскопировал тупо полностью, только вначале вместо <? добавил <?php. У меня короткие теги не понимает:
в итоге выводит мне: ENTER PIPE! Какие догадки?
>if(isset($_POST['pipe']) && isset($_POST['bw'])) {
> if(empty($pipe[pipe])) {echo "<font color=red>ENTER PIPE!</font>"; exit;
> if(empty($bw[bw])) {echo "<font color=red>ENTER BW!</font>"; exit;}
> checkpipe($pipe,$bw);но они ведь не empty. собственноручно туда забивал пайп 111 и скорость 512...
попробовал в другом браузере, то же самое
>[оверквотинг удален]
> lmax 0 pri 0 droptail
> sched 65742 type FIFO flags 0x0 0 buckets 0 active
> 00138: 256.000 Kbit/s 0 ms burst 0
> q131210 50 sl. 0 flows (1 buckets) sched 65674 weight 0
> lmax 0 pri 0 droptail
> sched 65674 type FIFO flags 0x0 0 buckets 0 active
>> Скопируй мой пример полностью, и проверь
> скопировал тупо полностью, только вначале вместо <? добавил <?php. У меня короткие
> теги не понимает:
> в итоге выводит мне: ENTER PIPE! Какие догадки?Хм.. ну если так пишет - тогда и нужно указать в поле PIPE тот пайп с которым эксперимент, то есть 111
навсякий случай, кидаю абсолютно рабочий код (проверил), кидаю в тегах коде<html>
<body>
Show pipe?
<form method="post">
<input type="submit" value="OK" name="submit">
</form>
<?php
if(isset($_POST['submit'])) pipeshow();function pipeshow() {
print "<pre>";
echo system("/usr/local/bin/sudo /sbin/ipfw pipe show");
print "</pre>";
}
print 'Chage bandwidth?<br />
Enter number pipe and new bandwidth
<form method="post">
<table border="0">
<tr>
<td>PIPE</td>
<td><input type="text" name="pipe"></td>
</tr>
<tr>
<td>BW</td>
<td>
<select name="bw">
<option></option>
<option>256</option>
<option>512</option>
</select>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="OK"><input type="reset" value="reset"></td>
</tr>
</table>
</form>';
if(isset($_POST['pipe']) && isset($_POST['bw'])) {
if(empty($pipe[pipe])) {echo "<font color=red>ENTER PIPE!</font>"; exit;}
if(empty($bw[bw])) {echo "<font color=red>ENTER BW!</font>"; exit;}
checkpipe($pipe,$bw);
}
function checkpipe($pipe,$bw) {
$cmd = escapeshellcmd("$cmd");
$cmd="/usr/local/bin/sudo /sbin/ipfw pipe $pipe show | grep $pipe:";
exec($cmd,$ouput,$return);
if($return==1) echo "<font color=red>PIPE NOT FOUND!</font>";
elseif($return==0) changepipe($pipe,$bw);
}
function changepipe($pipe,$bw) {
$cmd = escapeshellcmd("$cmd");
$cmd="/usr/local/bin/sudo /sbin/ipfw pipe $pipe config mask dst-ip 0xffffffff bw $bw"."Kbit/s";
echo $cmd;
exec($cmd);
echo "<p><font color=green>Bandwidth for pipe $pipe changed on $bw successfully!</font></p>";
}
?></body>
</html>
> Хм.. ну если так пишет - тогда и нужно указать в поле
> PIPE тот пайп с которым эксперимент, то есть 111так указываю ведь - 111
> навсякий случай, кидаю абсолютно рабочий код (проверил), кидаю в тегах коде:
я проклят, пишет ENTER PIPE!
мош в конфиге апача или php что криво прописано уже, а? сделал php.ini по умолчанию, ребутнул апач, нифига
какая версия php у вас установлена?
>> Хм.. ну если так пишет - тогда и нужно указать в поле
>> PIPE тот пайп с которым эксперимент, то есть 111
> так указываю ведь - 111
>> навсякий случай, кидаю абсолютно рабочий код (проверил), кидаю в тегах коде:
> я проклят, пишет ENTER PIPE!
> мош в конфиге апача или php что криво прописано уже, а? сделал
> php.ini по умолчанию, ребутнул апач, нифига
> какая версия php у вас установлена?Добейтесь, чтобы работало вот это
<html>
<body>
<?php
print '<form method="post">
PIPE<input type="text" name="pipe">
BW<select name="bw">
<option></option>
<option>256</option>
<option>512</option>
</select>
<input type="submit" value="OK">
</form>';if(isset($_POST['pipe'])){
$pipe=$_POST['pipe'];
echo "pipe=$pipe";
}
echo "<br/>";
if(isset($_POST['bw'])){
$bw=$_POST['bw'];
echo "bw=$bw";
}
?>
</body>
</html>PHP 5.3.4 Apache/2.2.17
выводит:pipe=111
bw=512все нормально, что дальше?
> выводит:
> pipe=111
> bw=512
> все нормально, что дальше?значит работает..
в этом коде (если все будет работать), уберите echo (там для проверки, чтобы вы проконтролировать переменные могли)
<html>
<body>Show pipe?
<form method="post">
<input type="submit" value="OK" name="submit">
</form><?php
if(isset($_POST['submit'])) pipeshow();function pipeshow() {
print "<pre>";
echo system("/usr/local/bin/sudo /sbin/ipfw pipe show");
print "</pre>";
}print 'Chage bandwidth?<br/>Enter number pipe and new bandwidth
<form method="post">
<table border="0">
<tr>
<td>PIPE</td>
<td><input type="text" name="pipe"></td>
</tr>
<tr>
<td>BW</td>
<td>
<select name="bw">
<option></option>
<option>256</option>
<option>512</option>
</select>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="OK"><input type="reset" value="reset"></td>
</tr>
</table>
</form>';if(isset($_POST['pipe']) && isset($_POST['bw'])) {
echo $pipe=$_POST['pipe'];
echo $bw=$_POST['bw'];
if(empty($pipe[pipe])) {echo "<font color=red>ENTER PIPE!</font>"; exit;}
if(empty($bw[bw])) {echo "<font color=red>ENTER BW!</font>"; exit;}
checkpipe($pipe,$bw);
}function checkpipe($pipe,$bw) {
$cmd = escapeshellcmd("$cmd");
$cmd="/usr/local/bin/sudo /sbin/ipfw pipe $pipe show | grep $pipe:";
exec($cmd,$ouput,$return);
if($return==1) echo "<font color=red>PIPE NOT FOUND!</font>";
elseif($return==0) changepipe($pipe,$bw);
}function changepipe($pipe,$bw) {
$cmd = escapeshellcmd("$cmd");
$cmd="/usr/local/bin/sudo /sbin/ipfw pipe $pipe config mask dst-ip 0xffffffff bw $bw"."Kbit/s";
echo $cmd;
exec($cmd);
echo "<p><font color=green>Bandwidth for pipe $pipe changed on $bw successfully!</font></p>";
}
?>
</body>
</html>
> значит работает..ААА! Спасибо! Заработало! Вот какой косяк был, не знаю :(
>> значит работает..
> ААА! Спасибо! Заработало! Вот какой косяк был, не знаю :(Получается, что в этом: добавлено только -
echo $pipe=$_POST['pipe'];
echo $bw=$_POST['bw'];ну и нужно эхо убрать и оставить только
$pipe=$_POST['pipe'];
$bw=$_POST['bw'];
а как бы скриптом отредактировать к примеру /etc/firewall.conf и сохранить изменения?
понимаю, что надо взять другую форму ввода, вывести в нее файл, а потом записать файл...
> а как бы скриптом отредактировать к примеру /etc/firewall.conf и сохранить изменения?
> понимаю, что надо взять другую форму ввода, вывести в нее файл, а
> потом записать файл...Несекьюрно все это, но если очень хочется - то можно.. ))
>> а как бы скриптом отредактировать к примеру /etc/firewall.conf и сохранить изменения?
>> понимаю, что надо взять другую форму ввода, вывести в нее файл, а
>> потом записать файл...
> Несекьюрно все это, но если очень хочется - то можно.. ))не, что не секьюрно знаю. несекьюрно было вообще, когда я сделал
> добавить в /usr/local/etc/sudoers
> www ALL=NOPASSWD: /sbin/ipfw:)
а правда, как сделать? может подкинете хотя бы идею, я постораюсь докурить сам
>>> а как бы скриптом отредактировать к примеру /etc/firewall.conf и сохранить изменения?
>>> понимаю, что надо взять другую форму ввода, вывести в нее файл, а
>>> потом записать файл...
>> Несекьюрно все это, но если очень хочется - то можно.. ))
> не, что не секьюрно знаю. несекьюрно было вообще, когда я сделал
>> добавить в /usr/local/etc/sudoers
>> www ALL=NOPASSWD: /sbin/ipfw
> :)
> а правда, как сделать? может подкинете хотя бы идею, я постораюсь докурить
> самПосмотрим, что можно сделать..
> а правда, как сделать? может подкинете хотя бы идею, я постораюсь докурить самПодкидываю.. )
Смотреть как сделаны на php гостевые книги, новостные ленты, публикаторы, форумы и т.д. и т.п.
Там много чему можно поучиться, примеров масса.
Но только для чего все это? КПД? Вот правда, непонимаю, ну откройте мне секрет, ответьте на сакраментальный вопрос, - А зачем это надо? В чём потаённый и глубинный смысл?
Ведь намного легче (быстрее, безопаснее, гибче - вставить по вкусу) все что хотите сделать через веб, можно сделать и через консоль, пусть и удаленную.> не, что не секьюрно знаю. несекьюрно было вообще, когда я сделал
>> добавить в /usr/local/etc/sudoers
>> www ALL=NOPASSWD: /sbin/ipfwА не согласен я с этим ))
У меня так сделано, но одно дело, когда правила фаервола ВЫПОЛНЯЮТСЯ через веб (для биллинга, иногда, нужно) и совсем другое дело, когда эти же самые правила, не только ВЫПОЛНЯЮТСЯ, но ещё и РЕДАКТИРУЮТСЯ через веб!Как насчет безопасности в таком случае?
Ведь гораздо легче по ssh отредактировать и запустить что нужно!Или всё это только для того, что бы поиграться? Так уж лучше установить webmin и usermin,
раздать нужные права да и рулить через веб, если сильно хочется.
Или вообще, установить себе webshell на php или perl (опять же для чего себе-то?)Короче, попробовал, я тут набросать чего-то там, проверил наскорую руку, но потом тормознул, ибо встают вопросы безопасности, хотябы со стороны веб-сервера apache, самого php (сессии, куки), встают вопросы резервирования, а ну как запорете конфиг фаервола и что потом? Одним словом, чем дальше в лес, тем ну его на фиг! ))
Или снова изобретать велосипед?
Мой ответ - лучше удаленки по ssh ничего нету.
Даже по мобиле рулить можно, при желании.Вот, такие дела..
> Но только для чего все это? КПД? Вот правда, непонимаю, ну откройте
> мне секрет, ответьте на сакраментальный вопрос, - А зачем это надо?
> В чём потаённый и глубинный смысл?хы. респект за речь :) ну собственно смысл, может быть глупо, но мне удобнее рулить фаерволом через веб. зашел на нужную страничку, вписал айпишник - оп, пользователю в инет доступ заблокирован. т.е. не надо писать ipfw add fwd ... ... ... ... php скрипт сделает это за меня, впринципе самое интересное я уже сделал, но вот теперь такая беда, у меня (конечно неправильно это, но мне так удобно) есть скрипт резки скорости на IP адреса под шлюзом, который работает по времени (по крону). Скрипта 4 штуки на разное время суток. Каждый из этих скриптов в определенное время суток копирует rc.firewall-01-09 в /etc/rc.firewall и ребутает правила фаервола. А rc.firewall'ов соответственно 4, так вот, например надо мне добавить пользователя, что бы не править все 4 файла с конфигами, удобнее было бы забить в php коде, добавить пользователя такого-то с такой-то входящей и исходящей скоростью. Удобно ведь? Чем лезть в консоль, вводить пароль, вводить su. проходить в директорию, ee конфиг и т.д., ведь это может сделать за тебя скрипт php с заранее записанными в нем действиями, а что бы левые не зашли в веб интерфейс управления ipfw, можно защитить каталог паролем, причем можно защитить каждый файл на сервере паролем. Еще играет роль интерес к php и интерес к написанию этого всего (скорее всего сам процесс написания и моральное удовлетворение от получившегося) :) вот
> Или вообще, установить себе webshell на php или perl (опять же для
> чего себе-то?)кроме вебмина, какой вебшел посоветуете?
> Короче, попробовал, я тут набросать чего-то там, проверил наскорую руку, но потом
> тормознул, ибо встают вопросы безопасности, хотябы со стороны веб-сервера apache, самого
> php (сессии, куки), встают вопросы резервирования, а ну как запорете конфиг
> фаервола и что потом? Одним словом, чем дальше в лес, тем
> ну его на фиг! ))дайте наброски, если не жалко =)
> Или снова изобретать велосипед?
я это люблю, как Вы заметили :)
> т.е. не надо писать ipfw add fwd ... ... ... ... php скрипт сделает это за меняВроде речь в предыдущих постах шла немного не об этом, я так думал, что надо просто редактировать основной скрипт ipfw для себя (rc.firewall для примера или какой-либо ещё)
Правила типа ipfw add таки все равно придется писать ручками )) о всяком случае в моем примере.> дайте наброски, если не жалко =)
Не вопрос, только хочу заметить, то, что выкладываю, рабочий вариант, не лишенный недостатков )), но это скорее всего, как пример, как вариант, не более. Не претендует на исключительность и полноту. ))
Там начисто не проработан механизм защиты, нет авторизации.
Вход по паролю, кукисы, сесии и защиту на файла на стороне apache оставляю в качестве домашнего задания. Можно (нужно, лучше) повесить и входить в отдельный вирт хост по https хотя бы с разрешенных ip (прописать на стороне апача)
Если вас ломанут, автор ответственности не несет, и т.д. и т.п. )) ну типа там распространяется как есть, без гарантий и тому подобное =)
Еще раз заявляю - это не руководство к действию, это лишь как пример, но может кому-либо и где-то пригодится.
Считайте, что вас предупредили!<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=koi8-r"/>
<title>Редактирование правил фаервола IPFW</title>
<style type="text/css">
body {font-family: Arial, Verdana;}
select {font: Verdana, Arial; background: GreenYellow;}
.d {font: Verdana, Arial; background: DeepPink;}
input {font: Verdana, Arial;}
textarea {font: "Lucida Console"; background: Seashell;}
</style>
</head>
<body><script language="javascript">
function del(theform){
var c=theform.filecur;
if (confirm("Are you sure?")) {
alert("DELETED");
return true;
}
else {
alert("OTMEHEHO");
c.focus();
return false;
}
}
</script><?php
// ОСНОВНАЯ ДИРЕКТОРИЯ
$dirmain="/etc";
// ДИРЕКТОРИЯ ДЛЯ БЭКАПА КОНФИГА IPFW
$dirbak="$dirmain/fwrulesbak";
// ОСНОВНОЙ КОНФИГУРАЦИОННЫЙ ФАЙЛ
$fileconf="rc.firewall";
$filemain="$dirmain/$fileconf";
?>Loading for edit the main or backup configuration file IPFW firewall rules?
<table cellpadding="3" cellspacing="2" border="0">
<tr>
<td>
<font color="blue">Load MAIN</font>
</td>
<td>
<font color="green">Load BACKUP</font>
</td>
<td>
<font color="red">Delete BACKUP</font>
</td>
</tr>
<tr>
<td>
<form method="post">
<input type="hidden" name="actionflag" value="loading">
<input type="hidden" name="dircur" value="/etc">
<input type="hidden" name="filecur" value=<?=$fileconf?>>
<input type="submit" value="OK" name="loadmain">
</form>
</td>
<td>
<form method="post">
<select name="filecur">
<?php
// ДЕЛАЕМ ВЫБОРКУ КОНФИГУРАЦИОННЫХ ФАЙЛОВ ИЗ ДИРЕКТОРИИ БЭКАПА
// ДЛЯ ВЫБОРОЧНОЙ ЗАГРУЗКИ И ДАЛЬНЕЙШЕГО РЕДАКТИРОВАНИЯ
if ($handle=opendir($dirbak)) {
while (false!==($file=readdir($handle))) {
if (!is_dir("$dirbak/$file") && $file!='.' && $file!='..') {
print "<option value='$file'>".$file."</option>";
}
}
closedir($handle);
}
?>
</select>
<input type="hidden" name="dircur" value=<?php print $dirbak;?>>
<input type="hidden" name="actionflag" value="loading">
<input type="submit" value="OK" name="loadbackup">
</form>
</td>
<td>
<form method="post" onSubmit="return del(this)">
<select name="filecur" class="d">
<?php
// ДЕЛАЕМ ВЫБОРКУ КОНФИГУРАЦИОННЫХ ФАЙЛОВ ИЗ ДИРЕКТОРИИ БЭКАПА ДЛЯ УДАЛЕНИЯ НУЖНОГО ФАЙЛА
if ($handle=opendir($dirbak)) {
while (false!==($file=readdir($handle))) {
if (!is_dir("$dirbak/$file") && $file!='.' && $file!='..') {
print "<option value='$file'>".$file."</option>";
}
}
closedir($handle);
}
?>
</select>
<input type="hidden" name="action" value="remove">
<input type="submit" value="OK" name="deletebackup">
</form>
</td>
</tr>
</table><p><input type="button" value="BACK" onClick="javascript:history.go(-1)"></p>
<?php
// ЕСЛИ ПРИШЕЛ ОТВЕТ, ЧТО РЕДАКТИРОВАТЬ НЕ БУДЕМ - ВЫВАЛИВАЕМСЯ В НАЧАЛО
if (isset($_POST['nowriterules'])) $nowriterules=$_POST['nowriterules'];// ЕСЛИ ПРИШЕЛ ОТВЕТ, ЧТО ЗАГРУЖАЕМ ДЛЯ РЕДАКТИРОВАНИЯ ФАЙЛ
// ИЛИ ОСНОВНОЙ ИЛИ ИЗ БЭКАПА
if(isset($_POST['actionflag'])) {
$actionflag=$_POST['actionflag'];$dircur=$_POST['dircur'];
if(isset($_POST['loadmain'])) {
$filecur="$fileconf";
}
if (isset($_POSST['loadbackup'])) {
$filecur=$_POST['filecur'];
}
$filelist="$dircur/$filecur";
$fp=fopen("$filelist","r") or die("<font color=red>Couldn't open $file! No file or no rights?");
$fwcon=file_get_contents(trim($filelist));
fclose($fp);print "<form method=\"post\">
<textarea name=\"fwconf\" rows=\"20\" cols=\"100\">";
echo $fwcon;
print "</textarea>
<br/>
Write new rules?
<input type=\"hidden\" value=\"$filecur\" name=\"filecur\">
<input type=\"hidden\" value=\"$dircur\" name=\"dircur\">
<input type=\"submit\" value=\"OK\" name=\"writerules\">
<input type=\"submit\" value=\"NO\" name=\"nowriterules\">
</form>";
}// ЕСЛИ ПРИШЛО ПОДТВЕРЖДЕНИЕ, ЧТО ЗАПИСЫВАТЬ ОТРЕДАКТИРОВАННЫЙ ФАЙЛ БУДЕМ
if(isset($_POST['writerules']) and isset($_POST['fwconf'])) {
$writerules=$_POST['writerules'];
$fwconf=$_POST['fwconf'];
$filecur=$_POST['filecur'];
$dircur=$_POST['dircur'];
if(empty($fwconf)) {echo "<font color=red><b>PANIC! YOU ARE IDIOT? EMPTY RULES NOT WRITING!</b></font>"; exit;}
createbackup($dirbak,$filemain,$dircur,$filecur,$fileconf); // ВЫЗЫВАЕМ ФУНКЦИЮ ДЛЯ СОЗДАНИЯ БЭКАПА ФАЙЛА И ДИРЕКТОРИИ ДЛЯ БЭКАПА
filewrite($fwconf,$filemain);
}// ЕСЛИ ПРИШЕЛ ОТВЕТ, ЧТО УДАЛЯЕМ ВЫБРАННЫЙ ФАЙЛ ИЗ БЭКАПА
//if(isset($_POST['deletebackup']) and isset($_POST['filecur'])) {
//echo $deletebackup=$_POST['deletebackup'];
if(isset($_POST['action'])) {
$action=$_POST['action'];
if($action=="remove"){
$file=$_POST['filecur'];
deletefile($dirbak,$file); // ВЫЗЫВАЕМ ФУНКЦИЮ ДЛЯ УДАЛЕНИЯ ФАЙЛА
}
}// ФУНКЦИЯ СОЗДАНИЯ БЭКАПОВ
function createbackup($dirbak,$filemain,$dircur,$filecur,$fileconf) {
if(!$dh=opendir($dirbak)) { // ЕСЛИ НЕ МОЖЕМ ОТКРЫТЬ ДИРЕКТОРИЮ БЭКАПА ИЛИ НЕ СУЩЕСТВУЕТ
$cmdmd=escapeshellcmd($cmdmd);
$cmdmd="/usr/local/bin/sudo /bin/mkdir $dirbak";
exec($cmdmd,$ouput,$return);
if($return==1) print "<font color=red>Can't create directory <b>$dirbak</b> for the backup!<br/>
In files sudoers next line <u>/usr/local/bin/sudo /bin/mkdir</u> is not added?</font><br/>";
elseif($return==0) echo "<font color=green>Created directory <b>$dirbak</b> for the backup sucessfully!</font>";
}
$cmdcp=escapeshellcmd($cmdcp);
$cmdcp="/usr/local/bin/sudo /bin/cp $dircur/$filecur /tmp/$fileconf && /usr/local/bin/sudo /bin/mv /tmp/$fileconf $dirbak/$fileconf".".".date("Y-m-d_H:i:s");
exec($cmdcp,$ouput,$return);
if($return==1) print "<font color=red>Can't copy file <b>$filecur</b> in the backup directory <b>$dirbak</b>!<br/>
In files sudoers next line <u>/usr/local/bin/sudo /bin/cp</u> is not added?</font><br/>";
elseif($return==0) {
echo "<font color=green>Copy file <b>$filecur</b> in the backup directory <b>$dirbak</b> sucessfully!<br/></font>";
}
}// ФУНКЦИЯ ЗАПИСИ ОТРЕДАКТИРОВАННОГО КОНФИГА В ФАЙЛ
function filewrite($fwconf,$filemain) {
$cmdto=escapeshellcmd($cmdto);
$cmdto="/usr/local/bin/sudo /usr/sbin/chown www $filemain";
exec($cmdto,$ouput,$return);
if($return==1) echo "<font color=red>Can't change the file <b>$filemain</b> owner on <b>www</b>!</font><br/>
In files sudoers next line <u>/usr/local/bin/sudo /usr/sbin/chown</u> is not added?</font><br/>";
elseif($return==0) echo "<font color=green>Changed the file <b>$filemain</b> owner on <b>www</b> for writing sucessfully!<br/></font>";
$fp=fopen($filemain,"w+") or die("<font color=red>Couldn't open <b>$filemain</b>! No file or no rights?</font>"); // МАТЕРИМСЯ, ЕСЛИ НЕ МОЖЕМ ОТКРЫТЬ ФАЙЛ
flock($fp,LOCK_EX); // БЛОКИРУЕМ ФАЙЛ (ВНИМАНИЕ! БЛОКИРОВКА НЕ ПОЛНАЯ! ТОЛЬКО СРЕДСТВАМИ PHP, ОТ UNIX НЕ СПАСЕТ!)
$fwconf=str_replace("\r\n","\n",$fwconf); // ЗАМЕНА ПЕРЕХОДА СТРОКИ И ВОЗВРАТА КАРЕТКИ ИЗ WINDOWS НА UNIX
$fwconf=trim($fwconf); // ЧИСТИМ ФАЙЛ, УДАЛЯЕМ ПРОБЕЛЫ И ТАБЫ, НА ВСЯКИЙ СЛУЧАЙ
fwrite($fp,$fwconf); // ПИШЕМ В ФАЙЛ
flock($fp,LOCK_UN); // СНИМАЕМ БЛОКИРОВКУ С ФАЙЛА
fclose($fp); // ЗАКРЫВАЕМ
$cmdbak="/usr/local/bin/sudo /usr/sbin/chown root $filemain";
exec($cmdbak,$ouput,$return);
if($return==1) echo "<font color=red>Can't change the file <b>$filemain</b> owner back on <b>root</b>!</font><br/>
<b>PANIC! UNKNOWN ERROR!</b>";
elseif($return==0) echo "<font color=green>Changed the file <b>$filemain</b> owner back on <b>root</b> for security sucessfully!<br/></font>";
echo "<font color=green>Write new rules successfully! Congratulation! <b>YES!</b></font>";
// АВТОПЕРЕХОД С ЗАДЕРЖКОЙ 3 СЕКУНДЫ ДЛЯ ОБНОВЛЕНИЯ ВЫПАДАЮЩЕГО СПИСКА СЕЛЕКТ
echo "<META HTTP-EQUIV=Refresh CONTENT=\"3; URL=./conf3.php\">"; // ВМЕСТО conf3.php ВСТАВИТЬ СВОЮ СТРАНИЦУ
}// ФУНКЦИЯ УДАЛЕНИЯ ФАЙЛА ИЗ ДИРЕКТОРИИ БЭКАПА
// СДЕЛАНА С ИСПОЛЬЗОВАНИЕМ РОДНОГО UNIX ШЕЛА, ИБО И ТАК ГЕМОРНО, А ИНАЧЕ ЕЩЕ И ПРАВА НА ДИРЕКТОРИЮ БЭКАПА И ФАЙЛЫ УСТАНАВЛИВАТЬ
function deletefile($dirbak,$file) {
$cmddel=escapeshellcmd($cmddel);
$cmddel="/usr/local/bin/sudo /bin/rm $dirbak/$file"; // САМА КОМАНДА НА УДАЛЕНИЕ ФАЙЛА
exec($cmddel,$ouput,$return); // УДАЛЯЕМ ФАЙЛ
if($return==1) echo "<font color=red>Can't delete file <b>$file</b> from directory <b>$dirbak</b>!<br/>
In files sudoers next line <u>/usr/local/bin/sudo /bin/rm</u> is not added?</font><br/>";
elseif($return==0) {
print "<font color=green>Deleted files <b>$file</b> from directory <b>$dirbak</b> sucessfully!<br/></font>";echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=koi8-r\">
<script language=\"JavaScript\">
alert(\"Deleted files $file from directory $dirbak sucessfully!\");
</script>";
// АВТОПЕРЕХОД
echo "<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=./conf3.php\">"; // ВМЕСТО conf3.php ВСТАВИТЬ СВОЮ СТРАНИЦУ
// header("Location: $_SERVER[PHP_SELF]");
}
}
?></body>
</html>
> Вроде речь в предыдущих постах шла немного не об этом, я так
> думал, что надо просто редактировать основной скрипт ipfw для себя (rc.firewall
> для примера или какой-либо ещё)просто поняв, что можно управлять, из веба, разыгрался аппетит
> Если вас ломанут, автор ответственности не несет, и т.д. и т.п. ))
> ну типа там распространяется как есть, без гарантий и тому подобноесо всем согласен, где поставить галочку? ;)
> {echo "PANIC! YOU ARE IDIOT? EMPTY > RULES NOT WRITING!"; exit;}
:)
спасибо большое, будем курить!
зы. кстати сделал проще, запретил доступ к этим скриптам из WAN, а разрешил только из LAN. А к локалке подключаюсь по впн, врядли кто-то изнутри сетки захочет играться с фаерволом
>[оверквотинг удален]
> просто поняв, что можно управлять, из веба, разыгрался аппетит
>> Если вас ломанут, автор ответственности не несет, и т.д. и т.п. ))
>> ну типа там распространяется как есть, без гарантий и тому подобное
> со всем согласен, где поставить галочку? ;)
>> {echo "PANIC! YOU ARE IDIOT? EMPTY > RULES NOT WRITING!"; exit;}
> :)
> спасибо большое, будем курить!
> зы. кстати сделал проще, запретил доступ к этим скриптам из WAN, а
> разрешил только из LAN. А к локалке подключаюсь по впн, врядли
> кто-то изнутри сетки захочет играться с фаерволом
Я тут шлифанул свой код немного. Все же безопасность превыше всего, ибо в нашем деле лучше перебздеть, чем не добздеть..
Короче, изобрел в очередной раз колесо..
Доп инфа в коментах<?php
session_start();
session_register("authoriz");
$authoriz=$_SESSION['authoriz'];
?><html>
<head>
<meta http-equiv="content-type" content="text/html; charset=koi8-r"/>
<title>Редактирование правил фаервола IPFW</title>
<style type="text/css">
body {font-family: Arial, Verdana;}
select {font: Verdana, Arial; background: GreenYellow;}
.d {font: Verdana, Arial; background: DeepPink;}
input {font: Verdana, Arial;}
input.login-pass {width: 150px}
textarea {font: "Lucida Console"; background: Seashell;}
</style>
</head>
<body><script language="javascript">
function del(theform){
var c=theform.filecur;
if (confirm("Are you sure?")) {
alert("DELETED");
return true;
}
else {
alert("OTMEHEHO");
c.focus();
return false;
}
}
</script><?
if(isset($_POST['logout'])) logout();
// ЛОГИН И ПАРОЛЬ
$login="admin";
// ЭТО ЛИШЬ ПРИМЕР ЗАШИФРОВАННОГО ПАРОЛЯ (passwd) АЛГОРИТМОМ MD5
// САМЫМ НАСТОЯТЕЛЬНЫМ ОБРАЗОМ КРАЙНЕ РЕКОМЕНДУЕТСЯ УКАЗАТЬ СВОЙ ПАРОЛЬ
// ВО ИЗБЕЖАНИИ, ТАК СКАЗАТЬ, САМЫХ НЕГАТИВНЫХ ПОСЛЕДСТВИЙ :))
$password="76a2173be6393254e72ffa4d6df1030a";if($authoriz!=1) step($login,$password);
else protection();function step($login,$password) {
print "<b>Authorization</b>
<form method=\"post\">
<table cellspacing=\"5\" cellpadding=\"3\" border=\"0\">
<tr>
<td align=\"right\">login</td>
<td><input class=\"login-pass\" type=\"text\" name=\"name\" value=\"\"></td>
</tr>
<tr>
<td align=\"right\">password</td>
<td><input class=\"login-pass\" type=\"password\" name=\"pass\" value=\"\"></td>
</tr>
<input type=\"hidden\" name=\"auth\" value=\"auth\">
<tr>
<td></td>
<td><input type=\"submit\" value=\"OK\"></td>
</tr>
</table></form>";// ЕСЛИ ПРИШЕЛ ОТВЕТ ОТ ФОРМЫ АВТОРИЗАЦИИ
if(isset($_POST['auth'])) {
$name=$_POST['name'];
$pass=$_POST['pass'];if(empty($name)) {echo "<font color=red>Enter LOGIN!</font>"; exit;}
if(empty($pass)) {echo "<font color=red>Enter PASSWORD</font>"; exit;}$pass=md5($pass);
if($name!==$login) {echo "<font color=red>Invalid LOGIN!</font>"; exit;}
if($pass!==$password) {echo "<font color=red>Invalid PASSWORD</font>"; exit;}if($name==$login and $pass==$password and $name!='' and $pass!='') {
$_SESSION['authoriz']=1;protection(); // ВЫЗЫВАЕМ ФУНКЦИЮ protection()
header("Location: $_SERVER[PHP_SELF]"); // СВАЛИВАЕМ ОТСЮДА НАФИГ :)
}
}
}// start protection()
function protection() {// ОСНОВНАЯ ДИРЕКТОРИЯ
$dirmain="/etc";
// ДИРЕКТОРИЯ ДЛЯ БЭКАПА КОНФИГА IPFW
$dirbak="$dirmain/fwrulesbak";
// ОСНОВНОЙ КОНФИГУРАЦИОННЫЙ ФАЙЛ
$fileconf="rc.firewall";
$filemain="$dirmain/$fileconf";print "Loading for edit the main or backup configuration file IPFW firewall rules?
<table cellpadding=\"3\" cellspacing=\"2\" border=\"0\">
<tr>
<td>
<font color=\"blue\">Load MAIN</font>
</td>
<td>
<font color=\"green\">Load BACKUP</font>
</td>
<td>
<font color=\"red\">Delete BACKUP</font>
</td>
</tr>
<tr>
<td>
<form method=\"post\">
<input type=\"hidden\" name=\"dircur\" value=".$dirmain.">
<input type=\"hidden\" name=\"filecur\" value=".$fileconf.">
<input type=\"submit\" value=\"OK\" name=\"load\">
</form>
</td>
<td>
<form method=\"post\">
<select name=\"filecur\">";// ДЕЛАЕМ ВЫБОРКУ КОНФИГУРАЦИОННЫХ ФАЙЛОВ ИЗ ДИРЕКТОРИИ БЭКАПА
// ДЛЯ ВЫБОРОЧНОЙ ЗАГРУЗКИ И ДАЛЬНЕЙШЕГО РЕДАКТИРОВАНИЯ
if ($handle=opendir($dirbak)) { // ЕСЛИ МОЖЕМ ОТКРЫТЬ ДИРЕКТОРИЮ ДЛЯ БЭКАПА
while (false!==($file=readdir($handle))) { // ЧИТАЕМ В ЦИКЛЕ ДИРЕКТОРИЮ ПОКА НЕ КОНЧИТСЯ
if (!is_dir("$dirbak/$file") && $file!='.' && $file!='..') { // ПРОВЕРЯЕМ: ЕСЛИ ТО ЧТО ПРОЧИТАЛИ ДИРЕКТОРИЯ ИЛИ
print "<option value='$file'>".$file."</option>"; // ФАЙЛЫ . И .. ТО, ИГНОРИРУЕМ И ВЫВОДИМ ЧТО ОСТАЛОСЬ
}
}
closedir($handle);
}
print "</select>
<input type=\"hidden\" name=\"dircur\" value=".$dirbak.">
<input type=\"submit\" value=\"OK\" name=\"load\">
</form>
</td>
<td>
<form method=\"post\" onSubmit=\"return del(this)\">
<select name=\"filecur\" class=\"d\">";// ДЕЛАЕМ ВЫБОРКУ КОНФИГУРАЦИОННЫХ ФАЙЛОВ ИЗ ДИРЕКТОРИИ БЭКАПА ДЛЯ УДАЛЕНИЯ НУЖНОГО ФАЙЛА
if ($handle=opendir($dirbak)) {
while (false!==($file=readdir($handle))) {
if (!is_dir("$dirbak/$file") && $file!='.' && $file!='..') {
print "<option value='$file'>".$file."</option>";
}
}
closedir($handle);
}
print "</select>
<input type=\"submit\" value=\"OK\" name=\"delete\">
</form>
</td>
</tr>
</table><p><form method=\"post\"><input type=\"submit\" value=\"LOGOUT\" name=\"logout\"></form></p>
<p><input type=\"button\" value=\"BACK\" onClick=\"javascript:history.go(-1)\"></p>";
// ЕСЛИ ПРИШЕЛ ОТВЕТ, ЧТО РЕДАКТИРОВАТЬ НЕ БУДЕМ - ВЫВАЛИВАЕМСЯ В НАЧАЛО
if (isset($_POST['nowriterules'])) $nowriterules=$_POST['nowriterules'];// ЕСЛИ ПРИШЕЛ ОТВЕТ, ЧТО ЗАГРУЖАЕМ ДЛЯ РЕДАКТИРОВАНИЯ ФАЙЛ
// ИЛИ ОСНОВНОЙ ИЛИ ИЗ БЭКАПА
if (isset($_POST['load']) and isset($_POST['filecur'])) {
$filecur=$_POST['filecur'];
$dircur=$_POST['dircur'];
$filelist="$dircur/$filecur"; // ОПРЕДЕЛЯЕМСЯ КАКОЙ ФАЙЛ БУДЕМ ПРОСМАТРИВАТЬ
$fp=fopen("$filelist","r") or die("<font color=red>Couldn't open <b>$filelist</b>! No file or no rights?"); // ОТКРЫВАЕМ
$fwcon=file_get_contents(trim($filelist)); // ПОТРОШИМ ФАЙЛ И ПОЛУЧАЕМ СОДЕРЖИМОЕ (ЗАОДНО ЧИСТИМ, А МОЖЕТ И НЕ НАДО?)
fclose($fp); // ЗАКРЫВАЕМ// ВЫВОДИМ НА ПЕЧАТЬ ФОРМУ
print "<form method=\"post\">
<textarea name=\"fwconf\" rows=\"20\" cols=\"100\">";
echo $fwcon; // НАПРАВЛЯЕМ ВНУТРЕННОСТИ ФАЙЛА ПОСЛЕ ПОТРОШЕНИЯ И ПРЕПАРАЦИИ В TEXTAREA
print "</textarea>
<br/>Write new rules?
<input type=\"hidden\" value=\"$filecur\" name=\"filecur\">
<input type=\"hidden\" value=\"$dircur\" name=\"dircur\">
<input type=\"submit\" value=\"OK\" name=\"writerules\">
<input type=\"submit\" value=\"NO\" name=\"nowriterules\">
</form>";
}elseif(isset($_POST['load']) and empty($filecur)) {echo "<font color=red>You are idiot? You can't get and load of anything!</font>";}// ЕСЛИ ПРИШЛО ПОДТВЕРЖДЕНИЕ, ЧТО ЗАПИСЫВАТЬ ОТРЕДАКТИРОВАННЫЙ ФАЙЛ БУДЕМ
if(isset($_POST['writerules']) and isset($_POST['fwconf'])) {
$fwconf=$_POST['fwconf'];
$filecur=$_POST['filecur'];
$dircur=$_POST['dircur'];
if(empty($fwconf)) {echo "<font color=red><b>PANIC! YOU ARE IDIOT? EMPTY RULES NOT WRITING!</b></font>"; exit;}
createbackup($dirbak,$filemain,$dircur,$filecur,$fileconf); // ВЫЗЫВАЕМ ФУНКЦИЮ ДЛЯ СОЗДАНИЯ БЭКАПА ФАЙЛА И ДИРЕКТОРИИ ДЛЯ БЭКАПА
filewrite($fwconf,$filemain); // ВЫЗЫВАЕМ ФУНКЦИЮ ДЛЯ ЗАПИСИ ОТРЕДАКТИРОВАННОГО ФАЙЛА
}// ЕСЛИ ПРИШЕЛ ОТВЕТ, ЧТО УДАЛЯЕМ ВЫБРАННЫЙ ФАЙЛ ИЗ БЭКАПА
if(isset($_POST['delete']) and isset($_POST['filecur'])) {
$file=$_POST['filecur'];
deletefile($dirbak,$file); // ВЫЗЫВАЕМ ФУНКЦИЮ ДЛЯ УДАЛЕНИЯ ФАЙЛА
}
} // end function protection()// ФУНКЦИЯ СОЗДАНИЯ БЭКАПОВ
function createbackup($dirbak,$filemain,$dircur,$filecur,$fileconf) {
if(!$dh=opendir($dirbak)) { // ЕСЛИ НЕ МОЖЕМ ОТКРЫТЬ ДИРЕКТОРИЮ БЭКАПА ИЛИ НЕ СУЩЕСТВУЕТ
$cmdmd=escapeshellcmd($cmdmd);
$cmdmd="/usr/local/bin/sudo /bin/mkdir $dirbak"; // КОМАНДА СОЗДАНИЯ ДИРЕКТОРИИ ДЛЯ БЭКАПА
exec($cmdmd,$ouput,$return); // ВЫЗОВ КОМАНДЫ
if($return==1) print "<font color=red>Can't create directory <b>$dirbak</b> for the backup!<br/>
In files sudoers next line <u>www ALL=NOPASSWD: /bin/mkdir</u> is not added?</font><br/>";
elseif($return==0) echo "<font color=green>Created directory <b>$dirbak</b> for the backup sucessfully!</font>";
}
$cmdcp=escapeshellcmd($cmdcp);
$cmdcp="/usr/local/bin/sudo /bin/cp $dircur/$filecur /tmp/$fileconf && /usr/local/bin/sudo /bin/mv /tmp/$fileconf $dirbak/$fileconf".".".date("Y-m-d_H:i:s");
exec($cmdcp,$ouput,$return); // КОМАНДА ДЛЯ СОЗДАНИЯ БЭКАПА - СНАЧАЛА КОПИРУЕМ В /tmp ДИРЕКТОРИЮ,
// ПОТОМ ПЕРЕМЕЩАЕМ В ДИРЕКТОРИЮ БЭКАПА С ДРУГИМ НАЗВАНИЕМ
// ИМЯ ФАЙЛА ВЫБИРАЕТСЯ КАК СТАРОЕ НАЗВАНИЕ И В КОНЦЕ ДОБАВЛЯЕТСЯ ТЕКУЩЕЕ ВРЕМЯ
// ТАКОЙ ФИНТ УШАМИ ПОТОМУ, ЧТО МОЖЕТ БЫТЬ ВЫЗВАН ФАЙЛ КАК ОСНОВНОЙ ТАК И ИЗ БЭКАПА
// А ИЗ БЭКАПА УЖЕ ИМЕЕТ НАЗВАНИЕ СО ВРЕМЕНЕМ ВКОНЦЕ, КОРОЧЕ, ЧТОБЫ ВРЕМЯ НЕ НАКЛАДЫВАЛОСЬ ДВА, ТРИ И БОЛЕЕ РАЗ
if($return==1) print "<font color=red>Can't copy file <b>$filecur</b> in the backup directory <b>$dirbak</b>!<br/>
In files sudoers next line <u>www ALL=NOPASSWD: /bin/cp</u> is not added?</font><br/>
Or in files sudoers next line <u>www ALL=NOPASSWD: /bin/mv</u> is not added?</font><br/>";
elseif($return==0) {
echo "<font color=green>Copy file <b>$filecur</b> in the backup directory <b>$dirbak</b> sucessfully!<br/></font>";
}
}// ФУНКЦИЯ ЗАПИСИ ОТРЕДАКТИРОВАННОГО КОНФИГА В ФАЙЛ
function filewrite($fwconf,$filemain) {
$cmdto=escapeshellcmd($cmdto);
$cmdto="/usr/local/bin/sudo /usr/sbin/chown www $filemain";
exec($cmdto,$ouput,$return);
if($return==1) echo "<font color=red>Can't change the file <b>$filemain</b> owner on <b>www</b>!</font><br/>
In files sudoers next line <u>www ALL=NOPASSWD: /usr/sbin/chown</u> is not added?</font><br/>";
elseif($return==0) echo "<font color=green>Changed the file <b>$filemain</b> owner on <b>www</b> for writing sucessfully!<br/></font>";
$fp=fopen($filemain,"w+") or die("<font color=red>Couldn't open <b>$filemain</b>! No file or no rights?</font>"); // МАТЕРИМСЯ, ЕСЛИ НЕ МОЖЕМ ОТКРЫТЬ
flock($fp,LOCK_EX); // БЛОКИРУЕМ ФАЙЛ (ВНИМАНИЕ! БЛОКИРОВКА НЕ ПОЛНАЯ! ТОЛЬКО СРЕДСТВАМИ PHP, ОТ UNIX НЕ СПАСЕТ!)
$fwconf=str_replace("\r\n","\n",$fwconf); // ЗАМЕНА ПЕРЕХОДА СТРОКИ И ВОЗВРАТА КАРЕТКИ ИЗ WINDOWS НА UNIX
$fwconf=trim($fwconf); // ЧИСТИМ ФАЙЛ, УДАЛЯЕМ ПРОБЕЛЫ И ТАБЫ, НА ВСЯКИЙ СЛУЧАЙ
fwrite($fp,$fwconf); // ПИШЕМ В ФАЙЛ
flock($fp,LOCK_UN); // СНИМАЕМ БЛОКИРОВКУ С ФАЙЛА
fclose($fp); // ЗАКРЫВАЕМ
$cmdbak="/usr/local/bin/sudo /usr/sbin/chown root $filemain";
exec($cmdbak,$ouput,$return);
if($return==1) echo "<font color=red>Can't change the file <b>$filemain</b> owner back on <b>root</b>!</font><br/>
<b>PANIC! UNKNOWN ERROR!</b>";
elseif($return==0) {
echo "<font color=green>Changed the file <b>$filemain</b> owner back on <b>root</b> for security sucessfully!<br/></font>";
echo "<font color=green>Write new rules successfully! Congratulation! <b>YES!</b></font>";echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=koi8-r\">
<script language=\"javascript\">
alert(\"Yes! All right!\");
</script>";// АВТОПЕРЕХОД ДЛЯ ОБНОВЛЕНИЯ ВЫПОДАЮЩЕГО СПИСКА СЕЛЕКТ
echo "<meta http-equiv=\"refresh\" content=\"0; url=./conf3.php\">"; // ВМЕСТО conf3.php ВСТАВИТЬ СВОЮ СТРАНИЦУ
}
}// ФУНКЦИЯ УДАЛЕНИЯ ФАЙЛА ИЗ ДИРЕКТОРИИ БЭКАПА
// СДЕЛАНА С ИСПОЛЬЗОВАНИЕМ РОДНОГО UNIX ШЕЛА, ИБО И ТАК ГЕМОРНО, А ИНАЧЕ ЕЩЕ И ПРАВА НА ДИРЕКТОРИЮ БЭКАПА И ФАЙЛЫ УСТАНАВЛИВАТЬ
function deletefile($dirbak,$file) {
$cmddel=escapeshellcmd($cmddel);
$cmddel="/usr/local/bin/sudo /bin/rm -f $dirbak/$file"; // САМА КОМАНДА НА УДАЛЕНИЕ ФАЙЛА
exec($cmddel,$ouput,$return); // УДАЛЯЕМ ФАЙЛ
if($return==1) echo "<font color=red>Can't delete file <b>$file</b> from directory <b>$dirbak</b>!<br/>
In files sudoers next line <u>www ALL=NOPASSWD: /bin/rm</u> is not added?</font><br/>";
elseif($return==0) {
print "<font color=green>Deleted files <b>$file</b> from directory <b>$dirbak</b> sucessfully!<br/></font>";echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=koi8-r\">
<script language=\"javascript\">
alert(\"Deleted files $file from directory $dirbak sucessfully!\");
</script>";
// АВТОПЕРЕХОД ДЛЯ ОБНОВЛЕНИЯ ВЫПАДАЮЩЕГО СПИСКА СЕЛЕКТ
// ЕСЛИ ИСПОЛЬЗОВАТЬ header("Location: url") ТО НЕ УВИДИМ ОТЛАДОЧНЫХ СООБЩЕНИЙ :)
echo "<meta http-equiv=\"refresh\" content=\"0; url=./conf3.php\">"; // ВМЕСТО conf3.php ВСТАВИТЬ СВОЮ СТРАНИЦУ
// header("Location: $_SERVER[PHP_SELF]");
}
}// ФУНКЦИЯ ВЫХОДА
// РАЗРЕГИСТРИРУЕМ ПЕРЕМЕНЫЕ И УНИЧТОЖАЕМ ИХ
// РАЗРУШАЕМ СЕССИЮ
function logout() {
session_unset();
session_destroy();
header("Location: $_SERVER[PHP_SELF]");
}/*
ЛИРИЧЕСКИЙ ПОСТСКРИПТУМ :)
НАПИСАНО ЧИСТО РАДИ ЛЮБВИ К ИСКУССТВУ, СПОРТИВНОГО И АКАДЕМИЧЕСКОГО ИНТЕРЕСА.
НЕ УПОТРЕБЛЯТЬ!ОБЯЗАТЕЛЬЕО ДОБАВИТЬ В КОНФИГУРАЦИОННЫЙ ФАЙЛ SUDO /ur/local/etc/sudoers СЛЕДУЮЩИЕ СТРОКИ:
www ALL=NOPASSWD: /bin/rm
www ALL=NOPASSWD: /bin/cp
www ALL=NOPASSWD: /bin/mkdir
www ALL=NOPASSWD: /bin/mv
www ALL=NOPASSWD: /usr/sbin/chownЗАШИФРОВАТЬ ПАРОЛЬ ДЛЯ ВХОДА АЛГОРИТМОМ MD5
С ПОМОЩЬЮ PHP ИЛИ ЧЕРЕЗ КОНСОЛЬ
В PHP ПРОЧЕСТЬ ВЫВОД СТРОКИ echo md5('passwd');
В КОНСОЛИ UNIX ВЫПОЛНИТЬ md5 -s passwd
ЛИБО В КОНСОЛИ UNIX php -r "print md5('passwd');"
ГДЕ ВМЕСТО passwd ПОДСТАВИТЬ СВОЮ ХРЕНЬ
НУ И ВЫВОД ВСЕГО ЭТОГО МРАКОБЕСИЯ, СООТВЕТСТВЕННО, ВСТАВИТЬ В ОДНО МЕСТО (ПО УСМОТРЕНИЮ - КОМУ И КУДА, УЖ САМИ РАЗБЕРЕТЕСЬ)КРАЙНЕ ВАЖНО!
ЧТОБЫ СЕССИЮ НЕ ПЕРЕХВАТИЛИ И НЕ УГНАЛИ, В КОНЦЕ ОБЯЗАТЕЛЬНО ДЕЛАЙТЕ LOGOUT !!
ИНАЧЕ, ПОСЛЕ ПЕРВОНАЧАЛЬНОЙ АВТОРИЗАЦИИ, ВХОД БУДЕТ ВЫПОЛНЕН И ДОСТУПЕН И ПОСЛЕ ОБЫЧНОГО ЗАКРЫТИЯ СТРАНИЦЫ БРАУЗЕРА!
СЕССИЯ НЕ БУДЕТ РАЗРУШЕНА И, СООТВЕТСТВЕННО, ВЫ ИМЕЕТЕ ДЫРУ В ЗАЩИТЕ И ГЕМОР НА ОДНО МЕСТО :))
*/
?></body>
</html>Вот такие дела..
> да, извне доступ к серверу закрывается, т.е. атаковать и исполнять кто-то левый
> обращения командного процессора не будет, только те, кто под шлюзом, а
> там врядли кому-то надо это делатьспасибо за инфу
все было хорошо и прекрасно, пока не случилось что-то ;)
не то после перезагрузки сервера (спустя пол года), не то после ковыряний с PHP и Apache, перестали выводиться любые команды, даже тупо:<html>
<body>
<?php
print "<pre>";
echo system("/usr/local/bin/sudo dmesg -a");
print "</pre>";
?>
</body>
</html>
ничего не кажет. перепроверил, может изменились права, нет, и даже поправил на случай так:
file "/usr/local/etc/sudoers", 1 lineswww ALL=NOPASSWD: ALL
и даже сделал chmod 0644 /usr/local/etc/sudoers. Куда могло все пропасть? Ну, или хотя бы скажите в какую сторону ковырнуть, что бы начать?
зы. есть подозрение, что все пропало из-за php.ini, но что я там (или не я) делал, точно за пол года никто не скажет, ведь журнальчик не вели с записью о каждом движении в PHP, к сожалению :(
проблема решена, каким-то образом сменились права у /usr/local/etc/sudoers, помоглоchmod 0440 /usr/local/etc/sudoers
> да, извне доступ к серверу закрывается, т.е. атаковать и исполнять кто-то левый
> обращения командного процессора не будет, только те, кто под шлюзом, а
> там врядли кому-то надо это делатьа ты статистику и литературу по взлому серьезных систем почитай (большинство взломано изнутри при содействии бывших сотрудников).
не успокаивай себя тем, что внутри твоей сети "все честные". там как и в других местах банально лохов полно, которые на флешке себе в комп заразу принесут и адью. лови потом изнутри все прелести, которые по твоему мнению, грозят тебе только снаружи.
> Доброго дня! Раскурил как направлять людей с локальной сети на адрес сервера,
> таким образом можно сделать уведомление, например: сегодня в сети с 15
> до 16 будут производиться работы. Но это неудобно, пользователь будет все
> время редиректиться на эту страницу. Хотелось бы прикрутить например так: сегодня
> в сети с 15 до 16 будут производиться работы. (и чуть
> ниже кнопочка: Я УВЕДОМЛЕН) и по нажатию на эту кнопку в
> /etc/rc.firewall прописывается удаление правила перенаправления и перечитывание конфига
> ipfw.браво!!!
пусть лучше ч/з апач дыра откроется с рутовым доступом. великолепное решение.
а на сайте куки использовать, к примеру, не проще для этих целей (т.е перенаправления)? пакетным фильтром рулить ч/з апач для оповещения пользователей о проведении каких-то работ - ну это я не знаю даже...
PS
вообще задача ИМХО - бред. о плановых (и внеплановых) работах в новостях пишешь (и редиректить на них не надо). кто не прочел - тот сам себе злобный буратино. вот так это живет в реальности.
> Очень много покопавшись по форумам, повторяю ооочень много, но не нашел ничего
> дельного вовсе, а все что нашел, и попытался скрутить, даже вывод
> команды в файл не писало. Подскажите, как попроще сделать это? Или
> хотя бы подскажите, как обратиться к командному процессору из php? А
> дальше я бы сам разобрался
> PS
> вообще задача ИМХО - бред. о плановых (и внеплановых) работах в новостях
> пишешь (и редиректить на них не надо). кто не прочел -
> тот сам себе злобный буратино. вот так это живет в реальности.я приму к сведению Ваши гневные сообщения
>> PS
>> вообще задача ИМХО - бред. о плановых (и внеплановых) работах в новостях
>> пишешь (и редиректить на них не надо). кто не прочел -
>> тот сам себе злобный буратино. вот так это живет в реальности.
> я приму к сведению Ваши гневные сообщенияОни не гневные совсем. Просто жизнь такая.
Вечер добрый, скажите, что могло произойти, после ребута сервера перестали отрабатываться команды, просто белая страница и ничего не выводит, в dmesg тоже пусто, и права менял и все равно ничего, и даже sudo переустановил, куда копнуть-то? заранее благодарен
> Вечер добрый, скажите, что могло произойти, после ребута сервера перестали отрабатываться
> команды, просто белая страница и ничего не выводит, в dmesg тоже
> пусто, и права менял и все равно ничего, и даже sudo
> переустановил, куда копнуть-то? заранее благодаренЗапуск phpinfo.php
<?php
phpinfo();
?>что-нибудь говорит, показывает?
показывает, все как обычно, что-то конкретное оттуда выделить надо?
> показывает, все как обычно, что-то конкретное оттуда выделить надо?Надо phpinfo использовать для отладки скриптов.
Установить уровень ошибок E_ALL,
для этого, на время отладки добавить в начало скриптаini_set('display_errors',1);
error_reporting(E_ALL);Убрать всех собак (если таковые имеются) (@) из кода.
Дополнительно, смотреть текст ошибки в логе ошибок апача.Проверить, все ли переменные имеют то значение, которое ожидается.
Выводить все используемые переменные на экран,
визуально контролировать их содержимое.
Для этого, написать в проблемных местах var_dump($var)Например, есть массив $_POST,
где-то и как-то там обращаемся к нему,
после обращения проверяем,
для этого вставляем в код (после обращения :) )
echo '<pre>';
var_dump($_POST);Проверить все значения $_GET, $_POST
Может где переменная теряется.
Для этого вызываем
phpinfo(INFO_VARIABLES); или phpinfo(32);
То есть, в конце отладочного скрипта пишем
<?
phpinfo(32);
?>
Смотрим вывод.А в самом начале советую посмотреть файл php.ini
Вдруг чего изменилось. ))
все фигня, не стал сильно разбираться, бекапнул все конфиги и переустановил веб сервер - заработало. скажите, если я начинаю править скриптом выше конфиг firewall.conf, исходный текст при загрузке в форму такой:="
а после сохранения происходит конвертация и получается
=/"
а после пересохранения получается
=//" и так далее. как это вылечить? не подскажете?зы. для полного прояснения картины вот так:
исходный текст:
test
тест
1234#!/bin/sh
FwCMD="/sbin/ipfw"
LanOut="vr0"
LanIn="vr1"
полученный после сохранения:
test
тест
1234#!/bin/sh
FwCMD=\"/sbin/ipfw\"
LanOut=\"vr0\"
LanIn=\"vr1\"
>[оверквотинг удален]
> LanOut="vr0"
> LanIn="vr1"
> полученный после сохранения:
> test
> тест
> 1234
> #!/bin/sh
> FwCMD=\"/sbin/ipfw\"
> LanOut=\"vr0\"
> LanIn=\"vr1\"Поиск в php.ini magic_quotes (магические кавычки)
Скорее всего включеныесли
1.magic_quotes_gpc = On
то, чтобы не заслешивалось, должно быть
2.magic_quotes_sybase = On
А у вас, скорее всего Offа если
1.magic_quotes_gpc = Off
то, 2 тогда пофиг, может быть
magic_quotes_sybase = Off
или
magic_quotes_sybase = OnВыставить нужные значения, перезапустить апач
>[оверквотинг удален]
>> полученный после сохранения:
>> test
>> тест
>> 1234
>> #!/bin/sh
>> FwCMD=\"/sbin/ipfw\"
>> LanOut=\"vr0\"
>> LanIn=\"vr1\"
> Поиск в php.ini magic_quotes (магические кавычки)
> Скорее всего включеныспасибо, пошел немного другим путем, убрал просто кавычки и все, без них тоже ipfw хавает переменные :)
михалыч, как можно с Вами связаться вне форума?
мой e-mail: admin[at]arh665.ru
буду благодарен, если откликнитесь