Script logon bat

Vieni qui per condividere i tuoi suggerimenti e trucchi per usare Samba4
Bloccato
Avatar utente
MaxDagoba
Messaggi: 5
Registrazione: 08/09/2016 - 10:57

8 settembre 2016 - 12:27

Ciao a tutti,

Vorrei chiedervi aiuto per un problema con uno script di accesso.
Ho configurato il mio samba in modo che gli utenti utilizzino uno script con il loro nome in formato .bat (%u.bat) al momento dell'accesso, che viene generato al volo da un altro script per montare le unità di rete in base ai gruppi.

Un piccolo problema: lo script si avvia correttamente all'avvio, ma sembra eseguire determinate righe più volte e non riesco a capire il motivo.
Spiegazione:
Ho generato lo script di accesso che è:

Codice: Seleziona tutto

@echo off
net use /persistent:no * \\ubuntu\test
net use /persistent:no * \\ubuntu\secdir
Ho provato a creare uno script vbs, ma monta solo una delle due unità due volte, ma ho ancora un'unità duplicata.

Se eseguo lo script manualmente dalla rete, non ci sono problemi.
All'apertura della sessione, lo script viene eseguito ma monta ogni lettore due volte come se stesse leggendo due righe (l'unità personale viene montata in precedenza da Samba)Immagine

Altre osservazioni se modifico il file utenteEseguo un file .bat in Windows e quando accedo con questo file modificato da Windows, funziona.

Sto usando Unix2DOS per convertire le interruzioni di riga nel formato Windows. Ho provato con sed e awk, ma ho ottenuto lo stesso risultato.

Qualcuno ha qualche dritta?
Sono un po' disperato in questo momento :/
Avatar utente
sfontenau
Esperto WAPT
Messaggi: 2312
Registrato: 10 luglio 2014 - 23:52
Contatto:

8 settembre 2016 - 21:18

Come si esegue lo script?

Oggetto Criteri di gruppo?

Con uno script di accesso (collegato all'utente) sul profilo utente?

In quale condivisione stai eseguendo la preesecuzione?
(per montare le unità di rete in base ai gruppi.)
Sapevi che puoi farlo con i GPO? Crei il GPO, poi selezioni le condizioni e infine selezioni il gruppo
Avatar utente
MaxDagoba
Messaggi: 5
Registrazione: 08/09/2016 - 10:57

11 settembre 2016 - 14:16

Ciao,

Il mio script viene eseguito tramite Samba con la configurazione in smb.conf

Codice: Seleziona tutto

root preexec = bash /opt/scripts/samba/test.sh %U
che genera il file user.bat e quindi

Codice: Seleziona tutto

logon script = %U.bat
e gli utenti vengono creati con l'opzione

Codice: Seleziona tutto

--script-path="user.bat"
Lo script user.bat si trova nella cartella di accesso

Codice: Seleziona tutto

[netlogon]
   path = /var/lib/samba/sysvol/labosol.lan/scripts
con i diritti per l'utente che utilizzerà lo script.

Allego una copia dello script:

Codice: Seleziona tutto

#!/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
Avrei potuto farlo tramite GPO, ma per creare un GPO è necessario avere una posizione sul campo con strumenti RSAT (o forse è possibile ora con Samba4, ma non so come ^^).

Attualmente gestisco i miei utenti e gruppi con script che utilizzano samba-tool, così posso gestirli da remoto e sul server.
Il mio piano è di creare in seguito un'interfaccia web semplificata per gestire tutto questo tramite script.
Avatar utente
MaxDagoba
Messaggi: 5
Registrazione: 08/09/2016 - 10:57

12 settembre 2016 - 12:43

Bene, dopo qualche altro test, sembra che il problema derivi dal mio Windows 10 (versione 14393.105).
L'ho testato su Windows 8.11 e funziona perfettamente, senza unità duplicate.
Dovrò testarlo con un'installazione pulita di Windows 10 (senza aggiornamenti) per capire se il problema risiede nel sistema stesso o è causato da un aggiornamento.
Avatar utente
sfontenau
Esperto WAPT
Messaggi: 2312
Registrato: 10 luglio 2014 - 23:52
Contatto:

13 settembre 2016 - 19:52

Nella categoria delle "soluzioni scadenti", :D

puoi impostare la lettera di unità nel tuo script.

Se, ad esempio, Z:\ è già occupata, non verrà creata una seconda unità.

Non è una soluzione elegante, ma funziona.
Avatar utente
MaxDagoba
Messaggi: 5
Registrazione: 08/09/2016 - 10:57

13 settembre 2016 - 20:02

Sì, lo so, ma non è questo l'obiettivo al momento.

Una volta creata un'interfaccia web per gestire tutto, realizzerò un modulo per assegnare una lettera di unità a un lettore.

Per ora, il mio script è piuttosto basilare.
Avatar utente
sfontenau
Esperto WAPT
Messaggi: 2312
Registrato: 10 luglio 2014 - 23:52
Contatto:

13 settembre 2016 - 22:36

Un'altra cosa:

Non sono forse ridondanti entrambi?

Codice: Seleziona tutto

logon script = %U.bat
E

Codice: Seleziona tutto

--script-path="user.bat"
Simone
Avatar utente
MaxDagoba
Messaggi: 5
Registrazione: 08/09/2016 - 10:57

13 settembre 2016 - 23:26

Se.
Ma ho l'impressione che
script di accesso = %U.bat
Viene preso in considerazione per secondo o per niente.
Dovrò testarlo più attentamente ^^
claricia68
Messaggi: 1
Registrazione: 13 marzo 2018 - 08:51

13 marzo 2018 - 08:52

MaxDagoba ha scritto: 12 settembre 2016 - 12:43 Bene, dopo qualche altro test, sembra che il problema derivi dal mio Windows 10 (versione 14393.105).
L'ho testato su Windows 8.11 e funziona senza problemi, senza unità duplicate.
Dovrò testarlo con un Windows 10 senza aggiornamenti per vedere se si tratta di un problema di sistema o se è causato da un aggiornamento.
Ma la domanda fondamentale è: se usiamo software open source, possiamo ancora usarlo? Come me su Linux.
Bloccato