Apache2 CGI Skript mit mehr Rechten

Alles, was den Apache betrifft, kann hier besprochen werden.

Apache2 CGI Skript mit mehr Rechten

Postby krischeu » 22. July 2016 08:00

Hallo,

ich habe hier 2 Skripte. Auf der Shell (root) läuft das super. Aber beim Aufruf über den Browser als CGI funktioniert das leider nicht.
Ich denke es liegt hier ein Berechtiungsproblem vor, da alles als www-data ausgeführt wird. Ich hab schon einiges ausprobiert, komme aber nicht weiter.

Kann mir da mal jemand helfen?

Grüße

Heinz

p.s. Der Aufruf im Browser ist: "http://192.168.0.13/cgi-bin/test.sh?1=192.168.0.247&2=heinz&3=4444&4=015168151171"
Es kommt folgende Ausgabe:
created by Heinz

IP: 192.168.0.247

username: heinz

password: 4444

dialToNumber: 015168151171
USER: 26907USER
GROUP: 26907GROUP
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SKRIPTPFAD: /usr/lib/cgi-bin
www-data
Login into Operator Client... Login failed

Startskript
Code: Select all
#!/bin/bash


OPTION1=`echo "$QUERY_STRING" | grep -oE "(^|[?&])1=[^&]+" |  sed "s/%20/ /g" | cut -f 2 -d "=" | head -n1`
OPTION2=`echo "$QUERY_STRING" | grep -oE "(^|[?&])2=[^&]+" |  sed "s/%20/ /g" | cut -f 2 -d "="`
OPTION3=`echo "$QUERY_STRING" | grep -oE "(^|[?&])3=[^&]+" |  sed "s/%20/ /g" | cut -f 2 -d "="`
OPTION4=`echo "$QUERY_STRING" | grep -oE "(^|[?&])4=[^&]+" |  sed "s/%20/ /g" | cut -f 2 -d "="`

echo "Content-type: text/html"
echo ""
echo "<html><head><title>carhs telefonmaschine</title></head><body><h1>created by Heinz</h1><pre>";
echo "IP: <em>$OPTION1</em><br />"
echo "username: <em>$OPTION2</em><br />"
echo "password: <em>$OPTION3</em><br />"
echo "dialToNumber: <em>$OPTION4</em><br />"
echo "</pre></body></html>";

echo "<br>"
echo "USER: "$$USER
echo "<br>"
echo "GROUP: "$$GROUP
echo "<br>"
echo "PATH: "$PATH
echo "<br>"
k=`pwd`
echo "SKRIPTPFAD: "$k
echo "<br>"
wer_bin_ich=`whoami`
echo $wer_bin_ich
echo "<br>"
./dial.sh 192.168.0.247 heinz 44444 015168151171
krischeu
 
Posts: 6
Joined: 18. July 2007 11:40

Re: Apache2 CGI Skript mit mehr Rechten

Postby Nobbie » 22. July 2016 11:01

Das Startscript ist nur nicht das Problem, die Fehlermeldungen kommen aus dial.sh

P.S.: Außerdem ist in dem Script bei $USER und $GROUP jeweils ein $ zuviel davor, daher die etwas eigenartig anmutende Ausgabe. Anstatt der Werte für $USER und $GROUP wird $$USER ausgegeben, $$ ist die ProzessID und gefolgt von dem Wort "USER", ebenso für $$GROUP.
Nobbie
 
Posts: 8761
Joined: 09. March 2008 13:04

Re: Apache2 CGI Skript mit mehr Rechten

Postby krischeu » 22. July 2016 11:05

Tja,
ja. Fehlermeldung kommt tatsächlich aus der dial.sh

Aber auf der Shell können beide miteinander spielen. Da denke ich halt an ein Berechtigungsproblem.

Code: Select all
#!/bin/bash

