UID a přístup k souborům
To |
<czdebian-l zavinac debian bod cz> |
From |
"Jiří Jánský" <xJanskyJ zavinac seznam bod cz> |
Date |
Sun, 7 Dec 2003 16:29:00 +0100 |
Dobrý den,
u nás ve škole vzniknul požadavek dynamicky rekonfigurovat squid přes webové
rozhraní a mít tak možnost zakázat nebo povolit jednotlivá IP v lokální síti
(respektyvě jeejich přístup k internetu.
Moja myšlenka byla ta, že pomocí cgi-bin scriptu připojím k normálnímu
squid.conf IP adresy, které mají být povoleny a squid restartuji. A hned na
začátku jsem narazil na problém.
Zkopíroval jsem soubor /etc/init.d/squid do složky s cgi-bin scripty,
jako vlasníka nastavil root a zapnul suid bit (chmod u+s restart.sh - jestli
ne tak mě opravte). Když jsem se onen script pokusil spustit z příkazové
řádky jako obyčejný uživatel, tak to vypadá, jako že to nemá přístup ke
konfiguračnímu souboru squid.conf, který je povolen číst a zapisovat pouze
pro roota. No ale to by přece tek script mněl mít možnost přečíst, když má
nastavený ten SUID bit.
Za reakce děkuji Jiří Jánský
_______________________
přikládám chybové hlášení
jirka zavinac debian:/var/www/proxy$ ./restart.sh restart
Restarting proxy server: ./restart.sh: line 1: /etc/squid.conf: Přístup
odmítnut
./restart.sh: line 59: cd: /var/spool/squid: Přístup odmítnut
FATAL: Unable to open configuration file: /etc/squid.conf: (13) Permission
denied
Squid Cache (Version 2.5.STABLE3): Terminated abnormally.
CPU Usage: 0.010 seconds = 0.010 user + 0.000 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 313
./restart.sh: line 123: 663 Neúspěąně ukončen (SIGABRT)
start-stop-daemon --quiet --start --pidfile $PIDFILE --exec $DAEMON --
$SQUID_ARGS </dev/null
squid.
_____________________
a zde "restartovací script
#! /bin/sh
#
# squid Startup script for the SQUID HTTP proxy-cache.
#
# Version: @(#)squid.rc 2.20 01-Oct-2001 miquels zavinac cistron bod nl
#
NAME=squid
DAEMON=/usr/sbin/squid
LIB=/usr/lib/squid
PIDFILE=/var/run/$NAME.pid
SQUID_ARGS="-D -sYC"
[ ! -f /etc/default/squid ] || . /etc/default/squid
PATH=/bin:/usr/bin:/sbin:/usr/sbin
[ -x $DAEMON ] || exit 0
grepconf2 () {
w=" " # space tab
sq=/etc/$NAME.conf
# sed is cool.
res=`sed -ne '
s/^'$1'['"$w"']\+[^'"$w"']\+['"$w"']\+\([^'"$w"']\+\).*$/\1/p;
t end;
d;
:end q' < $sq`
[ -n "$res" ] || res=$2
echo "$res"
}
#
# Try to increase the # of filedescriptors we can open.
#
maxfds () {
[ -n "$SQUID_MAXFD" ] || return
[ -f /proc/sys/fs/file-max ] || return 0
[ $SQUID_MAXFD -le 4096 ] || SQUID_MAXFD=4096
global_file_max=`cat /proc/sys/fs/file-max`
minimal_file_max=$(($SQUID_MAXFD + 4096))
if [ "$global_file_max" -lt $minimal_file_max ]
then
echo $minimal_file_max > /proc/sys/fs/file-max
fi
ulimit -n $SQUID_MAXFD
}
start () {
cdr=`grepconf2 cache_dir /var/spool/$NAME`
case "$cdr" in
[0-9]*)
echo "squid: squid.conf contains 2.2.5 syntax - not starting!" >&2
exit 1
;;
esac
maxfds
umask 027
cd $cdr
start-stop-daemon --quiet --start \
--pidfile $PIDFILE \
--exec $DAEMON -- $SQUID_ARGS < /dev/null
sleep 1
}
stop () {
PID=`cat $PIDFILE 2>/dev/null`
start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
#
# Now we have to wait until squid has _really_ stopped.
#
sleep 2
if test -n "$PID" && kill -0 $PID 2>/dev/null
then
echo -n "Waiting ."
cnt=0
while kill -0 $PID 2>/dev/null
do
cnt=`expr $cnt + 1`
if [ $cnt -gt 60 ]
then
#
# Waited 120 seconds now. Fail.
#
echo -n " Failed.. "
break
fi
sleep 2
echo -n "."
done
[ "$1" = verbose ] && echo "done."
else
[ "$1" = verbose ] && echo "$NAME."
fi
}
case "$1" in
start)
echo -n "Starting proxy server: "
start
echo "$NAME."
;;
stop)
echo -n "Stopping proxy server: "
stop verbose
;;
reload|force-reload)
echo -n "Reloading $NAME configuration files: "
start-stop-daemon --stop --signal 1 \
--pidfile $PIDFILE --quiet --exec $DAEMON
echo "done."
;;
restart)
echo -n "Restarting proxy server: "
stop
start
echo "$NAME."
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|reload|force-reload|restart}"
exit 1
;;
esac
exit 0
Partial thread listing: