source: server/bin/setsmbpass @ 9c9de82

Last change on this file since 9c9de82 was fb25c36, checked in by OpenGnSys Support Team <soporte-og@…>, 5 years ago

#1009 Add ogclient.json update to setsmbpass

ogclient.json has samba user and pass because ogVDI needs them to upload
qcow2 images to the repository. setsmbpass sets user and pass and
updates ogLives to match. If a user executes setsmbpass, then
ogclient.json samba info becomes outdated.

Add ogclient.json samba user and pass update to setsmbpass script.

  • Property mode set to 100755
File size: 4.4 KB
Line 
1#!/bin/bash
2
3#/**
4#@file    setsmbpass [ogLive]
5#@brief   Cambia la contraseña de los clientes para acceder a los servicios principales.
6#@usage   setsmbpass [ogLive]
7#@param   ogLive    solo modifica la clave del cliente indicado (puede crear inconsistencias)
8#@warning Se modifica el Initrd del cliente y se cambia la clave en el servidor.
9#@warning No se modifica el usuario de acceso (usuario "opengnsys").
10#@version 1.0.2 - Versión inicial.
11#@author  Ramón M. Gómez - ETSII Univ. Sevilla
12#@date    2011-07-28
13#@version 1.1.0 - Soporte para varios clientes ogLive.
14#@author  Ramón M. Gómez - ETSII Univ. Sevilla
15#@date    2017-06-20
16#@version 1.2.0 - Soporte para varios compresores de Initrd.
17#@author  Ramón M. Gómez - ETSII Univ. Sevilla
18#@date    2020-09-02
19#*/ ##
20
21
22# Variables y funciones globales.
23PROG="$(basename "$0")"
24OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
25PATH=$PATH:$OPENGNSYS/bin
26SAMBAUSER="opengnsys"                           # Usuario por defecto.
27TFTPDIR=$OPENGNSYS/tftpboot
28INITRD=oginitrd.img
29TMPDIR=/tmp/oglive$$
30let CHANGES=0
31
32source $OPENGNSYS/lib/ogfunctions.sh || exit 1
33
34# Control de parámetros.
35[ "$*" == "help" ] && help
36[ "$*" == "version" ] && version
37[ "$USER" != "root" ] && raiseError access "Solo ejecutable por root"
38case $# in
39    0)  # Cambios en todos los clientes ogLive instalados.
40        if which oglivecli &>/dev/null; then
41            LIST=$(oglivecli list | awk '{print $2}')
42        else
43            LIST="ogclient"
44        fi ;;
45    1)  # Cambios en único ogLive (AVISO: puede crear inconsistencias con otros ogLive).
46        LIST="$1" ;;
47    *)  # Error de formato.
48        raiseError usage ;;
49esac
50
51# Recuperar eco de consola si se corta el proceso.
52trap "stty echo 2>/dev/null" KILL
53# Buscar todos los clients ogLive instalados.
54for OGLIVE in $LIST; do
55    # Crear clave para usuario de acceso a los recursos.
56    CLIENTINITRD="$TFTPDIR/$OGLIVE/$INITRD"
57    if [ -r "$CLIENTINITRD" ]; then
58        if [ -z "$SAMBAPASS" ]; then
59            # Obtener clave del teclado sin eco en pantalla.
60            stty -echo 2>/dev/null
61            echo -n "Clave del usuario Samba: "
62            read -r SAMBAPASS
63            # Solo se deben aceptar números y letras para la clave de acceso.
64            if [[ "$SAMBAPASS" =~ [^a-zA-Z0-9] ]]; then
65                echo
66                stty echo 2>/dev/null
67                raiseError cancel "La clave solo debe contener caracteres alfanuméricos"
68            fi
69            echo
70            # Obtener confirmación clave sin eco en pantalla.
71            echo -n "Confirmar clave: "
72            read -r SAMBAPASS2
73            echo
74            stty echo 2>/dev/null
75            [ "$SAMBAPASS" != "$SAMBAPASS2" ] && raiseError cancel "Las claves no coinciden"
76        fi
77        # Editar la parte de acceso del cliente:
78        #    descomprimir Initrd, sustituir clave y recomprimir Initrd).
79        echo "Configurando cliente \"$OGLIVE\" ..."
80        mkdir -p $TMPDIR
81        cd $TMPDIR || ogRaiseError access "Directorio temporal"
82        COMPRESS=$(file -b "$CLIENTINITRD" | awk '{print tolower($1);}')
83        $COMPRESS -dc "$CLIENTINITRD" | cpio -im
84        if [ -f scripts/ogfunctions ]; then
85                sed -i "s/OPTIONS=\(.*\)user=\w*\(.*\)pass=\w*\(.*\)/OPTIONS=\1user=$SAMBAUSER\2pass=$SAMBAPASS\3/" scripts/ogfunctions
86                # TEMPORAL: solución ticket 554, actualizar cliente en caché (ogLive r3257).
87                sed -i "s/busybox reboot/reboot/" scripts/ogfunctions
88                # FIN CÓDIGO TEMPORAL.
89                # Ticket 565, preparar acceso Rsync cliente.
90                echo "$SAMBAPASS" > scripts/passrsync
91                chown root.root scripts/passrsync
92                chmod 400 scripts/passrsync
93                # Generar Initrd del cliente (siempre comprimido con gzip).
94                find . | cpio -H newc -oa | gzip -9c > "$CLIENTINITRD"
95        else
96                echo "$PROG: Aviso: no se ha modificado la clave del cliente \"$OGLIVE\"."
97        fi
98        rm -fr $TMPDIR
99        # Calcular suma de comprobación.
100        md5sum "$CLIENTINITRD" | cut -f1 -d" " > "$CLIENTINITRD.sum"
101        let CHANGES++
102    else
103        echo "$PROG: Cliente \"$OGLIVE\" no accesible."
104    fi
105done
106if [[ $CHANGES != 0 ]]; then
107    jq ".samba.user = \"$SAMBAUSER\" | .samba.pass = \"$SAMBAPASS\"" \
108        "$OPENGNSYS"/client/ogClient/cfg/ogclient.json > /tmp/ogclient.json
109    mv /tmp/ogclient.json "$OPENGNSYS"/client/ogClient/cfg/ogclient.json
110    # Ticket 565, preparar acceso Rsync servidor.
111    [ -e /etc/rsyncd.secrets ] && sed -i -n -e "/^$SAMBAUSER:/!p" -e "$ a$SAMBAUSER:$SAMBAPASS" /etc/rsyncd.secrets || echo "$SAMBAUSER:$SAMBAPASS" > /etc/rsyncd.secrets
112    chown root.root /etc/rsyncd.secrets
113    chmod 600 /etc/rsyncd.secrets
114    # Cambiar clave Samba.
115    echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | smbpasswd -a -s $SAMBAUSER
116else
117    echo "$PROG: Aviso: no se ha modificado la clave de ningún cliente."
118fi
119
Note: See TracBrowser for help on using the repository browser.