Script de inicio de sesión bat

Ven aquí para compartir tus consejos y trucos para usar Samba4
Bloqueado
Avatar de usuario
Max Dagoba
Mensajes: 5
Inscripción: 08/09/2016 - 10:57

8 de septiembre de 2016 - 12:27

Hola a todos,

Estoy buscando su ayuda con un problema en un script de inicio de sesión.
Configuré mi samba para que los usuarios usen un script con su nombre en .bat (%u.bat) al iniciar sesión, que es generado sobre la marcha por otro script para montar unidades de red según grupos.

Un pequeño problema: el script se inicia bien al inicio, pero parece ejecutar ciertas líneas varias veces y no puedo entender por qué.
Explicación:
Tengo mi script de inicio de sesión generado que es:

Código: Seleccionar todo

@echo off
net use /persistent:no * \\ubuntu\test
net use /persistent:no * \\ubuntu\secdir
Intenté crear un script vbs, solo monta una de las dos unidades dos veces, pero todavía tengo una unidad duplicada.

Si ejecuto el script manualmente desde la red, no hay problemas.
Cuando se abre la sesión, el script se ejecuta pero monta cada lector dos veces como si estuviera leyendo dos líneas (la unidad personal está montada por Samba de antemano)Imagen

Otras observaciones si edito el archivo usuarioEjecuto un archivo .bat en Windows y cuando inicio sesión con este archivo modificado por Windows, funciona.

Estoy usando Unix2Dos para convertir saltos de línea al formato de Windows. Lo intenté con sed y awk, con el mismo resultado.

¿Alguien tiene alguna pista?
Estoy un poco desesperado ahora mismo :/
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

8 de septiembre de 2016 - 21:18

¿Cómo se ejecuta el script?

¿GPO?

¿Con un script de inicio de sesión (vinculado al usuario) en el perfil de usuario?

¿En qué acción estás haciendo la preejecución?
(para montar unidades de red según grupos)
¿Sabías que se puede hacer eso en las GPO? Creas la GPO, seleccionas las condiciones y luego el grupo
Avatar de usuario
Max Dagoba
Mensajes: 5
Inscripción: 08/09/2016 - 10:57

11 de septiembre de 2016 - 14:16

Hola,

Mi script se ejecuta a través de Samba con la configuración en smb.conf

Código: Seleccionar todo

root preexec = bash /opt/scripts/samba/test.sh %U
que genera el archivo user.bat y luego

Código: Seleccionar todo

logon script = %U.bat
y los usuarios se crean con la opción

Código: Seleccionar todo

--script-path="user.bat"
El script user.bat está en la carpeta de inicio de sesión

Código: Seleccionar todo

[netlogon]
   path = /var/lib/samba/sysvol/labosol.lan/scripts
con los derechos para el usuario que utilizará el script.

Adjunto una copia del guión:

Código: Seleccionar todo

#!/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
Podría haberlo hecho vía GPO, pero requiere que tenga una posición en el campo con herramientas RSAT para crear un GPO (o tal vez sea posible ahora con Samba4, pero no sé cómo ^^).

Actualmente administro mis usuarios y grupos con scripts que usan samba-tool para poder administrar de forma remota y en el servidor.
Mi plan es crear más adelante una interfaz web simplificada para gestionar todo esto con scripts.
Avatar de usuario
Max Dagoba
Mensajes: 5
Inscripción: 08/09/2016 - 10:57

12 de septiembre de 2016 - 12:43

Bueno, después de algunas pruebas más, parece que el problema proviene de mi Windows 10 (versión 14393.105).
Lo probé en Windows 8.11 y funciona perfectamente, sin unidades duplicadas.
Tendré que probarlo con una instalación limpia de Windows 10 (sin actualizaciones) para ver si el problema es del sistema en sí o si lo causó una actualización.
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

13 de septiembre de 2016 - 19:52

En la categoría de "soluciones chapuceras", :D

puedes corregir la letra de la unidad en tu script.

Si, por ejemplo, Z:\ ya está ocupada, no se creará una segunda unidad.

No es una solución elegante, pero funciona.
Avatar de usuario
Max Dagoba
Mensajes: 5
Inscripción: 08/09/2016 - 10:57

13 de septiembre de 2016 - 20:02

Sí, lo sé, pero ese no es el objetivo ahora mismo.

Una vez que haya creado una interfaz web para gestionarlo todo, crearé un módulo para asignar una letra de unidad a un lector.

Por ahora, mi script es bastante básico.
Avatar de usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

13 de septiembre de 2016 - 22:36

Otra cosa:

¿No son ambos redundantes?

Código: Seleccionar todo

logon script = %U.bat
Y

Código: Seleccionar todo

--script-path="user.bat"
Simón
Avatar de usuario
Max Dagoba
Mensajes: 5
Inscripción: 08/09/2016 - 10:57

13 de septiembre de 2016 - 23:26

Si.
Pero tengo la impresión de que
script de inicio de sesión = %U.bat
Se toma en cuenta en segundo lugar o no se tiene en cuenta en absoluto.
Tendré que probarlo más de cerca también ^^
claricia68
Mensajes: 1
Inscripción: 13 de marzo de 2018 - 08:51

13 de marzo de 2018 - 08:52

MaxDagoba escribió: 12 de septiembre de 2016 - 12:43 p. m. Bueno, después de algunas pruebas más, parece que el problema proviene de mi Windows 10 (versión 14393.105).
Lo probé en Windows 8.11 y funciona sin problemas, sin unidades duplicadas.
Tendré que probarlo con un Windows 10 sin actualizaciones para ver si es un problema del sistema o si lo causó una actualización.
Pero la gran pregunta es: si usamos software de código abierto, ¿podemos seguir usándolo? Como yo en Linux.
Bloqueado