Advertisement
Guest User

vsftpd_add_user

a guest
Feb 24th, 2014
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.00 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. version_db="5.1"
  4.  
  5. # Vérifie si le script possède les privilèges superutliisateur
  6. if [ "$UID" -ne 0 ]
  7.     then
  8.         echo "Privilèges superutilisateur requis"
  9.         exit 1
  10. fi
  11.  
  12. paquets_db="libdb$version_db db$version_db-util db$version_db-doc"
  13.  
  14. verifie_si_db_est_installe() {
  15.     # Calcule le SHA-256
  16.     hash=`echo "$paquets_db" | sed "s/ /\n/g" | sort | sha256sum | sed \
  17.           "s/  \-$//g"`
  18.    
  19.     # Compare le résultat avec celui de dpkg
  20.     awk -v paquets_db="$paquets_db" '
  21.         BEGIN {
  22.             split(paquets_db, lignes, " ")
  23.         }
  24.        
  25.         {
  26.             for (iterateur in lignes) {
  27.                 if ($2 == lignes[iterateur]) {
  28.                     print $2 | "sort | sha256sum"
  29.                 }
  30.             }
  31.         }
  32.        
  33.         END {
  34.             close("sort | sha256sum")
  35.         }' <(dpkg -l) | awk -v hash=$hash '
  36.             $1 == hash {
  37.                 code_de_retour = 1
  38.             }
  39.            
  40.             END {
  41.                 exit code_de_retour - 1
  42.             }'
  43. }
  44.  
  45. verifie_si_db_est_installe || (
  46.     # Installe DB
  47.     apt-get -V install $paquets_db
  48.    
  49.     verifie_si_db_est_installe || (
  50.         echo "Impossible d'installer $paquets_db"
  51.         exit 1
  52.     )
  53. )
  54.  
  55. librairies="
  56. /lib/security/pam_userdb.so
  57. /lib64/security/pam_userdb.so
  58. /lib/x86_64-linux-gnu/security/pam_userdb.so
  59. "
  60.  
  61. # Vérifie si pam_userdb.so existe
  62. for librairie in $librairies
  63.     do
  64.         if [ -f $librairie ]
  65.             then
  66.                 pam_userdb_so=$librairie
  67.                 break
  68.         fi
  69. done
  70.  
  71. # Vérifie si pam_userdb_so est vide
  72. if [ -z $pam_userdb_so ]
  73.     then
  74.         echo "pam_userdb.so introuvable"
  75.         exit 1
  76. fi
  77.  
  78. dossier_vsftpd="/etc/vsftpd/"
  79.  
  80. # Crée le fichier PAM
  81. echo "auth required $pam_userdb_so db=${dossier_vsftpd}login" > \
  82. /etc/pam.d/vsftpd || (
  83.     echo "Impossible de créer /etc/pam.d/vsftpd"
  84.     exit 1
  85. )
  86.  
  87. echo "account required $pam_userdb_so db=${dossier_vsftpd}login" >> \
  88. /etc/pam.d/vsftpd
  89.  
  90. fichier_login="login.txt"
  91. extension_sauvegarde=".bak"
  92.  
  93. # Vérifie si le fichier login existe
  94. if [ -f $dossier_vsftpd$fichier_login ]
  95.     then
  96.         # Sauvegarde le fichier login
  97.         cp -v $dossier_vsftpd$fichier_login \
  98.         $dossier_vsftpd$fichier_login$extension_sauvegarde || (
  99.             exit 1
  100.         )
  101. else
  102.     # Crée le fichier login
  103.     touch $dossier_vsftpd$fichier_login || (
  104.         echo "Impossible de créer $fichier_login"
  105.         exit 1
  106.     )
  107. fi
  108.  
  109. # Demande le nom d'utilisateur
  110. read -p "Nom d'utilisateur : " nom_d_utilisateur
  111.  
  112. # Vérifie si le nom d'utilisateur est vide
  113. if [ -z $nom_d_utilisateur ]
  114.     then
  115.         echo "Nom d'utilisateur vide"
  116.         exit 1
  117. fi
  118.  
  119. # Vérifie si l'utilisateur existe
  120. if [[ ! -z `grep "^$nom_d_utilisateur$" $dossier_vsftpd$fichier_login` ]]
  121.     then
  122.         echo "$nom_d_utilisateur existe déjà"
  123.         exit 1
  124. fi
  125.  
  126. # Ajoute l'utilisateur
  127. echo "$nom_d_utilisateur" >> $dossier_vsftpd$fichier_login
  128.  
  129. # Taille du mot de passe
  130. taille_mot_de_passe=8
  131.  
  132. # Génère un mot de passe aléatoire
  133. mot_de_passe=`strings /dev/urandom | grep -o '[[:alnum:]]' | head -n \
  134.               $taille_mot_de_passe | tr -d '\n'`
  135.  
  136. # Ajoute le mot de passe
  137. echo $mot_de_passe >> $dossier_vsftpd$fichier_login
  138.  
  139. # Vérifie si login.db existe
  140. if [ -f ${dossier_vsftpd}login.db ]
  141.     then
  142.         # Sauvegarde login.db
  143.         cp -v ${dossier_vsftpd}login.db \
  144.               ${dossier_vsftpd}login.db$extension_sauvegarde || (
  145.             exit 1
  146.         )
  147.  
  148.         # Supprime login.db
  149.         rm -v ${dossier_vsftpd}login.db || (
  150.             exit 1
  151.         )
  152. fi
  153.  
  154. # Converti le fichier login au format DB
  155. db${version_db}_load -T -t hash -f $dossier_vsftpd$fichier_login \
  156. ${dossier_vsftpd}login.db || (
  157.     # Vérifie si la sauvegarde de login.db existe
  158.     if [ -f ${dossier_vsftpd}login.db$extension_sauvegarde ]
  159.         then
  160.             # Restaure login.db
  161.             cp -v ${dossier_vsftpd}login.db$extension_sauvegarde \
  162.                   ${dossier_vsftpd}login.db || (
  163.                 exit 1
  164.             )
  165.     fi
  166.    
  167.     echo "Impossible de créer login.db"
  168.     exit 1
  169. )
  170.  
  171. # Restreint l'accès aux fichiers login
  172. chmod -v 600 ${dossier_vsftpd}login.* || (
  173.     exit 1
  174. )
  175.  
  176. # Vérifie si le dossier vsftpd_user_conf existe
  177. if [ ! -d ${dossier_vsftpd}vsftpd_user_conf ]
  178.     then
  179.         # Crée le dossier vsftpd_user_conf
  180.         mkdir -vp ${dossier_vsftpd}vsftpd_user_conf || (
  181.             exit 1
  182.         )
  183. fi
  184.  
  185. # Vérifie si le dossier FTP existe
  186. if [ ! -d /home/ftp/$nom_d_utilisateur ]
  187.     then
  188.         # Crée le dossier FTP
  189.         mkdir -vp /home/ftp/$nom_d_utilisateur || (
  190.             exit 1
  191.         )
  192. fi
  193.  
  194. # Restreint les droits au dossier FTP
  195. chmod -v 770 /home/ftp/$nom_d_utilisateur || (
  196.     exit 1
  197. )
  198.  
  199. # Change le propriétaire du dossier FTP
  200. chown -v ftp:nogroup /home/ftp/$nom_d_utilisateur || (
  201.     exit 1
  202. )
  203.  
  204. # Crée le fichier de configuration
  205. echo "local_root=/home/ftp/$nom_d_utilisateur" > \
  206.      ${dossier_vsftpd}vsftpd_user_conf/$nom_d_utilisateur || (
  207.     echo \
  208.     "Impossible de créer ${dossier_vsftpd}vsftpd_user_conf/$nom_d_utilisateur"
  209.     exit 1
  210. )
  211.  
  212. lignes="
  213. anon_world_readable_only=NO
  214. write_enable=YES
  215. anon_upload_enable=YES
  216. anon_mkdir_write_enable=YES
  217. anon_other_write_enable=YES
  218. virtual_use_local_privs=YES
  219. local_umask=022
  220. anon_umask=022
  221. "
  222.  
  223. # Ecrit les lignes
  224. for ligne in $lignes
  225.     do
  226.         echo $ligne >> ${dossier_vsftpd}vsftpd_user_conf/$nom_d_utilisateur
  227. done
  228.  
  229. # Affiche les identifiants
  230. 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