Script logon bat

Venez ici partager vos astuces et aides autour de Samba4
Avatar de l’utilisateur
MaxDagoba
Messages : 5
Inscription : 08 sept. 2016 - 10:57

08 sept. 2016 - 12:27

Bonjour à toutes et à tous,

Je viens chercher votre aide pour un soucis sur un script de logon.
J'ai reglé mon samba pour que les utilisateurs utilise à la connexion un script à leur nom en bat (%u.bat) qui est généré à la volé par un autre script pour monter les lecteurs réseaux en fonction des groupes.

Petit bémol le script se lance bien au démarrage mais on dirait qu'il m’exécute certaines lignes plusieurs fois et j'en trouve pas la raison.
Explication:
J'ai mon script de logon généré qui est :

Code : Tout sélectionner

@echo off
net use /persistent:no * \\ubuntu\test
net use /persistent:no * \\ubuntu\secdir
J'ai testé de faire un script vbs il me monte en double qu'un seul lecteur sur deux mais j'ai toujours un lecteur en double.

Si je lance le script à la main depuis le réseau pas de soucis.
Quand la session s'ouvre le script s’exécute mais va me monter 2 fois chaque lecteurs comme s'il lisait 2 fois lignes (le perso est monté par samba avant).chaqueImage

Autres remarque si j'édite le fichier user.bat sous windows et que j'ouvre la session avec se fichier modifié par windows sa fonctionne.

J'utilise unix2dos pour convertir les sauts de lignes au format windows. J'ai essayé avec sed et awk avec le même résultat.

Quelqu'un a t'il une piste?
Je suis un peu désespéré la :/
Avatar de l’utilisateur
sfonteneau
Expert WAPT
Messages : 1783
Inscription : 10 juil. 2014 - 23:52
Contact :

08 sept. 2016 - 21:18

Comment exécute tu le script ?

GPO ?

Avec un script d'ouverture de session (lier a l'utilisateur) sur la fiche utilisateur?

Dans quelle partage fait tu le preexec ?
(pour monter les lecteurs réseaux en fonction des groupes.)
Tu sais que tu peux le faire dans les GPO ? Tu créer la gpo et ensuite tu sélectionne des condition et tu sélectionne le groupe
Avatar de l’utilisateur
MaxDagoba
Messages : 5
Inscription : 08 sept. 2016 - 10:57

11 sept. 2016 - 14:16

Hello,

Mon script est éxécuté par samba avec la config dans le smb.conf

Code : Tout sélectionner

root preexec = bash /opt/scripts/samba/test.sh %U
qui génère le user.bat et après

Code : Tout sélectionner

logon script = %U.bat
et les utilisateur sont crée avec l'option

Code : Tout sélectionner

--script-path="user.bat"
Le script user.bat est dans le dossier de logon

Code : Tout sélectionner

[netlogon]
   path = /var/lib/samba/sysvol/labosol.lan/scripts
avec les droits pour l'utilisateur qui va utiliser le script.

Je met une copie du script:

Code : Tout sélectionner

#!/bin/bash

declare -a testgroup
declare -a tabgroup
declare -a testgroup
declare -a tabgroupexcl
declare -a tabgroupresult
declare -a listusersgroup

#on récupère le hostname
host=${host:=$(uname -n)}
#on enleve le nom de domaine
machine=$(echo "$host" | cut -d'.' -f1 )

# group system à exclure de la liste des groups pour les users
tabgroupexcl=( "cert publishers" "ras and ias servers" "allowed rodc password replication group" "denied rodc password replication group" "dnsadmins" "enterprise read-only domain controllers" "domain admins" "domain users" "domain guests" "domain computers" "domain controllers" "schema admins" "enterprise admins" "group policy creator owners" "read-only domain controllers" "dnsupdateproxy" )

echo "@echo off">/var/lib/samba/sysvol/nom_de_domaine/scripts/"$1".bat

# liste des groupes samba
testgroup=$(wbinfo -g)

# mise en forme de la liste des groupes samba
testgroup=$(echo "$testgroup" | sed -e 's/[a-zA-Z].*\\//')
oldifs=$IFS
igroup=0
while IFS=$'\n' read -a array
do
   tabgroup=( "${tabgroup[@]}" "$array" )
   igroup=$((igroup+1))
done <<< "$testgroup"
IFS=$oldifs

