source: server/bin/setsmbpass @ 21d51f5

918-git-images-111dmainopengnsys-1.1.1dpreqndtest
Last change on this file since 21d51f5 was ff019d5, checked in by Ramón M. Gómez <ramongomez@…>, 4 years ago

#957: comparedhcpopengnsys script adapted to common functions.

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