Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[Script PHP &/ou Perl ?] Script inscription systeme! Urg
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
geforce
l33t
l33t


Joined: 29 Dec 2003
Posts: 654
Location: Canada

PostPosted: Mon Dec 13, 2004 10:37 pm    Post subject: [Script PHP &/ou Perl ?] Script inscription systeme! Urg Reply with quote

Bonjour, j'ai fait un script en bash pour ajouter des utilisateurs avec compte E-mail et tout sur mon serveur..

Maintenant j'aimerais savoir comment faire (ou s'ils existe) un script PHP ou PERL/PHP pour executer le script en tant que root avec les variables que je recevrai du Formulaire:

L'utilisateur rempli le formulaire et le script PHP demarre le script bash (en root):
/root/script/useradd.sh $username $password $virtualhost

cepedant je me demande s'ils n'existe pas deja un script de ce style qui a ete fait que je pourrais downloader (j'ai besoin que ce soit fait pour Vendredi!)

Merci a l'avance !

Phil
_________________
http://tilde.club/~geforce/
Back to top
View user's profile Send private message
razer
l33t
l33t


Joined: 08 Oct 2004
Posts: 893
Location: Paris - France

PostPosted: Mon Dec 13, 2004 10:53 pm    Post subject: Reply with quote

ben je pense que si tu veux executer un script en root, il faut que ton serveur apache soit root, ce qui pose un gros pb de securité
Tu peux utiliser les commandes personnalisées du tintouin Webmin, mais c'est p'tet un peu gros pour ce que tu veux faire...
Back to top
View user's profile Send private message
DomiX
Apprentice
Apprentice


Joined: 26 Oct 2003
Posts: 209
Location: Paris (FRANCE)

PostPosted: Mon Dec 13, 2004 11:24 pm    Post subject: Reply with quote

Bonsoir,

Tu peux aussi utiliser sudo, mais je sais pas vraiment si c'est l'idéal

Bye
_________________
"La connaissance technique ne suffit pas. On doit surpasser les techniques de sorte que l'art devienne un art sans artifice qui apparaît de l'inconscient."

- Daisetsu Suzuki (1870-1966) -
Back to top
View user's profile Send private message
spider312
Veteran
Veteran


Joined: 02 Oct 2004
Posts: 1274
Location: France > Savoie > Chambery

PostPosted: Tue Dec 14, 2004 12:50 am    Post subject: Reply with quote

DomiX wrote:
Bonsoir,

Tu peux aussi utiliser sudo, mais je sais pas vraiment si c'est l'idéal

Bye

oui, sudo, y'a que ça de vrai, je vois pas vraiment d'autre soluce
Back to top
View user's profile Send private message
geforce
l33t
l33t


Joined: 29 Dec 2003
Posts: 654
Location: Canada

PostPosted: Tue Dec 14, 2004 2:04 am    Post subject: Reply with quote

Voici mon script actuel (qui ne semble pas fonctionner):

Code:

<?
$nam = $_POST['username'];
$pas = $_POST['password'];
$virtualu = $_POST['sivirtual'];

if ($pas != "" && $nam!="")
{
shell_exec('sudo su; /root/script/useradd.sh ' .$nam .' ' .$pas ' ' .$virtualu);
include("reussi.html");
}
else {
echo "Il manque des informations!";
}
?>

_________________
http://tilde.club/~geforce/
Back to top
View user's profile Send private message
spider312
Veteran
Veteran


Joined: 02 Oct 2004
Posts: 1274
Location: France > Savoie > Chambery

PostPosted: Tue Dec 14, 2004 2:14 am    Post subject: Reply with quote

Code:
shell_exec('sudo su; /root/script/useradd.sh ' .$nam .' ' .$pas ' ' .$virtualu);

=>
Code:
$bash_adduser = '/root/script/useradd.sh ' .$nam . ' ' .$pas . ' ' . $virtualu ;
$result = `sudo $bash_adduser`


Et là tu as le résultat de ta commnde dans $reslut, que tu peux parser pour traiter les erreurs

Au passage, j'ai cru voir quelques erreurs de syntaxe dans ton code, quelles sont les erreurs retournées ?
Back to top
View user's profile Send private message
geforce
l33t
l33t


Joined: 29 Dec 2003
Posts: 654
Location: Canada

PostPosted: Tue Dec 14, 2004 2:24 am    Post subject: Reply with quote

Page blance :evil:
J'y comprend rien je vais recommencer from scratch je crois..
_________________
http://tilde.club/~geforce/
Back to top
View user's profile Send private message
spider312
Veteran
Veteran


Joined: 02 Oct 2004
Posts: 1274
Location: France > Savoie > Chambery

PostPosted: Tue Dec 14, 2004 2:35 am    Post subject: Reply with quote

et le source aussi est vide ?

pour l'execution, commnce avec des script tout bidon, genre un script qui fait juste un "whoami", puis essaye le en user normal, puis avec sudo (il devrait alors te retourner "root") via ton script PHP, ça t'aidera peut-être à débuguer
Back to top
View user's profile Send private message
geforce
l33t
l33t


Joined: 29 Dec 2003
Posts: 654
Location: Canada

PostPosted: Tue Dec 14, 2004 2:39 am    Post subject: Reply with quote

Hmmm miantenant c'est mon script bash le probleme je crois...

J'ai besoin d'utiliser useradd avec l'option -p $password... Mais ca marche pas !!!

En tout cas si quelqu'un pouvait m'aider avec ce script la aussi :P

Code:

#! /bin/bash

## On definit les variables..
POSPAR1="$1"
POSPAR2="$2"
POSPAR3="$3"

useradd $1 -m -G users -d /home/$1 -s /bin/false -p $3
echo "Creation du User '$1'"
echo "creating de son dossier de E-mail"
maildirmake /home/$1/.maildir
echo "attribution des droits aux dossiers user"
chown -R $1 /home/$1/.maildir
echo "creation de son dossier Web"
mkdir /home/$1/public_html
chown -R $1 /home/$1/public_html
cd /var/www/localhost/htdocs
ln -sf /home/$1/public_html $1
echo "attribution des droits du dossier Web"
chmod g+x /home/$1
############################################### IF
if [ "$2" = "+virtual" ]; then
echo "Creation du Virtual Host pour '$1'"
echo "" >> /etc/apache2/conf/vhosts/vhosts.conf
echo "<VirtualHost *:80> ## $1
    ServerName $1.geforce.no-ip.org
    ServerPath /$1
    DocumentRoot /var/www/localhost/htdocs/$1
    ServerAdmin $1@geforce.no-ip.org
</VirtualHost> ## $1" >> /etc/apache2/conf/vhosts/vhosts.conf
cd ~
echo "Creation d'une page test"
echo "<html>
<head>
<title>Espace web de $1</title>
</head>
<body>
<p><b>$1</b> n'a pas modifi<span lang="fr-ca">é sa page web.</span></p>
</body>
</html>" > /home/$1/public_html/index.php
chmod 755 /home/$1/public_html/index.php
chown $1 /home/$1/public_html/index.php
chgrp users /home/$1/public_html/index.php
echo "Je reload le serveur Apache"
/etc/init.d/apache2 reload
echo "'$1' cree le $(date)" >> stat.txt
echo "Operation terminee"
exit
############################# ELSE
else
echo "pas de VirtualHOST pour cet user"
echo "Creation d'une page test"
echo "<html>
<head>
<title>Espace web de $1</title>
</head>
<body>
<p><b>$1</b> n'a pas modifi<span lang="fr-ca">é sa page web.</span></p>
</body>
</html>" > /home/$1/public_html/index.php
chmod 755 /home/$1/public_html/index.php
chown $1 /home/$1/public_html/index.php
chgrp users /home/$1/public_html/index.php
echo "'$1' cree le $(date)" >> stat.txt
exit
fi


J'ai aussi modifie mon script PHP:

Code:

<?
$nam = $_POST['username'];
$pas = $_POST['password'];
$virtualu = $_POST['sivirtual'];
$bash_adduser = '/root/script/useradd.sh ' .$nam . ' ' .$virtualu . ' ' . $pas ;
$result = `sudo $bash_adduser`;

if ($pas != "" && $nam!="")
{
shell_exec('$result');
include("reussi.html");
}
else {
echo "Il manque des informations!";
}
?>

_________________
http://tilde.club/~geforce/


Last edited by geforce on Tue Dec 14, 2004 1:33 pm; edited 1 time in total
Back to top
View user's profile Send private message
spider312
Veteran
Veteran


Joined: 02 Oct 2004
Posts: 1274
Location: France > Savoie > Chambery

PostPosted: Tue Dec 14, 2004 3:53 am    Post subject: Reply with quote

bon, là il est trop tard pour que je t'aide tout de suite, mai il y a quand même de nombreux trucs assez reprochable, le plus flagrant, c'est que ce n'est pas au script bash d'aficher du HTML ! enfin ce n'est pas ça qui povoque des bugs, mais pour débuguer, ça aide franchement pas
Back to top
View user's profile Send private message
rg421
Apprentice
Apprentice


Joined: 07 Dec 2004
Posts: 192
Location: Strasbourg

PostPosted: Tue Dec 14, 2004 12:32 pm    Post subject: Reply with quote

Moi, personnellement, je trouve que le plus choquant c'est
Quote:
# ############################## #
# Copyright Philippe Desmarais #
# 2004-2005 #
# ############################## #

ça ! S'il ne veut pas faire profiter la communauté de son script, je ne vois pas bien pourquoi la communauté l'aiderai à le faire ! Pour qu'il le lui vende ensuite ? En espérant que ce soit une erreur d'interprétation...

Je suis peut-être un vieux con, mais là, j'ai du mal.

--
Renaud
Back to top
View user's profile Send private message
geforce
l33t
l33t


Joined: 29 Dec 2003
Posts: 654
Location: Canada

PostPosted: Tue Dec 14, 2004 1:34 pm    Post subject: Reply with quote

Heureux maintenant ?

Je veux pas vendre le script. Je veux juste que ceux qui l'utilisent sachent que ca vient de moi.

Et c'est normal que ce soit le script bash qui affiche une page HTML:

Cette page est creee pour chaque utilisateur cree:


$1 n'a pas cree sa page web devient:


Utilisateur n'a pas cree ca page web..
_________________
http://tilde.club/~geforce/
Back to top
View user's profile Send private message
spider312
Veteran
Veteran


Joined: 02 Oct 2004
Posts: 1274
Location: France > Savoie > Chambery

PostPosted: Tue Dec 14, 2004 1:41 pm    Post subject: Reply with quote

bon et ton script ne te retourne rien quand tu le lances à la main ?
Back to top
View user's profile Send private message
geforce
l33t
l33t


Joined: 29 Dec 2003
Posts: 654
Location: Canada

PostPosted: Tue Dec 14, 2004 1:44 pm    Post subject: Reply with quote

l'utilisateur se cree mais son mot de passe ne fonctionne pas..

c'est le useradd .. quand j'utilise le -p pour setter le mot de passe il veut vraiment pas.


Je me demandais si il avait pas moyen de prendre passwd ?
_________________
http://tilde.club/~geforce/
Back to top
View user's profile Send private message
spider312
Veteran
Veteran


Joined: 02 Oct 2004
Posts: 1274
Location: France > Savoie > Chambery

PostPosted: Tue Dec 14, 2004 2:02 pm    Post subject: Reply with quote

geforce wrote:
l'utilisateur se cree mais son mot de passe ne fonctionne pas..

c'est le useradd .. quand j'utilise le -p pour setter le mot de passe il veut vraiment pas.


Je me demandais si il avait pas moyen de prendre passwd ?

dasn ce cas, un simple man passwd répond à tes questions :

Code:
       --stdin
              Cette option est utilisée pour indiquer que passwd doit lire le nouveau  mot
              de passe à partir de l'entrée standard, qui peut être un tube.


en bash, ça doit surement donner un truc comme :
Code:
echo $passwd | passwd $username --stdin

enfin à toi d'essayer cette soluce
Back to top
View user's profile Send private message
rg421
Apprentice
Apprentice


Joined: 07 Dec 2004
Posts: 192
Location: Strasbourg

PostPosted: Tue Dec 14, 2004 2:38 pm    Post subject: Reply with quote

Quote:
Heureux maintenant ?

Oui
Quote:
Je veux pas vendre le script. Je veux juste que ceux qui l'utilisent sachent que ca vient de moi.

Il y a d'autre moyen pour ça. Pour te donner un exemple (issue tout droit d'un soft en licence GPL que tout le monde connais: grep)
Quote:
/* grep.c - main driver file for grep.
Copyright 1992, 1997-1999, 2000 Free Software Foundation, Inc.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */

