[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[perl] script firewall en setuid root -> insecure dependency



Bonjour,

J'essaye de mettre au point un petit script en perl pour pouvoir
modifier quelques regles de mon firewall sans être connecté en root

Quand ppp se connecte, il place l'adresse IP que me donne mon provider
dans /var/www/serveur/ip.conf, qui a les droits :
-rwxr--r--    1 root     www-data       14 aoû 30 07:48
/var/www/serveur/ip.conf

par la ligne suivante dans /etc/ppp/ip-up :
echo -n $4 > /var/www/serveur/ip.conf


J'ai ensuite créé un script firewall.pl avec les droits -rwsr-x--- qui
appartient a root et au groupe firewall, afin que tout utilisateur du
groupe firewall puisse l'executer

Pour appliquer certaines regles, j'ai besoin de connaitre mon adresse IP
externe, celle qui se trouve dans /var/www/serveur/ip.conf

Voici ce que contient mon script firewall.pl :

#! /usr/bin/perl

$ENV{'PATH'} = '/bin:/usr/bin:/sbin';
delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};

my $ip = "";

my $l = "";
 open(DESCR,"/var/www/serveur/ip.conf");
 while (defined(my $l=<DESCR>)) {$ip.= $l;}
 close(DESCR);

#print($ip);

my $iptables = '/sbin/iptables';

# La il y a des regles qui ne font que des choses classiques
# c'est ici que ca se complique :
# J'ai une 'insecure dependency in system' a la ligne ci dessous. Cela 
# provient de la variable $ip car si je la remplace par sa valeur, je 
# n'ai plus de pb.

system($iptables." -t nat -A PREROUTING -i ppp+ -p tcp -d ".$ip."
--dport 4661 -j DNAT --to 192.168.1.1:4661");
system($iptables." -t nat -A PREROUTING -i ppp+ -p tcp -d ".$ip."
--dport 4662 -j DNAT --to 192.168.1.1:4662");
system($iptables." -t nat -A PREROUTING -i ppp+ -p udp -d ".$ip."
--dport 4665 -j DNAT --to 192.168.1.1:4665");
system($iptables." -A FORWARD -i ppp+ -o eth0 -p tcp -d 192.168.1.1
--dport 4661 -j ACCEPT");
system($iptables." -A FORWARD -i ppp+ -o eth0 -p tcp -d 192.168.1.1
--dport 4662 -j ACCEPT");
system($iptables." -A FORWARD -i ppp+ -o eth0 -p udp -d 192.168.1.1
--dport 4665 -j ACCEPT");


Comment faire pour ne plus avoir ce probleme lié a l'execution en setuid
root ? J'ai cherché un option pour forcer perl, mais je n'ai pas trouvé
...

Merci d'avance pour votre aide

-- 
Grégoire CACHET
http://www.audacy.fr




Reply to: