Processus (noobie inside) d'une inscription et installation ?

Processus (noobie inside) d'une inscription et installation ? - Divers - Programmation

Marsh Posté le 07-02-2008 à 01:55:15    

Bonsoir,

 

Je ne sais pas où classer ce post vu que ça parle de PHP, de HTML, de SQL et de BASH.

 

J'ai voulu installer un panel d'hébergement pour mon serveur, pour pouvoir créer des hébergements, et puis mettre des scripts.
J'ai envie de faire mon propre processus. Par exemple pour la création automatique de plusieurs blogs, forums, enfin script de ce genre
.

 


Comment je réfléchis :
1 / Recherche du nom du répertoire en vue de sa création :
- Récupération du nom du compte ($account)
- Création du dossier du compte (mkdir $account)
- Copie des fichiers nécéssaires (cp a b)
2 / Recherche des informations de l'utilisateur en vue de la configuration via sql :
- Récupération des informations ($user, $pwd, $mail, $account)
- Réglage du script d'injection SQL
- Injection SQL
3 / Vérification de l'installation et fin
- Test et réglage (chmod)
- Page de conclusion avec l'$url et les informations utiles
- Envoit d'un mail répicatulatif (plus tard)

 


Je récapitule: je créer le dossier avec le bon nom et le remplit avec les fichiers, je regle la bdd et je peux acceder à l'installation sur par exemple http://ip/$account/

 

Ca va ? Oui je n'y connais pas grand chose.. J'apprend.

  


---------------------------

<p>
Inscription.php
</p>

 

<form action="process.php" method="post">
<p>Utilisateur : <input type="text" name="user" /> </p>
<p>Mot de passe : <input type="text" name="pwd" /> </p>
<p>Email : <input type="text" name="mail" /> </p>
<p>Nom du compte : <input type="text" name="account"/></P

 

<p><input type="submit" value="Valider" /><p/>
</form>


Qui donne :
http://pix.nofrag.com/7/2/6/3a28440a5c6f40dec8effbff7381f.png

 


<p>process.php</>

 

<?

 

$user = $_POST['user'];
$pwd = $_POST['pwd'];
$mail = $_POST['mail'];
$account = $_POST['account'];
?>

 

<p>Utilisateur : <? echo $user; ?></p>
<p>Password : <? echo $pwd; ?></p>
<p>Mail : <? echo $mail; ?></p>
<p>Compte : <? echo $account; ?></p>


Qui donne :
http://pix.nofrag.com/f/4/9/7719f93db79bdf290ab950f988c3a.png

  


 [:tibo2002] voila ce que je pond.
Maintenant le squelette et s'informer pour faire le truc sql.

 

Comment je peux faire pour créer un sous domaine automatiquement et que lighttpd reload automatiquement en incluant le sous domaine dans sa conf ? Avec bind9 ? MyDNS ?

 

XaT


Message édité par XaTriX le 07-02-2008 à 02:03:05
Reply

Marsh Posté le 07-02-2008 à 01:55:15   

Reply

Marsh Posté le 07-02-2008 à 11:43:42    

Tout simplement parfait :jap:
 
Je suis sous lighttpd mais ça va pas être dur :)
 
Pour le user tu te prend le chou, un adduser bien config (-h $username -p $password) en une ligne c'est tiré (il mettra les droits automatiquement etc..)
Je compte pas donner d'acces ftp/ssh, donc un user avec /bin/false.
Comme ca la base (le script genre punbb, d'ailleurs 1.3 béta, le svn quoi...) est identiques et j'ai juste à faire du backup/autoreplication sql (mais alors avec un front end mais bon plus tard aucune utilité la) et des confs lighttpd/ etc/passwrd&group&shadow et zou :)
 
:jap:
 
Enfaite je passe par PHP et par la function EXEC pour éxécuter des trucs, droit www-data requis ?
 
XaT

Reply

Marsh Posté le 07-02-2008 à 15:17:51    

Citation :

1.3 Passer le fichier a mysql pour qu il cree l user et la base de donnees.

