source: server/bin/setsmbpass

qndtest
Last change on this file was a5d9191, checked in by Irina Gómez <irinagomez@…>, 2 years ago

#1066 #997: Support for Initrd compressed in several formats.

Adding compatibility with Ubuntu 20.04 Initrd, which is compressed in LZ4 format.
(cherry-pick 0e3e167).

  • Property mode set to 100755
File size: 4.2 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    # Ticket 565, preparar acceso Rsync servidor.
108    [ -e /etc/rsyncd.secrets ] && sed -i -n -e "/^$SAMBAUSER:/!p" -e "$ a$SAMBAUSER:$SAMBAPASS" /etc/rsyncd.secrets || echo "$SAMBAUSER:$SAMBAPASS" > /etc/rsyncd.secrets
109    chown root.root /etc/rsyncd.secrets
110    chmod 600 /etc/rsyncd.secrets
111    # Cambiar clave Samba.
112    echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | smbpasswd -a -s $SAMBAUSER
113else
114    echo "$PROG: Aviso: no se ha modificado la clave de ningún cliente."
115fi
116
Note: See TracBrowser for help on using the repository browser.