Il vous arrivera - d'avoir une musique dans ma tête ... - sont de rétablir un certain nombre d'utilisateurs Samba après une mise à niveau du serveur ou de migrer d'un serveur à un autre.
J'ai trouvé un vieux script qui fait tout le sale boulot par le chargement d'un fichier texte pour recréer la liste des utilisateurs avec leurs mots de passe.
Son fonctionnement est simple: il est tout simplement quelques lignes de bash qui automatisent l'interaction avec smbpasswd.
Le script se compose d'un premier exécutable qui permet la syntaxe suivante:
multi_smbpasswd.sh -o [add/del] -f [nome del file]
Dans la pratique, pour recréer tous les utilisateurs figurant dans le fichier de configuration Samba utenti.conf:
multi_smbpasswd.sh -o add -f utenti.conf
Pour supprimer tous les utilisateurs figurant dans le fichier de configuration Samba utenti.conf:
multi_smbpasswd.sh -o del -f utenti.conf
Voici le code de multi_smbpasswd.sh:
# / Bin / bash
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # Ce script est ici pour faire d'addition / soustraction utilisateurs # #
# # Pour le fichier smbpasswd easyer etc
# #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
SANS_ARGS = 2
E_ERREUROPTION = 65
opération = 0
# 1 = add
# 2 =
# 0 = erreur.
fillel = 0
# 1 fichier = bon et l'emplacement du fichier.
# 0 = erreur
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # Les paramètres: # #
# #-O [options] = L'opération de préforme.
# # Les options sont
# # Comme suit: # #
# # Add = ajouter des utilisateurs au système # #
# # Del = supprimer des utilisateurs du système.
# #
# #-F [] = FILE_LOCATION Les fichiers que les noms d'utilisateur # #
# # Sont stockées po
# # Doit Fournir
# # L'emplacement de l'compleate # #
# # Fichier.
# #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Protéger outselfs de passer rien au script.
"$#" -eq " $NO_ARGS " ] if
["$
#"-eq "$ SANS_ARGS"]
then # Le script a besoin d'au moins 3 options qui lui sont transmis, sinon l'erreur à ne rien faire.
echo "Usage: $ 0 - [commutateur] [option / FILE_LOCATION]"
exit $ E_ERREUROPTION
fi
o:f: Option tandis getopts o: f: Option
faire
" in case
"$ Option" dans le
o)
# Cochez l'option et remplissez le var opération.
" $OPTARG " == "add" ] if
["$ OPTARG" ==
"ajouter"]
puis
# Nous allons ajouter les utilisateurs.
opération = 1
" $OPTARG " == "del" ] elif
["$ OPTARG" ==
"de"]
puis
# Nous sommes la suppression des utilisateurs.
opération = 2
d'autre
# Erreur sur, les causes qu'ils ne franchissaient pas les bonnes options.
opération = 0
echo "opération INVALIDER option!"
exit $ E_ERREUROPTION
fi
;;
f)
# Cochez l'option pour voir si les exsists dossier et qu'il est le zéro neuvième.
-f " $OPTARG " ] if
[-f
"$ OPTARG"]
puis
-s " $OPTARG " ] if
[-s
"$ OPTARG"]
puis
fichierl = une
" filelocation =
"$ OPTARG"
d'autre
fichierl = 0
echo "Le fichier est de longueur nulle! Vous avez besoin d'une liste d'utilisateurs dans le fichier!"
exit $ E_ERREUROPTION
fi
d'autre
fichierl = 0
echo "Le fichier n'est pas là! vous devez fournir pour l'emplacement de fichier valide!"
exit $ E_ERREUROPTION
fi
;;
*)
briser
;;
esac
fait
$OPTIND - 1 ) ) shift $
(($ OPTIND -
1))
$operation == 1 ] if
[$ opération ==
1]
puis
# Nous ajoutons des utilisateurs.
$ ( cat " $filelocation " ) for i in $
(cat
"$ filelocation")
faire
" $i " | cut -d ':' -f1 ) username = $ (echo
"$ i" |
cut-d
':'-f1)
" $i " | cut -d ':' -f2 ) mot de passe = $ (echo
"$ i" |
cut-d
':'-f2)
# Créer un nouvel utilisateur unix avant smbpasswd
useradd $ username
smb-add-passwd $ username $ password
fait
$operation == 2 ] elif
[$ operation ==
2]
puis
# Nous sommes la suppression des utilisateurs du système.
$ ( cat " $filelocation " ) for i in $
(cat
"$ filelocation")
faire
" $i " | cut -d ':' -f1 ) username = $ (echo
"$ i" |
cut-d
':'-f1)
# Suppression de l'utilisateur smbpasswd unix avant
userdel $ username
$ Smbpasswd-x nom d'utilisateur
fait
fi
exit 0
Il n'est pas tout cependant.
Pourquoi pouvez exécuter le script appelle une procédure externe aussi simple que ce qu'il faut pour saisir les valeurs prises à partir du fichier de configuration dans l'entrée standard de smbpasswd.
Voici le code du script smb-passwd-add:
! # / Usr / bin / expect -
# Wrapper pour faire passwd (1) être non-interactif
# Nom d'utilisateur est passé comme 1er arg, passwd de 2e
# Exécutable uniquement par root
lindex $argv 1 ] définir le mot de passe [lindex $ argv
1]
bin / smbpasswd -a [ lindex $argv 0 ] spawn / usr / bin / smbpasswd-a [LindeX $ argv
0]
s'attendre à "mot de passe:"
envoyer
"$ password \ r"
s'attendre à "mot de passe:"
envoyer
"$ password \ r"
s'attendre eof
Attention! Comme vous l'avez remarqué ce second script est basé sur attendre, ce qui devrait être installé si vous voulez travailler.
Enfin, voici un échantillon utenti.conf:
utente1:wfwiourfhowirf
utente2:eiuewhifuhwef
utente3:dkjfwskfjhwekj
utente4:woeifjwoerifffj
L'original peut être trouvé à:
http://www.programmingforums.org/thread6522.html
J'ai ajouté quelques lignes pour une synchronisation grossière entre les utilisateurs Samba et les utilisateurs d'Unix.
J'espère que vous pouvez aider!