Ou bien 1.2 + 1.3 directement en php en se connectant à la base en tant qu'administrateur (ou mieux en tant qu'un utilisateurs qui a quelques droits en moins tels que la réplication qui ne sert à rien pour un simple utilisateur) et en exécutant directement les requêtes sans passer par la création d'un fichier. Ca permet de savoir précisément où ça plante si jamais le serveur refuse une requête pour x raison.
 
A noter qu'un utilisateur autorisé à créer d'autres utilisateurs ou à modifier les droits d'un utilisateur ne peut pas donner des droits qu'il n'a pas lui même. Ca permet de créer facilement des utilisateurs qui ont un profil donnée (il n'y a alors que le droit de création et modification des utilisateurs à enlever pour avoir automatiquement le profil voulut) Il est donc préférable d'avoir un utilisateur dédié à la création des autres utilisateurs quand on maitrise l'environnement et qu'on est sur de vouloir un grand nombre d'utilisateurs qui ont le même profil.
 
----------------
 
Pour ce genre de service, il est fortement déconseillé de créer des utilisateurs au niveau du système d'exploitation. De nombreux utilitaires qu'on trouve classiquement sous unix (comme ftpd) utilisent par défaut cette liste d'utilisateur pour autoriser (couple de pseudo et mot de passe correspondant à l'un de ceux créé) ou refuser les connexions.
A la place, si le serveur le permet (je ne sais pas si litehttp en est capable) on peut utiliser la réécriture d'url (avec apache ça se fait grâce au mod-rewrite) pour appeller l'adresse http://ip/$account/ ou même http://account.domaine.com/ (à condition d'avoir un domaine correspondant à l'adresse IP) et que le serveur comprenne ça comme une demande d'affichage du site "domaine.com" (ou du site correspondant à l'IP) avec la valeur "account" dans une variable php déterminé par la réécriture d'url. Ensuite en php, on sélectionne les bonnes infos de connexion à la base de donnée en fonction de cette valeur là et on peut gérer tout le monde sans avoir à dupliquer tous les fichiers.
 
PS : D'ailleurs, t'as pensé aux mises à jour de ton système? T'as intérêt de bien prévoir le coup pour ne pas être obligé de copier 15 fois ou 30 fois ou 100 fois les fichiers à chaque mise à jour et ne pas écraser non plus les infos de connexion d'un utilisateur par ceux d'un autre.
 
PS2 : Si tu fais un utilisateur de base de donnée par base de donnée, alors n'oublie pas de limiter les droits de l'utilisateur pour qu'il ne puisse utiliser que cette base là. Ca la foutrait mal si tu tapes dans une autre base à cause d'une mise à jour foireuse (il est préférable de se retrouver avec l'affichage d'une erreur que la destruction des données d'un autre utilisateur)


Message édité par omega2 le 07-02-2008 à 15:21:29
Reply

Marsh Posté le 07-02-2008 à 15:31:12    

Merci :jap:

 

Je pense procéder comme ça :

 

1 - Récupération des informations
2 - mkdir && cp dans /home/www/projet/$username
3 - Connection à SQL avec un utilisateur dédié à la création d'user (on peut avoir ce droit sans pouvoir créer un superuser ?) qui crée l'user, la db et injecte le squelette sql avec les vars.
4 - rewrite sous lighttpd (y'a un mod, plus qu'a le comprendre [:dawa]) pour avoir un account.domain.tld (j'ai les ndd pas de problemes, domain.tld en A sur l'IP, www.domain.tld > domain.tld).
Comment je fais pour les DNS ? Je peux faire un *.domain.tld > A > IP ? Tout les sous domaines tombent sur cette IP ? Apres gerer à la volée avec lighttpd.

  


Le problème des mise à jour, ca peut poser un problème ca :/
A la limite une upgrade juste avec les fichiers, ça aucun problème (au pire je matte avec diff/rsync) car pour tout le monde la base sera la même, la data sera dans SQL.
Vous voyez ?

 

Si j'ai une mise à jour : rm -rf * copie avec un script bash en mousse (genre liste d'utilisateurs avec : user,hashmd5,way,etc...) qui éxécute tout d'un coup (mkdir ou juste un cp).
Ca va faire gratter le disque :o

 

XaT

