Передача значения REMOTE_ADDR в среду bash

greend

Guest
Передача значения REMOTE_ADDR в среду bash

У меня Apache 1.3.25 и php 4. Все это под Linux (Slackware).
Проблема такая есть скрипт в среде bash, который отсылает сообщение о выполнении скрипта *.php. В сообщении должен присутствовать адрес машины с которой этот скрипт пытались запустить.

Скрипт выглядит следующим образом:

#!/bin/bash
echo "Warning!" | /usr/bin/smbclient -M имя_машины куда отсылается сообщение >/dev/null 2>&1;

Так вот после Warning хотелось бы чтобы стоял ip-адрес хоста с которого пытались запустить *.php скрипт

Причем если написать после Warning $REMOTE_ADDR, то возвращается пустая строка, а вот перл скрипт ловит данный параметр.

Очень прошу помогите. После данной помощи оставлю на форуме сообщение как, практически на 100% защитить сервак. Пока не хватает 20%, которые находятся в данном вопросе.
 

Tor

Новичок
greend
выполняется php-скрипт, а потом он, по окончании своей работы вызывает bash-скрипт?
 

untied

Сдвинутый новичок
$REMOTE_ADDR -- это, вообще говоря, т.н. environment variable среды выполнения. Когда Апач запускает скрипт, он устанавливает некоторые переменные среды (как то: HTTP_USER_AGENT, REQUEST_URI и т.п.), задавая им некоторые значения, справедливые для данного сеанса выполнения скрипта.
То есть тебе просто нужно узнать способ получения переменных среды для скрипта bash. Думаю, интернет в этом поможет.
Например, в Perl переменная среды получается так:
$var_value = $ENV{'HTTP_USER_AGENT'};
В C:
$var_value = getenv("HTTP_USER_AGENT");

Наверняка должен быть способ и для скрипта bash.
 

Altex

Новичок
#!/bin/sh

# disable filename globbing
set -f

echo Content-type: text/plain
echo

echo CGI/1.0 test script report:
echo

echo argc is $#. argv is "$*".
echo

echo SERVER_SOFTWARE = $SERVER_SOFTWARE
echo SERVER_NAME = $SERVER_NAME
echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE
echo SERVER_PROTOCOL = $SERVER_PROTOCOL
echo SERVER_PORT = $SERVER_PORT
echo REQUEST_METHOD = $REQUEST_METHOD
echo HTTP_ACCEPT = "$HTTP_ACCEPT"
echo PATH_INFO = "$PATH_INFO"
echo PATH_TRANSLATED = "$PATH_TRANSLATED"
echo SCRIPT_NAME = "$SCRIPT_NAME"
echo QUERY_STRING = "$QUERY_STRING"
echo REMOTE_HOST = $REMOTE_HOST
echo REMOTE_ADDR = $REMOTE_ADDR
echo REMOTE_USER = $REMOTE_USER
echo AUTH_TYPE = $AUTH_TYPE
echo CONTENT_TYPE = $CONTENT_TYPE
echo CONTENT_LENGTH = $CONTENT_LENGTH


------
P.S. У меня работает

-~{}~ 05.03.05 17:01:

P.S. У меня работает
 

untied

Сдвинутый новичок
Думаю, "это" кладется в каталог /cgi-bin, файлу присваиваются атрибуты -rwxr-xr-x и запускается из браузера в виде ссылки _http://www.somewhere.ru/cgi-bin/cool_script
 

sokol

Zavolga.Net
А что нельзя bash-скрипт вызвать с нужными параметрами с помошью exec() или system().

Например:
exec('script.sh '.$_SERVER['REMOTE_ADDR']);

А внутри скрипта получить при помощи аргументов $1, $2 и.т.д
 

greend

Guest
Все предложенния, которые здесь были рассмотрены уже были испробованы и они не работают. Так что если есть у кого-нить идеи еще напишите плиз.
 

sokol

Zavolga.Net
greend
А ты уверен, что они не работают?
Если тебе нужные именно переменные среды, то смотри функцию putenv(). В своем скрипте ты сможешь плучить установленные значения.

Метод с exec() работает всегда, если вызов данной функции разрешен.
 

untied

Сдвинутый новичок
Автор, а вообще действительно! Объясни, plz, зачем тебе понадобилось использовать именно bash-скрипт для своих целей? Чем не подходит Perl или PHP?
 

greend

Guest
Автор оригинала: untied
Автор, а вообще действительно! Объясни, plz, зачем тебе понадобилось использовать именно bash-скрипт для своих целей? Чем не подходит Perl или PHP?
Для чего нужно, объясняю, есть сервак на нем много PHP скриптов. Есть такая возможность запуска системных команд(ls,cat...) подставляя их после скрипта, кто знает поймет как. Так вот я создал свой башевский скрипт который отлавливает любой запуск системных команд и выполняется вместо них. Так вот в этом скрипте у меня отсылается сообщение мне на машину когда была попытка выполнить системную команду, а еще хочу получить IP-адрес и вставить его в конфиг в раздел Deny from ...... Так что помогите?!!
 

Tor

Новичок
т.е. у тебя в, например, /bin/ls написано

#!/usr/local/bin/php -q

и так далее?

ужас, куда катится этот мир

команд(ls,cat...) подставляя их после скрипта
hint: в любом месте
 

greend

Guest
т.е. у тебя в, например, /bin/ls написано

#!/usr/local/bin/php -q

и так далее?

ужас, куда катится этот мир
Нет не так каталог bin я не трогал. Просто у меня есть отдельный каталог например binn где слинкованы все команды из bin и sbin, которые отправляют сообщение и записывает IP.
 

Tor

Новичок
итак, по-порядку

из скрипта ты вызываешь /binn/ls ?
который записывает IP и вызывает /bin/ls ?
и передает результат
 

greend

Guest
Автор оригинала: Tor
итак, по-порядку

из скрипта ты вызываешь /binn/ls ?
который записывает IP и вызывает /bin/ls ?
и передает результат
Да нет после того как он послал сообщение и записал IP, он не выполняет ничего, т.е. пользователь не видет ничего.
 

Tor

Новичок
ссссссссамого начала

юзер вводит адресс в браузер
http://supersite.com/test.php

в этом test.php кроме всего прочего, вызывается `/binn/ls`
этот /binn/ls должен записать IP и больше ничего

так?
 

Tor

Новичок
ну тогда следи внимательно:

кто вызывает test.php (и соответсвенно выстявляет переменные окружения)

и кто вызывает /binn/ls (и кто в этом случае ничего не выставляет)

ты править test.php можешь?
 

greend

Guest
Автор оригинала: Tor
ну тогда следи внимательно:

кто вызывает test.php (и соответсвенно выстявляет переменные окружения)

и кто вызывает /binn/ls (и кто в этом случае ничего не выставляет)

ты править test.php можешь?
Да править могу, но только у жочень много скриптов на сервере все же не переправишь.
 
Сверху