source: server/bin/setsmbpass

lgromero-new-oglive
Last change on this file was c28eefa, checked in by Natalia Serrano <natalia.serrano@…>, 19 months ago

Log to syslog in a number of shell scripts

  • 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        echolog "Cambiando contraseña en todos los clientes ogLive instalados"
41        if which oglivecli &>/dev/null; then
42            LIST=$(oglivecli list | awk '{print $2}')
43        else
44            LIST="ogclient"
45        fi ;;
46    1)  # Cambios en único ogLive (AVISO: puede crear inconsistencias con otros ogLive).
47        echolog "Cambiando contraseña en un solo ogLive"
48        LIST="$1" ;;
49    *)  # Error de formato.
50        raiseError usage ;;
51esac
52
53# Recuperar eco de consola si se corta el proceso.
54trap "stty echo 2>/dev/null" KILL
55# Buscar todos los clients ogLive instalados.
56for OGLIVE in $LIST; do
57    # Crear clave para usuario de acceso a los recursos.
58    CLIENTINITRD="$TFTPDIR/$OGLIVE/$INITRD"
59    if [ -r "$CLIENTINITRD" ]; then
60        if [ -z "$SAMBAPASS" ]; then
61            # Obtener clave del teclado sin eco en pantalla.
62            stty -echo 2>/dev/null
63            echo -n "Clave del usuario Samba: "
64            read -r SAMBAPASS
65            # Solo se deben aceptar números y letras para la clave de acceso.
66            if [[ "$SAMBAPASS" =~ [^a-zA-Z0-9] ]]; then
67                echo
68                stty echo 2>/dev/null
69                raiseError cancel "La clave solo debe contener caracteres alfanuméricos"
70            fi
71            echo
72            # Obtener confirmación clave sin eco en pantalla.
73            echo -n "Confirmar clave: "
74            read -r SAMBAPASS2
75            echo
76            stty echo 2>/dev/null
77            [ "$SAMBAPASS" != "$SAMBAPASS2" ] && raiseError cancel "Las claves no coinciden"
78        fi
79        # Editar la parte de acceso del cliente:
80        #    descomprimir Initrd, sustituir clave y recomprimir Initrd).
81        echolog "Configurando cliente \"$OGLIVE\" ..."
82        mkdir -p $TMPDIR
83        cd $TMPDIR || ogRaiseError access "Directorio temporal"
84        COMPRESS=$(file -b "$CLIENTINITRD" | awk '{print tolower($1);}')
85        $COMPRESS -dc "$CLIENTINITRD" | cpio -im
86        if [ -f scripts/ogfunctions ]; then
87                sed -i "s/OPTIONS=\(.*\)user=\w*\(.*\)pass=\w*\(.*\)/OPTIONS=\1user=$SAMBAUSER\2pass=$SAMBAPASS\3/" scripts/ogfunctions
88                # TEMPORAL: solución ticket 554, actualizar cliente en caché (ogLive r3257).
89                sed -i "s/busybox reboot/reboot/" scripts/ogfunctions
90                # FIN CÓDIGO TEMPORAL.
91                # Ticket 565, preparar acceso Rsync cliente.
92                echo "$SAMBAPASS" > scripts/passrsync
93                chown root.root scripts/passrsync
94                chmod 400 scripts/passrsync
95                # Generar Initrd del cliente (siempre comprimido con gzip).
96                find . | cpio -H newc -oa | gzip -9c > "$CLIENTINITRD"
97        else
98                echolog "$PROG: Aviso: no se ha modificado la clave del cliente \"$OGLIVE\"."
99        fi
100        rm -fr $TMPDIR
101        # Calcular suma de comprobación.
102        md5sum "$CLIENTINITRD" | cut -f1 -d" " > "$CLIENTINITRD.sum"
103        let CHANGES++
104    else
105        echolog "$PROG: Cliente \"$OGLIVE\" no accesible."
106    fi
107done
108if [[ $CHANGES != 0 ]]; then
109    # Ticket 565, preparar acceso Rsync servidor.
110    [ -e /etc/rsyncd.secrets ] && sed -i -n -e "/^$SAMBAUSER:/!p" -e "$ a$SAMBAUSER:$SAMBAPASS" /etc/rsyncd.secrets || echo "$SAMBAUSER:$SAMBAPASS" > /etc/rsyncd.secrets
111    chown root.root /etc/rsyncd.secrets
112    chmod 600 /etc/rsyncd.secrets
113    # Cambiar clave Samba.
114    echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | smbpasswd -a -s $SAMBAUSER
115else
116    echolog "$PROG: Aviso: no se ha modificado la clave de ningún cliente."
117fi
118
Note: See TracBrowser for help on using the repository browser.