Message cité 1 fois
Message édité par XaTriX le 07-02-2008 à 15:36:17
Reply

Marsh Posté le 07-02-2008 à 15:53:14    

XaTriX a écrit :

Connection à SQL avec un utilisateur dédié à la création d'user (on peut avoir ce droit sans pouvoir créer un superuser ?) qui crée l'user, la db et injecte le squelette sql avec les vars.

Il faudrait que je vérifie chez moi pour te dire s'il est possible de créer un superuser qui ne peut pas créer d'autres superuser. Ca n'a pas l'air d'être indiqué dans la documentation du moins pas dans la partie qui parle de la création des utilisateurs et de la modification de leurs droits.
 

XaTriX a écrit :

Si j'ai une mise à jour : rm -rf * copie avec un script bash en mousse (genre liste d'utilisateurs avec : user,hashmd5,way,etc...) qui éxécute tout d'un coup (mkdir ou juste un cp).
Ca va faire gratter le disque :o
 
XaT

Et si t'as stocké les infos de connexion à la base de donnée dans un fichier alors tout le monde se retrouve avec les même infos (et donc avec le même contenu dans les pages). ;)
Pour le diff, ça me semble être une solution valable tant que tu n'oublies aucune mise à jour et au moins on ne risque pas de casser la configuration des sites si on fait un minimum attention.

Reply

Marsh Posté le 07-02-2008 à 15:59:18    

Ah oui le fichier de config.
Sinon :ange: un config qui va chercher la config dans sql en fonction de $account :ange:
 
Le but :
 
Aucun acces à l'utilisateur (que ça soit en ssh, ftp ou édit php, aucun droit d'écriture) et toutes les données dans SQL. Du coup se pose le probleme des images et ce genre de conneries :/
 
=_=
 
XaT

Reply

Marsh Posté le 08-02-2008 à 00:33:17    

Je vais faire mes tests avec un forum tout con genre punbb, plus simple pour voir si le processus fonctionne. Car bon apres je sais pas si je dois bien regler les scripts et tout, on verra plus tard :o
 
XaT

Reply

Marsh Posté le 09-02-2008 à 15:33:39    

Warning: Division by zero in /home/xa/sys/process.php on line 52  [:rellikdog]

Reply

Marsh Posté le 09-02-2008 à 15:49:05    

C'est corrigé, des fois je tente le freestyle avec les différents signes :o
 
Ca avance. Je vais faire ça comme ça :  
Je prend les infos et crée les scripts à éxécuter (mkdir,cp,inject sql, conf) avec la page d'inscription. Apres je réfléchirais comment les lancer (cron toute les 2mn éxécute un bash qui fait ./*.sh dans un dossier tmp (et qui supprime) ?)
 
XaT

Reply

Marsh Posté le 09-02-2008 à 16:02:06    

Code :
  1. <p>process.php</>
  2. <?
  3. $user = $_POST['user'];
  4. $pwd = $_POST['pwd'];
  5. $mail = $_POST['mail'];
  6. $account = $_POST['account'];
  7. #SQL part 1
  8. $sql = <<< SQL
  9. CREATE USER '$user'@ 'localhost' IDENTIFIED BY '$pwd';
  10. GRANT USAGE ON * . * TO '$user'@ 'localhost' IDENTIFIED BY '$pwd' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
  11. CREATE DATABASE `$user` ;
  12. SQL;
  13. #SQL part 2
  14. # commande a chercher pour vérification
  15. $sql2 = <<< SQL2
  16. mysql -h localhost -u root --password=hfr < $username.database_create.sql
  17. SQL2;
  18. #Creation dossier
  19. $dossier = <<< DOSSIER
  20. mkdir /home/azora/usr/$account
  21. ls /home/azora/usr/ > /home/azora/sys/tmp/account.txt
  22. cat /home/azora/sys/tmp/account.txt | grep $user > test.txt
  23. DOSSIER;
  24. #copie fichiers
  25. # chercher à savoir les droits a donner selon les script, bloquer les conf principales (css, conf sql)
  26. $files = <<<FILES
  27. cp /home/azora/base/script.tar.gz /home/azora/usr/$account/
  28. tar -xzvf /home/azora/usr/$account/script.tar.gz
  29. rm /home/azora/usr/$account/config.php
  30. FILES;
  31. #config
  32. #todo
  33. #fin
  34. # regrouper les scripts dans process/ pour processing (XaT*.sh ?)
  35. ?>
  36. <p>Utilisateur : <? echo $user; ?></p>
  37. <p>Password : <? echo $pwd; ?></p>
  38. <p>Mail : <? echo $mail; ?></p>
  39. <p>Compte : <? echo $account; ?></p>
  40. <p>debug sql : <?
  41. file_put_contents("./tmp/$user.database_create.sql", $sql);
  42. echo $sql; ?></p>
  43. <p>debug injection sql : <?
  44. file_put_contents("./tmp/$user.sql.sh", $sql2);
  45. echo $sql2; ?></p>
  46. <p>debug creation dossier :
  47. <?
  48. file_put_contents("./tmp/$user.mkdir.sh", $dossier);
  49. echo $dossier;
  50. ?></p>
  51. <p>debug copie fichier : <?
  52. file_put_contents("./tmp/$user.cp.sh", $files);
  53. echo $files;
  54. ?></p>
  55. <p>debug configuration  :todo</p>


 