/* Written July 1992 by Mike Haertel. */

Tu remarqueras que le copyright est déposé par la FSF, mais qu'il est bien précisé "Written by X". Comme ça personne "n'oublie" qui a écrit le programme et surtout, tout le monde sait à qui s'adresser en cas de demande de nouvelle feature, de remonter de bug...

Quote:
Et c'est normal que ce soit le script bash qui affiche une page HTML:

Cette page est creee pour chaque utilisateur cree:

Définitivement, non. Pour 2 raisons :
1/ Si tu veux une page (identique) pour chaque utilisateur, utilise /etc/skel. C'est là pour ça.
2/ On essaye en programmation, dans un soucis de clareté, de ne pas mélanger le code et les données. En plus, cela permet d'éviter tous les effets de bord de quelque chose comme
Code:
echo "<VirtualHost *:80> ## $1
que je défi quiconque d'interprêter, surtout un shell.

En commançant par le début :
Code:
POSPAR1="$1"
POSPAR2="$2"
POSPAR3="$3"
est très maladroit. Il faut que je fouille le code en profondeur pour savoir ce qu'est $n. Je te propose à la place
Code:
NomUser="${1}"
VirtualHost="${2}"
UserPass="${3}"

D'une part, les noms de variables sont explicites, d'autre part, les noms des arguments sont protégés.
Quote:
useradd $1 -m -G users -d /home/$1 -s /bin/false -p $3

