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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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