Disponible sur : http://test.azora.fr
 
:o
 
XaT

Reply

Marsh Posté le 09-02-2008 à 16:02:06   

Reply

Marsh Posté le 09-02-2008 à 16:12:03    

Je pense faire une copie de base d'une installation, apres je modifierais les trucs dans le .sql, pour le password je dois généralement le hasher en md5 direct non ?
 
XaT

Reply

Marsh Posté le 09-02-2008 à 17:37:01    

Un peu plus sérieu (enfin..)
 

Code :
  1. <?
  2. # PHP
  3. #
  4. # Author : Clément "XaTriX"
  5. # Email author : xatrixblue@gmail.com
  6. # Creating date : 2008 fev 09
  7. # Update : 2008 fev 09
  8. # Précisions : Débutant :D
  9. #
  10. #Description de la page
  11. echo <<<END
  12. <ul>
  13. <li><strong>Page</strong>> : process.php</li>
  14. <li><strong>Description</strong> : Creation hebergement</li>
  15. </ul>
  16. END;
  17. #Récupération des variables de start.php
  18. $user = $_POST['user'];
  19. $pwd = $_POST['pwd'];
  20. $mail = $_POST['mail'];
  21. $account = $_POST['account'];
  22. #SQL : (1/2) Script de création user/base
  23. $sql = <<< SQL
  24. CREATE USER '$user'@ 'localhost' IDENTIFIED BY '$pwd';
  25. GRANT USAGE ON * . * TO '$user'@ 'localhost' IDENTIFIED BY '$pwd' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
  26. CREATE DATABASE `$user` ;
  27. SQL;
  28. #SQL : (2/2) Injection SQL
  29. # commande a chercher pour vérification
  30. $sql2 = <<< SQL2
  31. mysql -h localhost -u root --password=hfr < .tmp/$user.database.sql
  32. SQL2;
  33. #ACCOUNT : (1/3) Création dossier, vérification du dossier
  34. $dossier = <<< DOSSIER
  35. mkdir /home/azora/usr/$account
  36. ls /home/azora/usr/ > /home/azora/sys/tmp/account.txt
  37. cat /home/azora/sys/tmp/account.txt | grep $user > test.txt
  38. DOSSIER;
  39. #ACCOUNT : (2/3) Copie des fichiers
  40. $files = <<<FILES
  41. cp /home/azora/base/script.tar.gz /home/azora/usr/$account/
  42. tar -xzvf /home/azora/usr/$account/script.tar.gz
  43. rm /home/azora/usr/$account/config.php
  44. FILES;
  45. #ACCOUNT : (3/3) Réglage des droits
  46. # TODO
  47. #CONFIG : Configuration du script (config.php)
  48. $config = <<<CONFIG
  49. $db_type = 'mysqli';
  50. $db_host = 'localhost';
  51. $db_name = '$user';
  52. $db_username = '$user';
  53. $db_password = '$pwd';
  54. $db_prefix = 'forum_';
  55. $p_connect = false;
  56. $base_url = 'http://test.azora.fr/usr/$account';
  57. $cookie_name = 'punbb_cookie_$account';
  58. $cookie_domain = '';
  59. $cookie_path = '/';
  60. $cookie_secure = 0;
  61. define('PUN', 1);
  62. CONFIG;
  63. #EXECUTION
  64. file_put_contents("./tmp/$user.database.sql", $sql);
  65. file_put_contents("./tmp/$user.sql.sh", $sql2);
  66. file_put_contents("./tmp/$user.mkdir.sh", $dossier);
  67. file_put_contents("./tmp/$user.cp.sh", $files);
  68. file_put_contents("./tmp/$user.config.php", $config);
  69. # PASSER LE RELAIS A 3EME PAGE
  70. # TODO
  71. # RECAPUTILATION
  72. echo <<<END
  73. <ul>
  74. <li><strong>Utilisateur</strong> : $user</li>
  75. <li><strong>Password</strong> : $pwd</li>
  76. <li><strong>Mail</strong> : $mail</li>
  77. <li><strong>Compte</strong> : $account</li>
  78. <li><strong>Lien</strong> : http://test.azora.fr/usr/$user</li>
  79. </ul>
  80. END;
  81. # DEBUG ECHO
  82. echo <<<END
  83. <ul>
  84. <li>SQL 1 : $sql</li>
  85. <li>SQL 2 : $sql2</li>
  86. <li>Dossier : $dossier</li>
  87. <li>Fichiers : $files</li>
  88. <li>Config : $config</li>
  89. </ul>
  90. END;
  91. ?>


 