Pourquoi réutiliser $1 et $3 ? Dans mon cas
Code:
sudo useradd "${NomUser}" -m -G users -d /home/"{NomUser}" -s /bin/false -p "${UserPass}"
Il faudra ici, autoriser apache à utiliser la commande sudo avec l'argument useradd sans mot de passe. Attention: effet de bord garantie. Un "user" mal intentionné pourra te remplir ton disque dur de faux user. Il faut que tu controles qui tu autorises à te connecter à la page web exécutant ce script. Comme c'est du ressort de apache, j'avoue mon incompétance et te laisse fouiller le sujet.

Quote:
echo "Creation du User '$1'"
Là, j'avoue que je ne sais pas très bien ce que tu veux faire. Si c'est afficher
Code:
Creation du User $1
C'est OK. Si par contre tu voulais le nom du user à la place de "$1" elors, c'est plutot
Code:
echo "Creation du User ${NomUser}"

Quote:
maildirmake /home/$1/.maildir
echo "attribution des droits aux dossiers user"
chown -R $1 /home/$1/.maildir
echo "creation de son dossier Web"
mkdir /home/$1/public_html
chown -R $1 /home/$1/public_html

Tout ça devrait être fait dans le dossier /etc/skel une fois pour toute. ça t'éviterai de t'embêter à le faire pour chaque user. De plus, tu n'aurais plus de problème de droit.
Quote:
cd /var/www/localhost/htdocs
ln -sf /home/$1/public_html $1