# recherche dans les groupes si l'utilisateur est présent
# si présent on monte le lecteur correspondant au groupe
a=0
for i in "${tabgroup[@]}"
do
   tabgroup[$a]=$(echo "${tabgroup[$a]}" | tr ' ' '_' )
   tabgroupexcl[$a]=$(echo "${tabgroupexcl[$a]}" | tr ' ' '_' )
   
   if test "${tabgroup[$a]}" != "${tabgroupexcl[$a]}"
   then
      tabgroupresult[$a]=$( echo "${tabgroup[$a]}")
      listusersgroup[$a]=$(samba-tool group listmembers "${tabgroup[$a]}")
      if test "${listusersgroup[$a]}" = "$1"
      then
         echo "net use /persistent:no * \\\\$machine\\${tabgroup[$a]}" >>/var/lib/samba/sysvol/nom_de_domaine/scripts/"$1".bat
      fi
   fi
   tabgroup[$a]=$(echo "${tabgroup[$a]}" | tr '_' ' ' )
   tabgroupexcl[$a]=$(echo "${tabgroupexcl[$a]}" | tr '_' ' ' )
   a=$((a+1))
done

# récupération uid user
struid=$(wbinfo -i "$1")
uid=$(echo "$struid" | cut -d ":" -f 3)

#conversion format dos
unix2dos /var/lib/samba/sysvol/nom_de_domaine/scripts/"$1".bat

# droits sur le fichiers pour l'utilisateur
chown "$uid":users /var/lib/samba/sysvol/nom_de_domaine/scripts/"$1".bat
chmod +x /var/lib/samba/sysvol/nom_de_domaine/scripts/"$1".bat

exit 0
J'aurais pu faire pas gpo mais sa me demande d'avoir un poste dans le domaine avec les outils RSAT pour aller créer une gpo (ou peu être possible maintenant avec samba4 mais je ne sais pas comment ^^).

Actuellement je gère mes users et groupes avec des scripts qui utilisent samba-tool donc je peu géré à distance et sur le serveur.
J'ai pour projet plus tard de faire une interface web simplifié pour gérer tout sa avec les scripts.
Avatar de l’utilisateur
MaxDagoba
Messages : 5
Inscription : 08 sept. 2016 - 10:57

12 sept. 2016 - 12:43

Bon après quelques test supplémentaires sa viendrais de mon windows 10 (version 14393.105).
J'ai testé sur un windows 8.11 sa fonctionne sans soucis, pas de lecteurs en double.
Il faudra que je teste avec un windows 10 sans mise à jour voir si sa vient du système ou d'une mise à jour.
Avatar de l’utilisateur
sfonteneau
Expert WAPT
Messages : 1783
Inscription : 10 juil. 2014 - 23:52
Contact :

13 sept. 2016 - 19:52

Dans la catégorie "solution à la con" :D

Tu peux fixer la lettre du lecteur dans ton script.

Si par exemple Z:\ est déjà pris, alors il ne va pas recréer un deuxième lecteur.

Pas propre comme solution mais bon ça fonctionne.
Avatar de l’utilisateur
MaxDagoba
Messages : 5
Inscription : 08 sept. 2016 - 10:57

13 sept. 2016 - 20:02

Oui je sais mais c'est pas l'objectif pour l'instant.

Une fois que j'aurais fait une interface web pour gérer tout sa je ferais un module pour assigner une lettre à un lecteur.

Pour l'instant mon script est un peu sommaire ^^
Avatar de l’utilisateur
sfonteneau
Expert WAPT
Messages : 1783
Inscription : 10 juil. 2014 - 23:52
Contact :

13 sept. 2016 - 22:36

Autre chose :

Ça fait pas doublon les deux justement ?

Code : Tout sélectionner

logon script = %U.bat
et

Code : Tout sélectionner

--script-path="user.bat"
Simon
Avatar de l’utilisateur
MaxDagoba
Messages : 5
Inscription : 08 sept. 2016 - 10:57

13 sept. 2016 - 23:26

Si.
Mais j'ai l'impression que
logon script = %U.bat
Est pris en compte en second ou pas du tout.
Faudra que je teste sa de plus près aussi ^^
claricia68
Messages : 1
Inscription : 13 mars 2018 - 08:51

13 mars 2018 - 08:52

MaxDagoba a écrit : 12 sept. 2016 - 12:43 Bon après quelques test supplémentaires sa viendrais de mon windows 10 (version 14393.105).
J'ai testé sur un windows 8.11 sa fonctionne sans soucis pas de lecteurs en double.
Il faudra que je teste avec un windows 10 sans mise à jour voir si sa vient du système ou d'une mise à jour.
Mais la grande question, c'est si on utilise un logiciel opensource, est ce qu'on peut toujours l'utiliser. Comme moi sur linux.
Verrouillé