Skript-Anmeldebat

Hier könnt ihr eure Tipps und Tricks zur Verwendung von Samba4 teilen
Gesperrt
Benutzeravatar
MaxDagoba
Nachrichten: 5
Anmeldung: 08.09.2016 - 10:57 Uhr

8. September 2016 - 12:27 Uhr

Hallo zusammen,

Ich benötige Ihre Hilfe bei einem Problem mit einem Anmeldeskript.
Ich habe mein Samba so konfiguriert, dass Benutzer beim Anmelden ein Skript mit ihrem Namen in der Datei .bat (%u.bat) verwenden, das von einem anderen Skript dynamisch generiert wird, um Netzlaufwerke entsprechend den Gruppen einzubinden.

Ein kleines Problem gibt es allerdings: Das Skript startet zwar problemlos, führt aber bestimmte Zeilen scheinbar mehrfach aus, und ich kann mir nicht erklären, warum.
Erläuterung:
Ich habe mein generiertes Anmeldeskript, das wie folgt lautet:

Code: Alle auswählen

@echo off
net use /persistent:no * \\ubuntu\test
net use /persistent:no * \\ubuntu\secdir
Ich habe versucht, ein VBS-Skript zu erstellen, es mountet nur eines der beiden Laufwerke zweimal, aber ich habe immer noch ein doppeltes Laufwerk.

Wenn ich das Skript manuell über das Netzwerk ausführe, treten keine Probleme auf.
Wenn die Sitzung geöffnet wird, wird das Skript ausgeführt, bindet aber jeden Leser zweimal ein, als ob es zwei Zeilen lesen würde (das persönliche Laufwerk wird zuvor von Samba eingebunden)Bild

Weitere Anmerkungen, falls ich die Datei bearbeite BenutzerIch führe eine .bat-Datei unter Windows aus, und wenn ich mich mit dieser von Windows modifizierten Datei anmelde, funktioniert es.

Ich verwende unix2dos, um Zeilenumbrüche in das Windows-Format zu konvertieren. Ich habe es auch mit sed und awk versucht, mit dem gleichen Ergebnis.

Hat irgendjemand irgendwelche Hinweise?
Ich bin gerade etwas verzweifelt :/
Benutzeravatar
Sfonteneau
WAPT-Experte
Nachrichten: 2322
Registriert: 10. Juli 2014 - 23:52 Uhr
Kontakt:

8. September 2016 – 21:18 Uhr

Wie führt man das Skript aus?

GPO?

Mit einem Anmeldeskript (verknüpft mit dem Benutzer) im Benutzerprofil?

In welchem ​​Aktienanteil führen Sie die Vorab-Besprechungen durch?
(Um Netzlaufwerke nach Gruppen einzubinden.)
Wussten Sie, dass das in Gruppenrichtlinienobjekten (GPOs) möglich ist? Sie erstellen das GPO, wählen dann die Bedingungen aus und anschließend die Gruppe
Benutzeravatar
MaxDagoba
Nachrichten: 5
Anmeldung: 08.09.2016 - 10:57 Uhr

11. September 2016 – 14:16 Uhr

Hallo,

Mein Skript wird über Samba mit der Konfiguration in smb.conf ausgeführt

Code: Alle auswählen

root preexec = bash /opt/scripts/samba/test.sh %U
wodurch die Datei user.bat generiert wird und dann

Code: Alle auswählen

logon script = %U.bat
und die Benutzer werden mit der Option erstellt

Code: Alle auswählen

--script-path="user.bat"
Das Skript user.bat befindet sich im Anmeldeordner

Code: Alle auswählen

[netlogon]
   path = /var/lib/samba/sysvol/labosol.lan/scripts
mit den Rechten für den Benutzer, der das Skript verwenden wird.

Ich füge eine Kopie des Skripts bei:

Code: Alle auswählen

#!/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
Ich hätte es über GPO machen können, aber dazu bräuchte ich eine Position im Außendienst mit RSAT-Tools, um ein GPO zu erstellen (oder vielleicht ist es jetzt mit Samba4 möglich, aber ich weiß nicht wie ^^).

Aktuell verwalte ich meine Benutzer und Gruppen mit Skripten, die samba-tool verwenden, sodass ich die Verwaltung sowohl remote als auch auf dem Server durchführen kann.
Mein Plan ist es, später eine vereinfachte Weboberfläche zu erstellen, um all dies mit Skripten zu verwalten.
Benutzeravatar
MaxDagoba
Nachrichten: 5
Anmeldung: 08.09.2016 - 10:57 Uhr

12. September 2016 - 12:43 Uhr

Nach einigen weiteren Tests scheint das Problem an meinem Windows 10 (Version 14393.105) zu liegen.
Unter Windows 8.11 funktioniert es einwandfrei, ohne doppelte Laufwerke.
Ich werde es mit einer Neuinstallation von Windows 10 (ohne Updates) testen, um festzustellen, ob das Problem am System selbst liegt oder durch ein Update verursacht wurde.
Benutzeravatar
Sfonteneau
WAPT-Experte
Nachrichten: 2322
Registriert: 10. Juli 2014 - 23:52 Uhr
Kontakt:

13. September 2016 – 19:52 Uhr

In der Kategorie „unsaubere Lösungen“ :D

können Sie den Laufwerksbuchstaben in Ihrem Skript festlegen.

Wenn beispielsweise Z:\ bereits belegt ist, wird kein zweites Laufwerk erstellt.

Keine elegante Lösung, aber sie funktioniert.
Benutzeravatar
MaxDagoba
Nachrichten: 5
Anmeldung: 08.09.2016 - 10:57 Uhr

13. September 2016 - 20:02 Uhr

Ja, ich weiß, aber das ist im Moment nicht das Ziel.

Sobald ich eine Weboberfläche zur Verwaltung aller Funktionen erstellt habe, werde ich ein Modul entwickeln, um jedem Lesegerät einen Laufwerksbuchstaben zuzuweisen.

Mein Skript ist derzeit noch etwas einfach gehalten.
Benutzeravatar
Sfonteneau
WAPT-Experte
Nachrichten: 2322
Registriert: 10. Juli 2014 - 23:52 Uhr
Kontakt:

13. September 2016 - 22:36 Uhr

Noch etwas:

Sind die beiden nicht überflüssig?

Code: Alle auswählen

logon script = %U.bat
Und

Code: Alle auswählen

--script-path="user.bat"
Simon
Benutzeravatar
MaxDagoba
Nachrichten: 5
Anmeldung: 08.09.2016 - 10:57 Uhr

13. September 2016 – 23:26 Uhr

Wenn.
Aber ich habe den Eindruck, dass
Anmeldeskript = %U.bat
Wird als zweites berücksichtigt oder gar nicht.
Das muss ich auch noch genauer testen. ^^
claricia68
Nachrichten: 1
Anmeldung: 13. März 2018 - 08:51 Uhr

13. März 2018 - 08:52 Uhr

MaxDagoba schrieb: 12. September 2016 - 12:43 Uhr Nach einigen weiteren Tests scheint das Problem an meinem Windows 10 (Version 14393.105) zu liegen.
Unter Windows 8.11 funktioniert es einwandfrei, ohne doppelte Laufwerke.
Ich werde es mit einem Windows 10 ohne Updates testen, um festzustellen, ob es sich um ein Systemproblem oder eine durch ein Update verursachte Störung handelt.
Die entscheidende Frage ist jedoch: Können wir Open-Source-Software auch weiterhin nutzen? So wie ich unter Linux.
Gesperrt