Oui, certes mais toujours avec le même problème. Que fais tu s'il y a des espaces ou des caractères ésotérique dans ton $1 (genre \t ou \n)? Il vaut mieux
Code:
ln -sf /home/"${NomUser}"/public_html "${NomUser}"

Quote:
/etc/init.d/apache2 reload
ça, je ne sais pas si c'est possible: Apache qui lance un script qui le kill ?

Avec tout ça, tu as de beaux jours de boulot devant toi. Tiens nous au courant.

--
Renaud
Back to top
View user's profile Send private message
geforce
l33t
l33t


Joined: 29 Dec 2003
Posts: 654
Location: Canada

PostPosted: Wed Dec 15, 2004 2:56 am    Post subject: Reply with quote

merci pour votre aide!

J'avais jamais entendu parler de skel, merci du tuyau!

Je suis vraiment noob en programmation (j'ai improviser pour faire ce script car j'en ai absolument besoin pour vendredi..)..

voici mon script maintenant (beaucoup plus leger :P)

Code:

#! /bin/bash

# ############################## #
# Written by Philippe Desmarais  #
# 2004-2005                      #
# ############################## #

username="${1}"
password="${2}"
virtualhost="${3}"

useradd "${username}" -m -G users -d /home/"${username}" -s /bin/false
echo "${password}" | passwd "${username}" --stdin
cd /var/www/localhost/htdocs
ln -sf /home/"${username}"/public_html "${username}"
chmod g+x /home/"${username}"/public_html
if [ "${virtualhost}" = "+virtual" ]; then
echo "" >> /etc/apache2/conf/vhosts/vhosts.conf
echo "<VirtualHost *:80>
    ServerName ${username}.geforce.no-ip.org
    ServerPath /${username}
    DocumentRoot /var/www/localhost/htdocs/${username}
    ServerAdmin ${username}@geforce.no-ip.org