if [ $# -ne 4 ]; then
  echo "usage: $0 <IP> <username> <password> <dialToNumber>"
  exit 1
fi

cleanup() {
        ## clean & exit
        rm -f cookie.txt result.txt
}
trap cleanup EXIT INT TERM

IP="$1"
USERNAME="$2"
PASSWORD="$3"
DIAL_TO="$4"
COOKIE=./cookie.txt
#login
echo "Login into Operator Client..."
wget -q -O - https://${IP}/myphone/dologin.php --no-check-certificate --keep-session-cookies --post-data "kerio_username=${USERNAME}&kerio_password=${PASSWORD}" --save-cookies ${COOKIE} >/dev/null

#get token from cookie
X_TOKEN=`grep TOKEN_OPERATOR_CLIENT ${COOKIE} | awk '{print $7}'`
if [ ! -n "$X_TOKEN" ]; then
        echo "Login failed"
        exit 1
fi

echo "Get all user's extensions..."
RESULT=./result.txt
GUID=""
wget -q -O - https://${IP}/myphone/api/jsonrpc/ --no-check-certificate --post-data "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"UserSettings.get\",\"params\":{}}" --load-cookies ${COOKIE} --header="X-Token: ${X_TOKEN}" > $RESULT

# get GUID of the first extension from array EXTENSIONS
GUID=$(sed 's|.*"lines":\[{"guid":\([0-9]\+\),.*|\1|' <$RESULT)
RE_NUM='^[0-9]+$'
if ! [[ $GUID =~ $RE_NUM ]] ; then
        echo "Failed to find an available extension"
        exit 1
fi

wget -q -O - https://${IP}/myphone/api/jsonrpc/ --no-check-certificate --post-data "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"UserPhone.dial\",\"params\":{\"extensionGuid\":${GUID},\"toNum\":\"${DIAL_TO}\"}}" --load-cookies ${COOKIE} --header="X-Token: ${X_TOKEN}" > /dev/null
krischeu
 
Posts: 6
Joined: 18. July 2007 11:40

Re: Apache2 CGI Skript mit mehr Rechten

Postby Nobbie » 22. July 2016 11:17

krischeu wrote:Aber auf der Shell können beide miteinander spielen.


Hä??

Man sieht jetzt ja, dass auch da die Fehlermeldung nicht her kommt. Die kommt offensichtlich aus dem Script dologin.php aus dem Unterverzeichnis ./myphone auf dem Server 192.168.0.247. Ob das mit Berechtigung zu tun hat, glaube ich nicht, da steht ja irgendetwas von fehlerhaftem Login, das ist in aller Regel kein Berechtigungsproblem, sondern irgendwelche ungültigen User/Passwort Daten.

P.S.: Möglicherweise wird das Script dologin.php gar nicht erst aufgerufen oder mit den falschen Parametern. Das wird das Problem sein. Vielleicht wird auch "wget" gar nicht erst ausgeführt, weil im Shell Umfeld (wenn man Scripte in Terminal ausführt) ein ganz anderes Environment (Umgebung) vorliegt als in einem CGI Aufruf. Oder der "grep" auf $COOKIE (= ./cookie.txt) geht in die Hose, vielleicht ist die Textdatei für Apache nicht lesbar. So oder so musst Du es debuggen, baue jede Menge echo's ein, nimm auch die Umleitungen auf /dev/null heraus, leite stattdessen die Ausgabe in lesbare Dateien (da kann man dann nachher sehen, ob wget beispielsweise geklappt hat) und lasse Dir auch insbesondere alle Werte aller Variablen aus dial.sh ausgeben, ob da auch das drin steht, was erwartet wird.
Nobbie
 
Posts: 8761
Joined: 09. March 2008 13:04

Re: Apache2 CGI Skript mit mehr Rechten

Postby krischeu » 03. August 2016 08:08

Problem gelöst. Das Skript hat Daten ablegen wollen. Jetzt nach /tmp ablegen lassen und es funktioniert nun.
krischeu
 
Posts: 6
Joined: 18. July 2007 11:40


Return to Apache

Who is online

Users browsing this forum: No registered users and 4 guests