• STATISTIQUES
  • Il y a eu un total de 3 membres et 6382 visiteurs sur le site dans les dernières 24h pour un total de 6 385 personnes!


    Membres: 2 606
    Discussions: 3 580
    Messages: 32 820
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] Net Force
    Javascript: 9, Java Applets: 6, Cryptography: 16, Exploits: 7, Cracking: 14, Programming: 13, Internet: 15, Steganograph...
    Challenges
    [EN] hax.tor
    50 level de challenges mélangés
    Challenges
    [EN] Packet Storm
    Packet Storm est un site qui combine nouvelles de la sécurité informatique, téléchargemen...
    Vulnérabilités
    [FR] NewbieContest
    Nous vous proposons une série de challenges regroupant plusieurs domaines allant de l'exploitation de fail...
    Hacking
    [EN] HackQuest
    Logic: 12, JavaScript: 14, Applet: 6, CrackIt: 13, Crypto: 11, Internet: 3, Exploit: 7, Stegano: 12, Flash: 1, Programmi...
    Challenges
    [FR] Forum-Webmaster
    Une communauté webmaster pour apporter / recevoir de l'aide en création de site internet. Webmaster...
    Webmaster
    [FR] PHP France
    Pour tout savoir sur le PHP, en français. Vous trouverez des tutoriels, des exemples, des astuces, toute la do...
    Hacking

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[Bash] Scripts vsftpd
19-02-2014, 14h51 (Modification du message : 24-02-2014, 10h54 par Ekroz.)
Message : #1
Ekroz Hors ligne
Membre actif
*



Messages : 77
Sujets : 13
Points: 43
Inscription : May 2013
[Bash] Scripts vsftpd
Bonjour à toute la communauté N-PN !
Cela fait un moment que l'on ne me voit plus trop, rassurez-vous je n'ai toujours pas été kidnappé par les Illuminatis.
Je suis actuellement en stage dans une PME et j'ai pour mission de créer un serveur FTP (j'ai choisi vsftpd pour sa sécurité).

J'ai remarqué que la création, la modification et la suppression d'utilisateurs virtuels "à la main" était un travail de longue haleine lorsqu'il s'agit de gérer plusieurs dizaines de comptes.

J'ai donc codé 4 scripts Bash afin d'automatiser :

Je partage donc le code source si jamais vous êtes confronté un jour à ce cas, libre à vous donc de le réutiliser, le modifier et le partager.

N'étant pas un 1337 h4xx0r du Bash, n'hésitez pas à faire des remarques concernant les scripts, me proposer des améliorations, le but premier étant de faire quelque chose de sécurisé, rapide et simple.

Amicalement,
Ekroz.
+1 (5) -1 (0) Répondre
19-02-2014, 15h39
Message : #2
Junky Hors ligne
Snorky Master
*



Messages : 228
Sujets : 35
Points: 203
Inscription : Mar 2013
RE: [Bash] Scripts vsftpd
Bonjour,

Merci du partage. Smile

Sans vouloir aller chercher la p'tit bête, tu devrais imo passer par des variables et éviter de mettre en dur les path des files. Si un jour pour une question ou une autre tu dois changer de rep, tes scripts deviennent pénibles a modifier. Tu peux faire un truc du genre:

Code BASH :

conf_dir="/etc/vsftpd/"
login_file="login.txt"
backup_ext=".bak"

ect....
 


Si un jour, tu changes de repertoire, tu aura besoin de modifier QUE les variables et non tout le programme.

En plus en mettant en place cette dynamique, ca te permet de faire une fonction de check. Plein de fois dans ton code tu vas checker si le backup d'un fichier c'est bien réaliser. Donc a chaque fois tu poses un:

Code BASH :

if [ ! f CONDITION]; then
     blablabla....
fi
 


Dans le premier script tu en as 4 ou 5.. N'oublie pas qu'en dev a partir du moment ou tu fais 2 fois la même chose, il faut faire une fonction. Smile

Donc un truc du genre:

Code BASH :

check() {
if [ ! f $conf_dir$login_file$backup_ext ]; then
        echo "The game"
        exit 1
fi
}
 


Après dans l'ensemble si ca fait le taf j'ai envie de dire GG. Mais regarde un peu plus sur l'optimisation de ton code... Smile

Ah oui dans le 4ème script, mis WTF le if... Il déroule sur 4km le truc... Je l'ai survolé seulement (j'suis au taf pas eu le tps de le lire correctement) mais en revenant sur mon idée précédente de fonction, il y a surement de faire un truc vachement plus propre... Smile

Bon courage.

Junky
Pour la sécurité, sous linux, le principal soucis est l'interface chaise/clavier

+1 (1) -1 (0) Répondre
19-02-2014, 22h33
Message : #3
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [Bash] Scripts vsftpd
salut Ekroz & merci du partage Wink

j'ai lu un peu en diagonale les différents scripts, déjà comme dit Junky vu le nombre de fois où tu check si un fichier existe tu auras tout intérêt à faire une fonction file_exists() ou similaire, d'autre part la quasi totalité des commandes sous linux renvoient également un code de retour dont tu peux tirer parti, par exemple :
Code BASH :
cp source destination && echo "fichier copié OK" || (echo "echec copie fichier"; exit 1)