</VirtualHost>" >> /etc/apache2/conf/vhosts/vhosts.conf
cd ~
/etc/init.d/apache2 reload
echo "${username} cree le $(date)" >> stat.txt
exit
else
echo "${username} cree le $(date)" >> stat.txt
exit
fi


Le seul bloc "d'information" que j'ai du garder est pour le Virtualhost...

J'aimerais seulement savoir si ce code a maintenant plus de bon sens ?

merci a l'avance !



Phil
_________________
http://tilde.club/~geforce/
Back to top
View user's profile Send private message
rg421
Apprentice
Apprentice


Joined: 07 Dec 2004
Posts: 192
Location: Strasbourg

PostPosted: Wed Dec 15, 2004 9:38 am    Post subject: Reply with quote

Ce script ne me plait toujours pas (mais c'est bien sûr un avis personnel).
La raison est simple et je vois parfaitement ton idée. En supposant qu'il s'appelle script.sh, tu voudrais exécuter
Code:
script.sh toto titi tutu
pour ajouter un user toto avec un mot de passe titi sur un virtual host tutu. C'est un peu simplissime comme exemple. Que se passe t-il si tu as un user "Toto Dupont" avec un password ">/etc/fstab 2>&1" sur un virtual host "localhost" ? ça donne
Code:
script.sh Toto Dupont >/etc/fstab 2>&1 localhost
ce qui ne fera pas ce que tu veux. D'une part, tes sorties sont redirigées dans fstab. Deuxièmement, tu vas te trouver avec un user Toto et un mot de passe Dupont, ce qui n'et pas ce qui est voulu. On pourrait éventuellement écrire ça
Code:
script.sh "Toto Dupont" ">/etc/fstab 2>&1" "localhost"
pour que la variable username soit correct mais ceci me semble encore plus judicieux:
Code:
script.sh 'Toto Dupont' '>/etc/fstab 2>&1' 'localhost'
Là, le passage de paramètre au script sera correct. A toi de vérifier ensuite ce que tu fais avec tes variables (Attention au redirections et expansions shell non désirées !).
Quote:
/etc/init.d/apache2 reload
Je suis toujours aussi indécis sur cette commande. Soit le script php exécute le process shell dans un process fils, et dans ce cas, le reste du script ne s'exécutera pas (le fils est tué en même temps que le père), soit le script php fait un fork, le shell est lancé comme un process n'héritant pas du père et cette commande n'aura pas d'effet de bord. Pour le savoir, je te conseil de faire un script php lançant un shell avec quelque chose de comme ça dedans:
Code:
#!/bin/bash
sudo /etc/init.d/apache2 reload            # seul un su peut faire ça non ?
sleep 10                                               # délai de 10sec pour attendre que apache soit bien killer
echo toto >/tmp/fichieralacon              # on crée un fichier quelconque

Si le fichier /tmp/fichieralacon existe après exécution du script, le php fork, et ta commande marchera, sinon, il lance un fils, et ta commande ne marche pas.

--
Renaud
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum