parent
							
								
									518a00db59
								
							
						
					
					
						commit
						a93a23fd30
					
				|  | @ -0,0 +1,122 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| #/** | ||||
| #         setsmbpass | ||||
| #@file    setsmbpass [ogLive] | ||||
| #@brief   Cambia la contraseña del usuario del cliente para acceder a los servicios Samba. | ||||
| #@warning Se modifica el Initrd del cliente y se cambia la clave en el servidor. | ||||
| #@warning No se modifica el usuario de acceso (usuario "opengnsys"). | ||||
| #@version 1.0.2 - Versión inicial. | ||||
| #@author  Ramón M. Gómez - ETSII Univ. Sevilla | ||||
| #@date    2011-07-28 | ||||
| #@version 1.1.0 - Soporte para varios clientes ogLive. | ||||
| #@author  Ramón M. Gómez - ETSII Univ. Sevilla | ||||
| #@date    2017-06-20 | ||||
| #*/ ## | ||||
| 
 | ||||
| 
 | ||||
| # Variables. | ||||
| PROG=$(basename "$0") | ||||
| PATH=$PATH:$(dirname "$(realpath "$0")") | ||||
| OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} | ||||
| OGCFGFILE=$OPENGNSYS/etc/opengnsys.json | ||||
| SAMBAUSER="opengnsys"				# Usuario por defecto. | ||||
| TFTPDIR=$OPENGNSYS/tftpboot | ||||
| INITRD=oginitrd.img | ||||
| TMPDIR=/tmp/oglive$$ | ||||
| let CHANGES=0 | ||||
| 
 | ||||
| # Control básico de errores. | ||||
| if [ "$USER" != "root" ]; then | ||||
|     echo "$PROG: Error: solo ejecutable por root" >&2 | ||||
|     exit 1 | ||||
| fi | ||||
| case $# in | ||||
|     0)  # Cambios en todos los clientes ogLive instalados. | ||||
|         if which oglivecli &>/dev/null; then | ||||
|             LIST=$(oglivecli list | awk '{print $2}') | ||||
|         else | ||||
|             LIST="ogclient" | ||||
|         fi ;; | ||||
|     1)  # Cambios en único ogLive (AVISO: puede crear inconsistencias con otros ogLive). | ||||
|         LIST="$1" ;; | ||||
|     *)	# Error de formato. | ||||
|         echo "$PROG: Error de ejecución" >&2 | ||||
|         echo "Formato: $PROG ogLive" | ||||
|         exit 1 ;; | ||||
| esac | ||||
| 
 | ||||
| # Recuperar eco de consola si se corta el proceso. | ||||
| trap "stty echo 2>/dev/null" KILL | ||||
| # Buscar todos los clients ogLive instalados. | ||||
| for OGLIVE in $LIST; do | ||||
|     # Crear clave para usuario de acceso a los recursos. | ||||
|     CLIENTINITRD="$TFTPDIR/$OGLIVE/$INITRD" | ||||
|     if [ -r "$CLIENTINITRD" ]; then | ||||
|         if [ -z "$SAMBAPASS" ]; then | ||||
| 	    # Obtener clave del teclado sin eco en pantalla. | ||||
| 	    stty -echo 2>/dev/null | ||||
| 	    echo -n "Clave del usuario Samba: " | ||||
| 	    read -r SAMBAPASS | ||||
| 	    # Solo se deben aceptar números y letras para la clave de acceso. | ||||
| 	    if [[ "$SAMBAPASS" =~ [^a-zA-Z0-9] ]]; then | ||||
| 		echo | ||||
| 		echo "$PROG: Error: la clave solo debe contener caracteres alfanuméricos" >&2 | ||||
| 		stty echo 2>/dev/null | ||||
| 		exit 2 | ||||
| 	    fi | ||||
| 	    echo | ||||
| 	    # Obtener confirmación clave sin eco en pantalla. | ||||
| 	    echo -n "Confirmar clave: " | ||||
| 	    read -r SAMBAPASS2 | ||||
| 	    echo | ||||
| 	    stty echo 2>/dev/null | ||||
| 	    if [ "$SAMBAPASS" != "$SAMBAPASS2" ]; then | ||||
| 		echo "$PROG: Error: las claves no coinciden" >&2 | ||||
| 		exit 2 | ||||
| 	    fi | ||||
| 	fi | ||||
| 	# Editar la parte de acceso del cliente: | ||||
| 	#    descomprimir Initrd, sustituir clave y recomprimir Initrd). | ||||
| 	echo "Configurando cliente \"$OGLIVE\" ..." | ||||
| 	mkdir -p $TMPDIR | ||||
| 	cd $TMPDIR || exit 3 | ||||
| 	gzip -dc "$CLIENTINITRD" | cpio -im | ||||
| 	if [ -f scripts/ogfunctions ]; then | ||||
| 		sed -i "s/OPTIONS=\(.*\)user=\w*\(.*\)pass=\w*\(.*\)/OPTIONS=\1user=$SAMBAUSER\2pass=$SAMBAPASS\3/" scripts/ogfunctions | ||||
| 		# TEMPORAL: solución ticket 554, actualizar cliente en caché (ogLive r3257). | ||||
| 		sed -i "s/busybox reboot/reboot/" scripts/ogfunctions | ||||
| 		# FIN CÓDIGO TEMPORAL. | ||||
| 		# Ticket 565, preparar acceso Rsync cliente. | ||||
| 		echo "$SAMBAPASS" > scripts/passrsync | ||||
| 		# Guardar tokens de seguridad. | ||||
| 		cat << EOT > scripts/client.cfg | ||||
| CLIENTID=$(jq -r .client.id $OGCFGFILE) | ||||
| CLIENTSECRET=$(jq -r .client.secret $OGCFGFILE) | ||||
| EOT | ||||
| 		chown root.root scripts/passrsync scripts/client.cfg | ||||
| 		chmod 400 scripts/passrsync scripts/client.cfg | ||||
| 		# Generar Initrd del cliente. | ||||
| 		find . | cpio -H newc -oa | gzip -9c > "$CLIENTINITRD" | ||||
| 	else | ||||
| 		echo "$PROG: Aviso: no se ha modificado la clave del cliente \"$OGLIVE\"." | ||||
| 	fi | ||||
| 	rm -fr $TMPDIR | ||||
| 	# Calcular suma de comprobación. | ||||
| 	md5sum "$CLIENTINITRD" | cut -f1 -d" " > "$CLIENTINITRD.sum" | ||||
| 	let CHANGES++ | ||||
|     else | ||||
|         echo "$PROG: Cliente \"$OGLIVE\" no accesible." | ||||
|     fi | ||||
| done | ||||
| if [[ $CHANGES != 0 ]]; then | ||||
|     # Ticket 565, preparar acceso Rsync servidor. | ||||
|     echo "$SAMBAUSER:$SAMBAPASS" > /etc/rsyncd.secrets | ||||
|     chown root.root /etc/rsyncd.secrets | ||||
|     chmod 600 /etc/rsyncd.secrets | ||||
|     # Cambiar clave Samba. | ||||
|     echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | smbpasswd -a -s $SAMBAUSER | ||||
| else | ||||
|     echo "$PROG: Aviso: no se ha modificado la clave de ningún cliente." | ||||
| fi | ||||
| 
 | ||||
