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

2003-08-30 Thread Gregoire Cachet
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=)) {$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




Re: script firewall en setuid root -> insecure dependency

2003-08-30 Thread Nicolas
Pour t'aider en perl: perldoc -f system

Tu as ainsi de la doc sur le l'utilisation d'une fonction.


Le Sun, Aug 31, 2003 at 12:33:03AM, Gregoire Cachet a écrit:
> Le sam 30/08/2003 à 12:18, François Boisson a écrit :
> 
> > Bonjour
> > 
> Bonjour,
> 
> > 
> > > $ENV{'PATH'} = '/bin:/usr/bin:/sbin';
> > 
> > puet être le /sbin dans le PATH (je n'y crois pas, cf plutôt plus bas)
> > 
> 
> je viens de le retirer, il servait a rien de toute les facons, parce que
> j'avais 
> 
> my $iptables = '/sbin/iptables';
> 
> ayant vu sur internet que cela pouvais etre source d'insecure dependency
> ...
> 
> > > 
> > > system($iptables." -t nat -A PREROUTING -i ppp+ -p tcp -d ".$ip."
> > > --dport 4661 -j DNAT --to 192.168.1.1:4661");
> > 
> > Pour exécuter une commande système dans un script suid root, il est
> > préférable de séparer le camooande des arguments, en clair essayes system
> > $iptables, "-t nat -A PREROUTING -i ppp+ -p tcp -d ".$ip. --dport 4661 -j
> > DNAT --to 192.168.1.1:4661"
> > 
> 
> Deja un bon point, je viens de comprendre quelque chose :
> la virgule sert a séparer la commande des arguments, je ne comprenais
> pas pourquoi il y avait une virgule sur les documents sur le net, je
> pensais a la concaténation, mais pourquoi pas un . ?
> j'ai donc séparé la commande de ses arguments a l'aide de la virgule.
> Cependant il a l'air de prendre en compte toute la fin de la chaine
> comme un seul caractere, ce qui ne plait pas a iptables qui m'injurie
> ... 
> Dois-je placer des virgules entre chaque argument ?? c'est un peu lourd
> ... 
> D'autant plus que 
> 
> system($iptables." -P FORWARD DROP");
> 
> fonctionne sans pb avec le . par exemple
> 
> Je pense donc bien qu'il s'agit de la variable $ip qui met le bordel ...
> en plus quand je la remplace par sa valeur a la main, il n'y a pas de pb
> 
> > (tiens Edonkey!)
> 
> gagné ;-)
> 
> > 
> > Ca devrait mieux marcher.
> > Le mieux est de préciser le chemin complet de la commande dans $iptables.
> > 
> > En espérant que ça marche
> > 
> 
> eh non sniff ...
> 
> merci pour ton aide !
> 
> -- 
> Grégoire CACHET
> http://www.audacy.fr
> 
> 
> -- 
> Pensez à lire la FAQ de la liste avant de poser une question :
> http://savannah.nongnu.org/download/debfr-faq/html/
> 
> To UNSUBSCRIBE, email to [EMAIL PROTECTED]
> with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
> 
---end quoted text---



Re: script firewall en setuid root -> insecure dependency

2003-08-30 Thread Gregoire Cachet
Le dim 31/08/2003 à 01:17, Nicolas a écrit :
> Pour t'aider en perl: perldoc -f system
> 
> Tu as ainsi de la doc sur le l'utilisation d'une fonction.
> 

merci, c'est mieux que google ;-)

bon, et bien j'ai fais la *methode super crade que je redoutais de
faire* ... j'ai séparé tous les arguments par une virgule ... et ca
marche !

merci a tous pour votre aide si precieuse ;-)

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



Re: script firewall en setuid root -> insecure dependency

2003-08-30 Thread Nicolas Boisselier
Pour infos cette méthode n'est pas "crade" et est même préférable!

Tant que tu peux, passes les arguments sous forme de tableau:
system("ls","-1");
Sinon passe un seul argument:
system("ls -1 | wc -l");

Le Sun, Aug 31, 2003 at 02:23:02AM, Gregoire Cachet a écrit:
> Le dim 31/08/2003 à 01:17, Nicolas a écrit :
> > Pour t'aider en perl: perldoc -f system
> > 
> > Tu as ainsi de la doc sur le l'utilisation d'une fonction.
> > 
> 
> merci, c'est mieux que google ;-)
> 
> bon, et bien j'ai fais la *methode super crade que je redoutais de
> faire* ... j'ai séparé tous les arguments par une virgule ... et ca
> marche !
> 
> merci a tous pour votre aide si precieuse ;-)
> 
> -- 
> Grégoire CACHET
> http://www.audacy.fr
> 
> 
> -- 
> Pensez à lire la FAQ de la liste avant de poser une question :
> http://savannah.nongnu.org/download/debfr-faq/html/
> 
> To UNSUBSCRIBE, email to [EMAIL PROTECTED]
> with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
> 
---end quoted text---

