[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=)) {$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
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
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
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
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
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
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