|  | @ -0,0 +1,65 @@ | |||
| #!/bin/bash | ||||
| #/** | ||||
| #@file    ogfunctions.sh | ||||
| #@brief   Generic functions for OpenGnsys Server and OpenGnsys Repository. | ||||
| #@version 1.1.1 - Initial version | ||||
| #@author  Ramón M. Gómez, ETSII Universidad de Sevilla | ||||
| #@date    2017-10-08 | ||||
| #*/ | ||||
| 
 | ||||
| 
 | ||||
| # Showing an error message. | ||||
| function raiseError() { | ||||
|     case "$1" in | ||||
|         usage) | ||||
|             echo "$PROG: Usage error: Type \"$PROG help\"" >&2 | ||||
|             exit 1 ;; | ||||
|         notfound) | ||||
|             echo "$PROG: Resource not found: $2" >&2 | ||||
|             exit 2 ;; | ||||
|         access) | ||||
|             echo "$PROG: Access error: $2" >&2 | ||||
|             exit 3 ;; | ||||
|         download) | ||||
|             echo "$PROG: Download error: $2" >&2 | ||||
|             exit 4 ;; | ||||
|         *) | ||||
|             echo "$PROG: Unknown error" >&2 | ||||
|             exit 1 ;; | ||||
|     esac | ||||
| } | ||||
| 
 | ||||
| # Showing help message. | ||||
| function help() { | ||||
|     [ -n "$1" ] && DESCRIPTION="$1" || DESCRIPTION=$(grep "^#@brief" "$0" | cut -f2- -d" ") | ||||
|     shift | ||||
|     if [ -n "$1" ]; then | ||||
|          USAGE="$1" | ||||
|          shift | ||||
|     else | ||||
|          USAGE=$(grep "^#@usage" "$0" | cut -f2- -d" ") | ||||
|          [ -n "$USAGE" ] && PARAMS=$(awk '$1=="#@param" {sub($1,""); print "\t",$0}' "$0") | ||||
|     fi | ||||
|     # Showing help. | ||||
|     echo "$PROG: ${DESCRIPTION:-"no description"}" | ||||
|     echo "Usage: ${USAGE:-"no usage info"}" | ||||
|     [ -n "$PARAMS" ] && echo -e "$PARAMS" | ||||
|     if [ -n "$*" ]; then | ||||
|         echo "Examples:" | ||||
|         while (( "$#" )); do | ||||
|             echo -e "\t$1" | ||||
|             shift | ||||
|         done | ||||
|     fi | ||||
|     exit 0 | ||||
| } | ||||
| 
 | ||||
| # Metafunction to check if JSON result exists. | ||||
| JQ=$(which jq 2>/dev/null) || raiseError notfound "Need to install \"jq\"." | ||||
| function jq() { | ||||
|     local OUTPUT | ||||
|     OUTPUT=$($JQ "$@") || return $? | ||||
|     [[ "$OUTPUT" = "null" ]] && return 1 | ||||
|     echo "$OUTPUT" | ||||
| } | ||||
| 
 | ||||
		Loading…
	
		Reference in New Issue