-- 
Email: [EMAIL PROTECTED]
Adr: 174 avenue Raymond Naves 31500 TOULOUSE
Tel: 05 61 20 44 94



Re: script firewall en setuid root -> insecure dependency

2003-08-31 Thread Gregoire Cachet
Le dim 31/08/2003 à 03:12, Nicolas Boisselier a écrit :
> Pour infos cette méthode n'est pas "crade" et est même préférable!
> 
> Tant que tu peux, passes les arguments sous forme de tableau:
>   system("ls","-1");
> Sinon passe un seul argument:
>   system("ls -1 | wc -l");

de la a passer un tableau avec plus de 10 elements, ca fais moche je
trouve ! et coder comme ca, c'est un peu pénible !

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



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

2003-08-30 Thread François Boisson
On Sat, 30 Aug 2003 09:15:10 +0200
Gregoire Cachet <[EMAIL PROTECTED]> wrote:

> Bonjour,
> 

Bonjour


> $ENV{'PATH'} = '/bin:/usr/bin:/sbin';

puet être le /sbin dans le PATH (je n'y crois pas, cf plutôt plus bas)

> 
> system($iptables." -t nat -A PREROUTING -i ppp+ -p tcp -d ".$ip."
> --dport 4661 -j DNAT --to 192.168.1.1:4661");

Pour exécuter une commande système dans un script suid root, il est
préférable de séparer le camooande des arguments, en clair essayes system
$iptables, "-t nat -A PREROUTING -i ppp+ -p tcp -d ".$ip. --dport 4661 -j
DNAT --to 192.168.1.1:4661"

(tiens Edonkey!)

Ca devrait mieux marcher.
Le mieux est de préciser le chemin complet de la commande dans $iptables.

En espérant que ça marche

François Boisson



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

2003-08-30 Thread Gregoire Cachet
Le sam 30/08/2003 à 12:18, François Boisson a écrit :

> Bonjour
> 
Bonjour,

> 
> > $ENV{'PATH'} = '/bin:/usr/bin:/sbin';
> 
> puet être le /sbin dans le PATH (je n'y crois pas, cf plutôt plus bas)
> 

je viens de le retirer, il servait a rien de toute les facons, parce que
j'avais 

my $iptables = '/sbin/iptables';

ayant vu sur internet que cela pouvais etre source d'insecure dependency
...

> > 
> > system($iptables." -t nat -A PREROUTING -i ppp+ -p tcp -d ".$ip."
> > --dport 4661 -j DNAT --to 192.168.1.1:4661");
> 
> Pour exécuter une commande système dans un script suid root, il est
> préférable de séparer le camooande des arguments, en clair essayes system
> $iptables, "-t nat -A PREROUTING -i ppp+ -p tcp -d ".$ip. --dport 4661 -j
> DNAT --to 192.168.1.1:4661"
> 

Deja un bon point, je viens de comprendre quelque chose :
la virgule sert a séparer la commande des arguments, je ne comprenais
pas pourquoi il y avait une virgule sur les documents sur le net, je
pensais a la concaténation, mais pourquoi pas un . ?
j'ai donc séparé la commande de ses arguments a l'aide de la virgule.
Cependant il a l'air de prendre en compte toute la fin de la chaine
comme un seul caractere, ce qui ne plait pas a iptables qui m'injurie
... 
Dois-je placer des virgules entre chaque argument ?? c'est un peu lourd
... 
D'autant plus que 

system($iptables." -P FORWARD DROP");

fonctionne sans pb avec le . par exemple

Je pense donc bien qu'il s'agit de la variable $ip qui met le bordel ...
en plus quand je la remplace par sa valeur a la main, il n'y a pas de pb

> (tiens Edonkey!)

gagné ;-)

> 
> Ca devrait mieux marcher.
> Le mieux est de préciser le chemin complet de la commande dans $iptables.
> 
> En espérant que ça marche
> 

eh non sniff ...

merci pour ton aide !

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