la commande `cp' retournera un code différent de zéro si elle échoue, les opérateurs `&&' et `||' permettent de chainer des commandes selon la valeur renvoyée, selon le cas ton code pourra gagner en lisibilité et/ou en concision
Code BASH :
# Crée le fichier PAM && Vérifie si le fichier PAM a été créé
echo "auth    required $pam_userdb_so db=/etc/vsftpd/login" >  /etc/pam.d/vsftpd || (echo "/etc/pam.d/vsftpd n'a pas pu être créé"; exit 1)
echo "account required $pam_userdb_so db=/etc/vsftpd/login" >> /etc/pam.d/vsftpd

d'autre part comme dit les commandes sous linux renvoient un code, du coup tes scripts s'ils sont bien faits ne devraient pas déroger à la règle et quand quelque chose foire mettre un `exit 1' au lieu d'un simple `exit' qui par défaut renverra 0 (== tout s'est bien déroulé)

dans ton premier script pour ta fonction qui check pam_userdb.so je te propose la tournure suivante :
Code BASH :
libs="
/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 lib in ${libs}; do
        if [[ -f "${lib}" ]]; then
                pam_userdb_so=${lib}
                break
        fi
done

if [[ -z ${pam_userdb_so} ]]; then
        echo "pam_userdb.so introuvable"
        exit 1
fi


la procédure de check des packages est à mon avis à revoir et à fiabiliser, la façon dont elle est construite est beaucoup trop hasardeuse et c'est pas cohérent avec la rigidité des tests effectués à coté (comme le fait de checker systématiquement qu'un fichier a bien été créé alors qu'on est root par exemple Wink), sans parler du fait que perso je me sens pas très à l'aise avec le fait d'installer de manière automatique des paquets comme ça, c'est une autre histoire
plutot que d'utiliser aptitude pour checker alors que derrière tu installes avec apt-get, je te conseille aussi d'utiliser dpkg, je te propose :
Code BASH :
VERSION_DB="5.1"
liste_packages="libdb${VERSION_DB} db${VERSION_DB}-util db${VERSION_DB}-doc"

function check_packages() {
    verif="165821997030d0d98d372f1930150098" # correspond a md5($liste_packages triée par ordre alpha)
    /usr/bin/awk -vl="${liste_packages}" '
        BEGIN { split(l,t," ") }
        { for (i in t) {
            if ($2 == t[i]) {
                print $2 | "sort | md5sum"
            }
        }}
        END { close("sort | md5sum") }'
<(/usr/bin/dpkg -l) |
    /usr/bin/awk -v h=${verif} '
        $1 == h { r = -1 }
        END { exit r + 1 }'

}

check_packages || ( # on check, si ca echoue...
    echo "apt-get -V install ${liste_packages}" && # ...on installe...
    check_packages || ( # ...et on recheck, et si le check echoue a nouveau...
        echo "DB$VERSION_DB n'a pas pu être installé" && # ...on affiche un bidule...
        exit 1 # ...et on se casse avec un code de retour != 0
    )
)

# sinon ben on continue normalement


enfin, on sent un peu que le script de suppression devait être le dernier et que t'en avais marre (lol); on trouve pas moins de 8 imbrications de IF, ça n'est pas lisible et donc pas raisonnable Wink
donc le propos est simple, plutôt que de tourner les tests comme ceci :
Code :
if condition; then
    traitement_pour_vrai
    if condition2; then
        traitement_pour_vrai2
    else
        traitement_pour_faux2
        exit
else
    traitement_pour_faux
    exit
fi
il suffit de les tourner dans l'autre sens comme celà :
Code :
if not condition; then
    traitement_pour_faux
    exit 1
fi

if not condition2; then
    traitement_pour_faux2
    exit 1
fi

traitement_pour_vrai
traitement_pour_vrai2

le code gagne tout de suite en lisibilité Wink

my 2 cts
+1 (3) -1 (0) Répondre
21-02-2014, 14h20
Message : #4
thxer Hors ligne
:(){ :|:&amp; };:
*



Messages : 382
Sujets : 60
Points: 162
Inscription : Feb 2013
RE: [Bash] Scripts vsftpd
Merci à vous trois .
Thxer.com
Twitter Thxer_

Code BASH :
echo "JkZ Palx" | sed 'y/lPZaJxk/MG3@tEH/'




+1 (0) -1 (0) Répondre
24-02-2014, 10h57
Message : #5
Ekroz Hors ligne
Membre actif
*



Messages : 77
Sujets : 13
Points: 43
Inscription : May 2013
RE: [Bash] Scripts vsftpd
Merci beaucoup pour vos réponses, j'ai pu mettre à jour mes scripts selon vos conseils.
Les liens Pastebin ont été mis à jour et pour ceux qui ont la flemme de remonter en haut du topic, les voici :
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [BASH] Autoban iptables thxer 3 183 13-08-2014, 19h04
Dernier message: thxer
  [BASH] Interface User Friendly saywoot 3 210 28-01-2014, 21h18
Dernier message: saywoot
  [BASH] Connaitre les utilisateurs avec un le nom suivant InFamouZz 8 407 27-01-2014, 15h39
Dernier message: notfound
  [Bash] explorer son /home dans un pipemenu Openbox supersnail 2 199 28-10-2013, 17h08
Dernier message: thxer
  [Bash] programme d'installation InstinctHack 0 90 12-09-2012, 10h08
Dernier message: InstinctHack
  [Php/Bash] Importer une base de donné de plus de 5Mo CyberSee 1 127 29-02-2012, 23h28
Dernier message: InstinctHack

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut