View previous topic :: View next topic |
Author |
Message |
geforce l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/gallery/Cars/5.gif)
Joined: 29 Dec 2003 Posts: 654 Location: Canada
|
Posted: Mon Dec 13, 2004 10:37 pm Post subject: [Script PHP &/ou Perl ?] Script inscription systeme! Urg |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
razer l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
Joined: 08 Oct 2004 Posts: 893 Location: Paris - France
|
Posted: Mon Dec 13, 2004 10:53 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
DomiX Apprentice
![Apprentice Apprentice](/images/ranks/rank_rect_2.gif)
![](images/avatars/gallery/Simpsons/Simpsons_-_Otto.jpg)
Joined: 26 Oct 2003 Posts: 209 Location: Paris (FRANCE)
|
Posted: Mon Dec 13, 2004 11:24 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
spider312 Veteran
![Veteran Veteran](/images/ranks/rank_rect_5_vet.gif)
![](images/avatars/85234545644c350f34e5e7.jpg)
Joined: 02 Oct 2004 Posts: 1274 Location: France > Savoie > Chambery
|
Posted: Tue Dec 14, 2004 12:50 am Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
geforce l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/gallery/Cars/5.gif)
Joined: 29 Dec 2003 Posts: 654 Location: Canada
|
Posted: Tue Dec 14, 2004 2:04 am Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
spider312 Veteran
![Veteran Veteran](/images/ranks/rank_rect_5_vet.gif)
![](images/avatars/85234545644c350f34e5e7.jpg)
Joined: 02 Oct 2004 Posts: 1274 Location: France > Savoie > Chambery
|
Posted: Tue Dec 14, 2004 2:14 am Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
geforce l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/gallery/Cars/5.gif)
Joined: 29 Dec 2003 Posts: 654 Location: Canada
|
Posted: Tue Dec 14, 2004 2:24 am Post subject: |
|
|
Page blance
J'y comprend rien je vais recommencer from scratch je crois.. _________________ http://tilde.club/~geforce/ |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
spider312 Veteran
![Veteran Veteran](/images/ranks/rank_rect_5_vet.gif)
![](images/avatars/85234545644c350f34e5e7.jpg)
Joined: 02 Oct 2004 Posts: 1274 Location: France > Savoie > Chambery
|
Posted: Tue Dec 14, 2004 2:35 am Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
geforce l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/gallery/Cars/5.gif)
Joined: 29 Dec 2003 Posts: 654 Location: Canada
|
Posted: Tue Dec 14, 2004 2:39 am Post subject: |
|
|
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
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 |
|
![](templates/gentoo/images/spacer.gif) |
spider312 Veteran
![Veteran Veteran](/images/ranks/rank_rect_5_vet.gif)
![](images/avatars/85234545644c350f34e5e7.jpg)
Joined: 02 Oct 2004 Posts: 1274 Location: France > Savoie > Chambery
|
Posted: Tue Dec 14, 2004 3:53 am Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
rg421 Apprentice
![Apprentice Apprentice](/images/ranks/rank_rect_2.gif)
Joined: 07 Dec 2004 Posts: 192 Location: Strasbourg
|
Posted: Tue Dec 14, 2004 12:32 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
geforce l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/gallery/Cars/5.gif)
Joined: 29 Dec 2003 Posts: 654 Location: Canada
|
Posted: Tue Dec 14, 2004 1:34 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
spider312 Veteran
![Veteran Veteran](/images/ranks/rank_rect_5_vet.gif)
![](images/avatars/85234545644c350f34e5e7.jpg)
Joined: 02 Oct 2004 Posts: 1274 Location: France > Savoie > Chambery
|
Posted: Tue Dec 14, 2004 1:41 pm Post subject: |
|
|
bon et ton script ne te retourne rien quand tu le lances à la main ? |
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
geforce l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/gallery/Cars/5.gif)
Joined: 29 Dec 2003 Posts: 654 Location: Canada
|
Posted: Tue Dec 14, 2004 1:44 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
spider312 Veteran
![Veteran Veteran](/images/ranks/rank_rect_5_vet.gif)
![](images/avatars/85234545644c350f34e5e7.jpg)
Joined: 02 Oct 2004 Posts: 1274 Location: France > Savoie > Chambery
|
Posted: Tue Dec 14, 2004 2:02 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
rg421 Apprentice
![Apprentice Apprentice](/images/ranks/rank_rect_2.gif)
Joined: 07 Dec 2004 Posts: 192 Location: Strasbourg
|
Posted: Tue Dec 14, 2004 2:38 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
geforce l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
![](images/avatars/gallery/Cars/5.gif)
Joined: 29 Dec 2003 Posts: 654 Location: Canada
|
Posted: Wed Dec 15, 2004 2:56 am Post subject: |
|
|
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 )
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 |
|
![](templates/gentoo/images/spacer.gif) |
rg421 Apprentice
![Apprentice Apprentice](/images/ranks/rank_rect_2.gif)
Joined: 07 Dec 2004 Posts: 192 Location: Strasbourg
|
Posted: Wed Dec 15, 2004 9:38 am Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
|