Bonjour,
je m'appelle Frak et vous salue humblement, membres de ce forum.
Je suis prof d'informatique en BTS et je suis donc nouveau membre et fortement intéressé par la parti automatisation des systèmes Linux, n'ayant pas une grande expérience dans l'univers UNIX mais souhaitant m'ouvrir a ce monde, et aussi beaucoup d'imagination, je butte sur un problème depuis plusieurs semaines...
Voilà, je cherche à faire fonctionner, comme support de cours d'un projet de 3 mois, sur un système Ubuntu un script permettant l'automatisation de la création de "comptes d'utilisateurs":
ce que j'entends pas "comptes d'utilisateurs" c'est :
-la création d'un utilisateur avec quota, et a l'intérieur de son home la création des répertoires web du comptes = un répertoire CGI, un WWW, un stat, un logs
-la création d'un vhost sous apache2 qui pointe vers le compte créer juste avant
-la redirection de ses logs access et error dans des fichiers situés a la racine du répertoire www du compte (dossier logs)
-la permission de l'accès de cet utilisateur a un shell SSH lui permettant de circuler et d'administrer librement son home (mettre les bons droits) mais autre part (CHROOT ?)
-créer une base de données mysql avec un user du même nom que le compte, avec génération auto de mot de passe
-création d'un compte mail
-création d'un hosts dans bind
-éventuellement compte FTP
-acces pypmyadmin indépendant des autres
-rapport automatique avec compte rendu des actions réalisées réussies ou échoués
En fait, le but est de faire en sorte que n'importe qui puisse facilement via un accès sécurisé, créer un compte, en l'occurrence ici les élèves, qui doivent -eux- juste développer le site web hébergé !
Les pistes que j'ai suivi, evidemment plublic_html mais aussi mod-vhs sur apache 2 permettant des automatismes.
Puis je suis tombé sur des scripts, dont je vous donne un exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
|
#!/bin/bash
#########################################################################################
## Script repris de http://www.tatane.com/index.php/script-de-creation-de-comptes-web ##
## modifié pour l'ajout du DNS, mod_vhost_alias, creation de compte vpopmail. ##
## Evolution et modifications à prevoir biensur :) ##
## Nicolas Martinez (at) 01fr.com - Generation-Libre.com ##
## ------------- ##
## Prerequis: ##
## Apache avec mod_vhost_alias + ajout "Include /etc/apache/vhosts" dans httpd.conf ##
## >> (creer biensur le repertoire /et/apache/vhosts) ##
## MySql ##
## Bind9 ##
## >> creer le repertoire /etc/bind/zone/ ##
## Vpopmail installé dans /var/vpopmail ##
## ------------- ##
## Permet de: ##
## >> Creer un compte user avec sa home directory ##
## Site accessible en www (www.domaine.com pointe vers /home/user/www) ##
## Alias illimités (ex: linux.domaine.com pointe vers /home/user/linux) ##
## >> Creation de la zone DNS dans Bind ##
## >> Creation d'une base MySql ##
## >> Creation du domaine virtuel mail avec compte postmaster sous Vpopmail ##
## dans la home du user: /home/user/domains/domaine.com (permet sauvegarde / comtpe) ##
## >> Log par creation dans le fichier /home/creation-user-domaine-jour-mois-annee.log ##
#########################################################################################
# petit nettoyage d'écran
clear
# seul root peux exécuter ce script
if test `id -u` != "0"; then
echo "Vous n'êtes pas root, désolé..."
fi
echo "################################## Creation d'utilisateur"
# récupération des paramètres
echo -n "Entrez le compte à créer : ";
read login;
echo -n "Entrez son mot de passe : ";
read password;
passmysql=$password
echo -n "Entrez le nom de domaine (sans \"www\", par exemple domaine.com) : ";
read domaine;
# vérification
echo "
Domaine : $domaine
Compte : $login
Passwd : $password
" >> /home/creation-$login-$domaine-`date +%d-%m-%Y`.log
echo -n "Est-ce correct ? (o/[n]) "
read ans
if [ _$ans != _o -a _$ans != _O ]
then
echo "Création de compte annulée" >> /home/creation-$login-$domaine-`date +%d-%m-%Y`.log
fi
# création du user (le programme s'arrête par sécurité si le user existe déjà)
/usr/sbin/useradd $login -p `perl -e "print crypt('$password',pwet)"` -g www-data -d /home/$login -m -s /bin/bash
if [ $? -ne 0 ]
then
echo "L'utilisateur $login existe déjà !" >> /home/creation-$login-$domaine-`date +%d-%m-%Y`.log
fi
echo " + Utilisateur \"$login\" créé"
echo "################################## Terminé "
# création des répertoires
/bin/mkdir /home/$login/logs /home/$login/www
echo " + Répertoires créés"
# -- modifications des droits sur les dossiers
chown -R $login /home/$login/
echo " + Droits modifiés"
echo "################################## Creation VirtualHost Apache "
# création du virtual host (inclus dans httpd.conf)
echo "
<VirtualHost *>
ServerName $domaine
DocumentRoot /home/$login/www/
ServerAlias *.$domaine
VirtualDocumentRoot /home/$login/%1
UseCanonicalName off
ErrorLog /home/$login/logs/error.log
CustomLog /home/$login/logs/access.log combined
User $login
Group www-data
ScriptAlias /cgi-bin/ /home/$login/cgi-bin/
<Directory /home/$login/www/>
AllowOverride All
Options -Indexes +ExecCGI
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>
" > /etc/apache/vhosts/$login.conf
echo " + VirtualHost Apache créé"
echo "################################## Terminé "
######################################## DNS
echo -n "Faut-il créer le domaine en local ? (o/[n]) "
read ans
if [ _$ans = _o -o _$ans = _O ]
then
echo "################################## Creation de la zone DNS dans BIND "
echo -n "Entrez l'adresse ip pour le serveur MAIL : ";
read ipmail;
echo -n "Entrez l'adresse ip pour le serveur WWW : ";
read ipwww;
echo '
zone "'$domaine'" {
type master;
file "/etc/bind/'$domaine'.zone";
// allow-transfer {194.206.137.42;};
};
' > /etc/bind/zone/$domaine.conf
echo 'include "/etc/bind/zone/'$domaine'.conf";' >> /etc/bind/named.conf
echo " + Domaine rajouté dans named.conf\n\n"
echo '
$TTL 3D
@ IN SOA ns.'$domaine'. postmaster.'$domaine'. (
'`date +%Y%m%d`'01; serial
3600 ; refresh
3600 ; retry
1209600 ; expire
604800 ; default_ttl
)
@ IN NS ns.'$domaine'.
NS ns2.registrar.com.
@ IN MX 0 mail.'$domaine'.
IN A '$ipwww'
* IN A '$ipwww'
mail IN A '$ipmail'
www IN A '$ipwww'
'$domaine'. IN TXT "v=spf1 a mx a:mail.'$domaine' ~all"
' > /etc/bind/$domaine.zone
echo " + Zone du domaine créée"
else
echo "Choix: Domaine non créé" >> /home/creation-$login-$domaine-`date +%d-%m-%Y`.log
fi
echo "################################## Terminé "
######################################## MySql
echo -n "Faut-il installer une base de donnée mySQL ? (o/[n]) "
read ans
if [ _$ans = _o -o _$ans = _O ]
then
echo "################################## Creation de la base MySql "
echo -n "Entrez le password root mysql :";
read passroot;
# création de la base
/usr/bin/mysqladmin -u root -p$passroot create $login
echo "Base MySQL \"$login\" créée"
# création du compte + db + droits
/usr/bin/mysql -u root --password=$passroot mysql <<END_COMMANDS
GRANT ALL PRIVILEGES ON $login.* TO "$login"@"localhost" IDENTIFIED BY '$passmysql';
FLUSH PRIVILEGES;
END_COMMANDS
# redémarrage de la base
/usr/bin/mysqladmin -u root -p$passroot reload
echo "User MySQL \"$login\" créé"
else
echo "Choix: Base non créée" >> /home/creation-$login-$domaine-`date +%d-%m-%Y`.log
fi
echo "################################## Terminé "
######################################## Vpopmail
echo -n "Faut-il créer un compte mail(vpopmail) ? (o/[n]) "
read ans
if [ _$ans = _o -o _$ans = _O ]
then
echo "################################## Creation du domaine virtuel dans Vpopmail "
echo -n "Entrez le quota pour le compte postmaster en bytes (10 000 000 = 10M) :";
read quotapostmaster;
echo -n "Entrez le password pour le compte postmaster :";
read passpostmaster;
/var/vpopmail/bin/vadddomain -q $quotapostmaster -d /home/$login/ $domaine $passpostmaster
echo "Compte/domaine créé"
# on envoie un petit mail de bienvenue tant qu'à faire
echo "Message de bienvenue pour le compte mail"|mail -s "Votre messagerie" postmaster@$domaine
else
echo "Choix: Compte mail non créé" >> /home/creation-$login-$domaine-`date +%d-%m-%Y`.log
fi
echo "################################## Terminé "
echo "Création du nouvel utilisateur \"$login\" terminée."
/etc/init.d/apache reload
echo "Apache relancé"
/etc/init.d/bind9 reload
echo " + Bind relancé" |
ou bien cet autre script reprenant en partie le précédent :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
|
#!/bin/bash
# récupération des paramètres
echo "Entrez le nom du compte a creer : "
read login;
echo "Entrez son mot de passe : "
read password;
passmysql=$password
echo "Entrez le nom de domaine (sans \"www\", par exemple domaine.com) : "
read domaine;
# vérification
echo
echo "Domaine : $domaine"
echo "Compte : $login"
echo "Passwd : $password"
echo "Est-ce correct ? (o/[n]) "
read ans;
if [ $ans != o -a $ans != O ]
then
echo "Bye !"
fi
# création du user (le programme s'arrête par sécurité si le user existe déja )
/usr/sbin/useradd $login -p `perl -e "print crypt('$password',pwet)"` -g vhosts -d /home/$login -m -s /bin/bash
if [ $? -ne 0 ]
then
echo "L'utilisateur $login existe déjà , opération annulée !"
fi
echo " + Utilisateur \"$login\" cr??\n"
# création des répertoires
/bin/mkdir /home/$login /home/$login/www
echo " + Répertoires créés\n"
# Copie de php5-cgi dans le répertoire cgi-bin de l'utilisateur
/bin/cp -R /usr/lib/cgi-bin/ /home/$login/
echo " + php5-cgi copié\n"
# création du lien symbolique "www" nécessaire a Proftpd
cd /home/$login/
ln -s /usr/share/phpmyadmin/ phpmyadmin
echo " + Lien \"phpmyadmin\" créé\n"
# modifications des droits sur les dossiers
# chown -R $login:vhosts /var/www/$login/
chown -R $login /home/$login/
chmod -R 755 /home/
echo " + Droits modifiés\n"
mkdir /etc/apache2/vhosts
# création du virtual host (inclus dans httpd.conf)
echo "
<VirtualHost *>
ServerAlias $login.sebastien247.homelinux.com
DocumentRoot /home/$login/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/$login/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
" >> /etc/apache/vhosts/$login.conf
echo " + VirtualHost Apache creer\n\n"
# mysql
echo "Faut-il installer une base de donnée mySQL ? (o/[n]) "
read ans;
if [ $ans = o -o $ans = O ]
then
echo "Entrez le password root mysql :"
read passroot;
# création de la base
/usr/bin/mysqladmin -u root -p$passroot create $login
echo "Base MySQL \"$login\" creer\n"
# création du compte + db + droits
/usr/bin/mysql -u root --password=$passroot mysql <<END_COMMANDS
GRANT ALL PRIVILEGES ON $login.* TO "$login"@"localhost" IDENTIFIED BY '$passmysql';
FLUSH PRIVILEGES;
END_COMMANDS
# redémarrage de la base
/usr/bin/mysqladmin -u root -p$passroot reload
echo "User MySQL \"$login\" cr??\n"
else
echo "Tant pis ..."
fi |
Avez vous des pistes à me donner pour gérer ca facilement ? de plus selon vous peut on facilement interfacer ou appeler ce script depuis une page PHP ?
Merci beaucoup
Frak
Partager