Toujours sur la même URL pour la sortie
http://test.azora.fr/sys/start.php
http://test.azora.fr/sys/tmp/ pour les fichiers en sorties
 
XaT

Reply

Marsh Posté le 09-02-2008 à 23:21:30    

Merci beaucoup :jap:
 
Sympa l'array je capte un peu :)
Sinon ça me fait une erreur :o
Parse error: syntax error, unexpected T_STRING in /home/azora/sys/process.php on line 74
 
Sur cette ligne :
 
$config = '<'.'?'.'php'."\n\n\t".'define('PUN', 1);'."\n\n";
 
Et la hm..

Reply

Marsh Posté le 10-02-2008 à 02:13:29    

Je bloque la dessus  :
 
- Ton code (le dernier post indique) bug sur une chose, et il n'y a pas de ";" à chaque ligne à la sortie.
- Enfaite tout me casse, dans tout les sens, la je vois pas du tout :o J'ai tenté plein de choses ..
 
XaT

Reply

Marsh Posté le 10-02-2008 à 02:35:40    

Merci encore :jap:
 
Sinon la j'ai mieux, un .sql à injecter avec le squelette et l'user/mdp : admin/admin, à changer direct des la création par l'user. Au pire je mettrais une apge obligatoire pour changer le mdp [:cupra]
 
XaT

Reply

Marsh Posté le 10-02-2008 à 03:42:59    

Tout à fait :jap:
 
Non je laisse le squelette se faire, je génere un mdp aléatoire et je le change sur une requete finale :)
 
Le fichier de conf.. j'ai du cul c'est que des define sans variables :p alors même en le processant en php ça passe :p
 
XaT

Reply

Marsh Posté le 10-02-2008 à 03:54:23    

Ok, chef, jamais.

Reply

Marsh Posté le 10-02-2008 à 04:11:26    

Une secrétaire qui fait du PHP, attirant ou pas j'hésite [:cupra]
 
XaT

Reply

Marsh Posté le 10-02-2008 à 12:31:04    

Ouais je m'en sort :)
La ou je vais galerer c'est toute les fonctions de vérifications, pour l'email ca doit pulluler de php sur internet qui dit "obligatoire le @, domain.tld etc.." les autres on verra :o
 
XaT

Reply

Marsh Posté le 21-02-2008 à 10:30:00    

J'ai stoppé en croyant que mon serveur allait tomber (je repaye pas pour mon 4eme serveur :o) et mon hébergeur m'offre  un mois :o
 
 
XaT

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed