Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- version_db="5.1"
- # Vérifie si le script possède les privilèges superutliisateur
- if [ "$UID" -ne 0 ]
- then
- echo "Privilèges superutilisateur requis"
- exit 1
- fi
- paquets_db="libdb$version_db db$version_db-util db$version_db-doc"
- verifie_si_db_est_installe() {
- # Calcule le SHA-256
- hash=`echo "$paquets_db" | sed "s/ /\n/g" | sort | sha256sum | sed \
- "s/ \-$//g"`
- # Compare le résultat avec celui de dpkg
- awk -v paquets_db="$paquets_db" '
- BEGIN {
- split(paquets_db, lignes, " ")
- }
- {
- for (iterateur in lignes) {
- if ($2 == lignes[iterateur]) {
- print $2 | "sort | sha256sum"
- }
- }
- }
- END {
- close("sort | sha256sum")
- }' <(dpkg -l) | awk -v hash=$hash '
- $1 == hash {
- code_de_retour = 1
- }
- END {
- exit code_de_retour - 1
- }'
- }
- verifie_si_db_est_installe || (
- # Installe DB
- apt-get -V install $paquets_db
- verifie_si_db_est_installe || (
- echo "Impossible d'installer $paquets_db"
- exit 1
- )
- )
- librairies="
- /lib/security/pam_userdb.so
- /lib64/security/pam_userdb.so
- /lib/x86_64-linux-gnu/security/pam_userdb.so
- "
- # Vérifie si pam_userdb.so existe
- for librairie in $librairies
- do
- if [ -f $librairie ]
- then
- pam_userdb_so=$librairie
- break
- fi
- done
- # Vérifie si pam_userdb_so est vide
- if [ -z $pam_userdb_so ]
- then
- echo "pam_userdb.so introuvable"
- exit 1
- fi
- dossier_vsftpd="/etc/vsftpd/"
- # Crée le fichier PAM
- echo "auth required $pam_userdb_so db=${dossier_vsftpd}login" > \
- /etc/pam.d/vsftpd || (
- echo "Impossible de créer /etc/pam.d/vsftpd"
- exit 1
- )
- echo "account required $pam_userdb_so db=${dossier_vsftpd}login" >> \
- /etc/pam.d/vsftpd
- fichier_login="login.txt"
- extension_sauvegarde=".bak"
- # Vérifie si le fichier login existe
- if [ -f $dossier_vsftpd$fichier_login ]
- then
- # Sauvegarde le fichier login
- cp -v $dossier_vsftpd$fichier_login \
- $dossier_vsftpd$fichier_login$extension_sauvegarde || (
- exit 1
- )
- else
- # Crée le fichier login
- touch $dossier_vsftpd$fichier_login || (
- echo "Impossible de créer $fichier_login"
- exit 1
- )
- fi
- # Demande le nom d'utilisateur
- read -p "Nom d'utilisateur : " nom_d_utilisateur
- # Vérifie si le nom d'utilisateur est vide
- if [ -z $nom_d_utilisateur ]
- then
- echo "Nom d'utilisateur vide"
- exit 1
- fi
- # Vérifie si l'utilisateur existe
- if [[ ! -z `grep "^$nom_d_utilisateur$" $dossier_vsftpd$fichier_login` ]]
- then
- echo "$nom_d_utilisateur existe déjà"
- exit 1
- fi
- # Ajoute l'utilisateur
- echo "$nom_d_utilisateur" >> $dossier_vsftpd$fichier_login
- # Taille du mot de passe
- taille_mot_de_passe=8
- # Génère un mot de passe aléatoire
- mot_de_passe=`strings /dev/urandom | grep -o '[[:alnum:]]' | head -n \
- $taille_mot_de_passe | tr -d '\n'`
- # Ajoute le mot de passe
- echo $mot_de_passe >> $dossier_vsftpd$fichier_login
- # Vérifie si login.db existe
- if [ -f ${dossier_vsftpd}login.db ]
- then
- # Sauvegarde login.db
- cp -v ${dossier_vsftpd}login.db \
- ${dossier_vsftpd}login.db$extension_sauvegarde || (
- exit 1
- )
- # Supprime login.db
- rm -v ${dossier_vsftpd}login.db || (
- exit 1
- )
- fi
- # Converti le fichier login au format DB
- db${version_db}_load -T -t hash -f $dossier_vsftpd$fichier_login \
- ${dossier_vsftpd}login.db || (
- # Vérifie si la sauvegarde de login.db existe
- if [ -f ${dossier_vsftpd}login.db$extension_sauvegarde ]
- then
- # Restaure login.db
- cp -v ${dossier_vsftpd}login.db$extension_sauvegarde \
- ${dossier_vsftpd}login.db || (
- exit 1
- )
- fi
- echo "Impossible de créer login.db"
- exit 1
- )
- # Restreint l'accès aux fichiers login
- chmod -v 600 ${dossier_vsftpd}login.* || (
- exit 1
- )
- # Vérifie si le dossier vsftpd_user_conf existe
- if [ ! -d ${dossier_vsftpd}vsftpd_user_conf ]
- then
- # Crée le dossier vsftpd_user_conf
- mkdir -vp ${dossier_vsftpd}vsftpd_user_conf || (
- exit 1
- )
- fi
- # Vérifie si le dossier FTP existe
- if [ ! -d /home/ftp/$nom_d_utilisateur ]
- then
- # Crée le dossier FTP
- mkdir -vp /home/ftp/$nom_d_utilisateur || (
- exit 1
- )
- fi
- # Restreint les droits au dossier FTP
- chmod -v 770 /home/ftp/$nom_d_utilisateur || (
- exit 1
- )
- # Change le propriétaire du dossier FTP
- chown -v ftp:nogroup /home/ftp/$nom_d_utilisateur || (
- exit 1
- )
- # Crée le fichier de configuration
- echo "local_root=/home/ftp/$nom_d_utilisateur" > \
- ${dossier_vsftpd}vsftpd_user_conf/$nom_d_utilisateur || (
- echo \
- "Impossible de créer ${dossier_vsftpd}vsftpd_user_conf/$nom_d_utilisateur"
- exit 1
- )
- lignes="
- anon_world_readable_only=NO
- write_enable=YES
- anon_upload_enable=YES
- anon_mkdir_write_enable=YES
- anon_other_write_enable=YES
- virtual_use_local_privs=YES
- local_umask=022
- anon_umask=022
- "
- # Ecrit les lignes
- for ligne in $lignes
- do
- echo $ligne >> ${dossier_vsftpd}vsftpd_user_conf/$nom_d_utilisateur
- done
- # Affiche les identifiants
- echo "$nom_d_utilisateur a été créé avec le mot de passe $mot_de_passe"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement