refs #503 adds sudo to root commands
parent
a3339efca7
commit
b2696b3783
|
@ -379,9 +379,11 @@ function install() {
|
|||
TMPDIR=/tmp/${OGLIVEFILE%.iso}
|
||||
mkdir -p $OGLIVEDIR $TMPDIR
|
||||
trap "umount $TMPDIR; rm -fr $TMPDIR" 1 2 3 6 9 15
|
||||
mount -o loop,ro $OGLIVEFILE $TMPDIR >/dev/null 2>&1 || { echo "{\"status\": \"error\", \"error\": \"mount failed.\"}"; exit 1; }
|
||||
echo "OGLIVEFILE: $OGLIVEFILE"
|
||||
echo "TMPDIR: $TMPDIR"
|
||||
sudo mount -o loop,ro $OGLIVEFILE $TMPDIR >/dev/null 2>&1 || { echo "{\"status\": \"error\", \"error\": \"mount failed.\"}"; exit 1; }
|
||||
cp -va $TMPDIR/ogclient/* $OGLIVEDIR >/dev/null 2>&1 || { echo "{\"status\": \"error\", \"error\": \"Cannot copy files to ogLive directory.\"}"; exit 1; }
|
||||
umount $TMPDIR >/dev/null 2>&1
|
||||
sudo umount $TMPDIR >/dev/null 2>&1
|
||||
|
||||
if [ ! -f $INFOFILE ]; then
|
||||
rm -f $TFTPDIR/$DEFOGLIVE $TFTPDIR/$OGCLIENT
|
||||
|
@ -390,9 +392,9 @@ function install() {
|
|||
fi
|
||||
|
||||
if [ -n "$SAMBAPASS" ]; then
|
||||
echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | $OPENGNSYS/bin/setsmbpass "$(basename $OGLIVEDIR)" >/dev/null 2>&1 || { echo "{\"status\": \"error\", \"error\": \"setsmbpass failed.\"}"; exit 1; }
|
||||
echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | $OPENGNSYS/bin/setsmbpass "$(basename $OGLIVEDIR)" || { echo "{\"status\": \"error\", \"error\": \"setsmbpass failed with SAMBAPASS.\"}"; exit 1; }
|
||||
else
|
||||
$OPENGNSYS/bin/setsmbpass "$(basename $OGLIVEDIR)" >/dev/null 2>&1 || { echo "{\"status\": \"error\", \"error\": \"setsmbpass failed.\"}"; exit 1; }
|
||||
$OPENGNSYS/bin/setsmbpass "$(basename $OGLIVEDIR)" || { echo "{\"status\": \"error\", \"error\": \"setsmbpass failed no SAMBAPASS.\"}"; exit 1; }
|
||||
fi
|
||||
|
||||
find -L $OGLIVEDIR -type d -exec chmod 755 {} \; >/dev/null 2>&1 || { echo "{\"status\": \"error\", \"error\": \"chmod directories failed.\"}"; exit 1; }
|
||||
|
@ -710,21 +712,22 @@ function check_services_status() {
|
|||
|
||||
echo "$json_output"
|
||||
}
|
||||
|
||||
# Main progrram.
|
||||
# Main program.
|
||||
|
||||
# Access control.
|
||||
[ -r $OPENGNSYS/www/controlacceso.php ] && ACCESS="web"
|
||||
[ "$USER" = "root" ] && ACCESS="root"
|
||||
[ -z "$ACCESS" ] && raiseError access "Need to be root."
|
||||
if [ "$USER" = "root" ] || [ "$USER" = "ogboot" ] || groups $USER | grep -qw "ogboot"; then
|
||||
ACCESS="root"
|
||||
else
|
||||
raiseError access "Need to be root, ogboot or a member of the ogboot group."
|
||||
fi
|
||||
|
||||
# Check dependencies.
|
||||
which sponge &>/dev/null || raiseError notfound "Need to install \"moreutils\"."
|
||||
|
||||
# Commands control.
|
||||
shopt -s extglob
|
||||
case "$ACCESS" in
|
||||
root) CMDS='+(help|version|convert|config|check|list|show|search|download|install|uninstall|get-default|set-default|rebuild|assign|disk_usage|list_installed_oglives|get_info|get_default|set_default|check_services_status)' ;;
|
||||
web) CMDS='+(list|show|search|get-default)' ;;
|
||||
esac
|
||||
CMDS='+(help|version|convert|config|check|list|show|search|download|install|uninstall|get-default|set-default|rebuild|assign|disk_usage|list_installed_oglives|get_info|get_default|set_default|check_services_status)'
|
||||
|
||||
case "$1" in
|
||||
$CMDS) COMMAND="${1/-/}"; shift; $COMMAND "$@" ;;
|
||||
*) raiseError usage ;;
|
||||
|
|
200
bin/setsmbpass
200
bin/setsmbpass
|
@ -1,53 +1,33 @@
|
|||
#!/bin/bash
|
||||
|
||||
#/**
|
||||
#@file setsmbpass [ogLive]
|
||||
#@brief Cambia la contraseña de los clientes para acceder a los servicios principales.
|
||||
#@usage setsmbpass [ogLive]
|
||||
#@param ogLive solo modifica la clave del cliente indicado (puede crear inconsistencias)
|
||||
#@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
|
||||
#@version 1.2.0 - Soporte para varios compresores de Initrd.
|
||||
#@author Ramón M. Gómez - ETSII Univ. Sevilla
|
||||
#@date 2020-09-02
|
||||
#*/ ##
|
||||
|
||||
|
||||
# Variables y funciones globales.
|
||||
PROG="$(basename "$0")"
|
||||
PROG=$(basename $0)
|
||||
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
|
||||
PATH=$PATH:$OPENGNSYS/bin
|
||||
SAMBAUSER="opengnsys" # Usuario por defecto.
|
||||
OGCFGFILE=$OPENGNSYS/etc/opengnsys.json
|
||||
SAMBAUSER="opengnsys" # Usuario por defecto.
|
||||
TFTPDIR=$OPENGNSYS/tftpboot
|
||||
INITRD=oginitrd.img
|
||||
TMPDIR=/tmp/oglive$$
|
||||
let CHANGES=0
|
||||
|
||||
source $OPENGNSYS/lib/ogfunctions.sh || exit 1
|
||||
# Control básico de errores.
|
||||
if [ "$USER" != "root" ] && [ "$USER" != "ogboot" ] && ! id -nG "$USER" | grep -qw "ogboot"; then
|
||||
echo "$PROG: Error: solo ejecutable por root, ogboot o miembros del grupo ogboot" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Control de parámetros.
|
||||
[ "$*" == "help" ] && help
|
||||
[ "$*" == "version" ] && version
|
||||
[ "$USER" != "root" ] && raiseError access "Solo ejecutable por root"
|
||||
case $# in
|
||||
0) # Cambios en todos los clientes ogLive instalados.
|
||||
echolog "Cambiando contraseña 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).
|
||||
echolog "Cambiando contraseña en un solo ogLive"
|
||||
LIST="$1" ;;
|
||||
*) # Error de formato.
|
||||
raiseError usage ;;
|
||||
*) # 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.
|
||||
|
@ -58,62 +38,118 @@ for OGLIVE in $LIST; do
|
|||
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
|
||||
stty echo 2>/dev/null
|
||||
raiseError cancel "La clave solo debe contener caracteres alfanuméricos"
|
||||
fi
|
||||
echo
|
||||
# Obtener confirmación clave sin eco en pantalla.
|
||||
echo -n "Confirmar clave: "
|
||||
read -r SAMBAPASS2
|
||||
echo
|
||||
stty echo 2>/dev/null
|
||||
[ "$SAMBAPASS" != "$SAMBAPASS2" ] && raiseError cancel "Las claves no coinciden"
|
||||
fi
|
||||
# Editar la parte de acceso del cliente:
|
||||
# descomprimir Initrd, sustituir clave y recomprimir Initrd).
|
||||
echolog "Configurando cliente \"$OGLIVE\" ..."
|
||||
mkdir -p $TMPDIR
|
||||
cd $TMPDIR || ogRaiseError access "Directorio temporal"
|
||||
COMPRESS=$(file -b "$CLIENTINITRD" | awk '{print tolower($1);}')
|
||||
$COMPRESS -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
|
||||
chown root.root scripts/passrsync
|
||||
chmod 400 scripts/passrsync
|
||||
# Generar Initrd del cliente (siempre comprimido con gzip).
|
||||
find . | cpio -H newc -oa | gzip -9c > "$CLIENTINITRD"
|
||||
else
|
||||
echolog "$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++
|
||||
# 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 || { echo "Error: no se pudo cambiar al directorio temporal."; exit 3; }
|
||||
|
||||
# Verificar si el archivo es gzip o lz4 antes de descomprimir.
|
||||
if file "$CLIENTINITRD" | grep -q "gzip compressed data"; then
|
||||
if ! gzip -dc "$CLIENTINITRD" | sudo cpio -im; then
|
||||
echo "Error: No se pudo descomprimir y extraer $CLIENTINITRD con gzip."
|
||||
exit 4
|
||||
fi
|
||||
COMPRESS_CMD="gzip -9c"
|
||||
elif file "$CLIENTINITRD" | grep -q "LZ4 compressed data"; then
|
||||
if ! lz4 -d "$CLIENTINITRD" | sudo cpio -im; then
|
||||
echo "Error: No se pudo descomprimir y extraer $CLIENTINITRD con lz4."
|
||||
exit 4
|
||||
fi
|
||||
COMPRESS_CMD="lz4 -c"
|
||||
else
|
||||
echo "Error: $CLIENTINITRD no está en formato gzip o lz4."
|
||||
exit 4
|
||||
fi
|
||||
|
||||
if [ -f scripts/ogfunctions ]; then
|
||||
sudo 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).
|
||||
sudo sed -i "s/busybox reboot/reboot/" scripts/ogfunctions
|
||||
# FIN CÓDIGO TEMPORAL.
|
||||
# Ticket 565, preparar acceso Rsync cliente.
|
||||
echo "$SAMBAPASS" | sudo tee scripts/passrsync > /dev/null
|
||||
# Guardar tokens de seguridad.
|
||||
cat <<EOT | sudo tee scripts/client.cfg > /dev/null
|
||||
CLIENTID=$(jq -r .client.id $OGCFGFILE)
|
||||
CLIENTSECRET=$(jq -r .client.secret $OGCFGFILE)
|
||||
EOT
|
||||
sudo chown root.root scripts/passrsync scripts/client.cfg
|
||||
sudo chmod 400 scripts/passrsync scripts/client.cfg
|
||||
pwd
|
||||
# Paso 1: Buscar archivos
|
||||
sudo find . -print > /tmp/filelist.txt
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: No se pudo encontrar los archivos."
|
||||
exit 5
|
||||
fi
|
||||
|
||||
# Paso 2: Crear el archivo CPIO
|
||||
sudo cpio -H newc -oa < /tmp/filelist.txt > /tmp/initrd.cpio
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: No se pudo crear el archivo CPIO."
|
||||
exit 5
|
||||
fi
|
||||
|
||||
# Paso 3: Comprimir el archivo CPIO
|
||||
sudo $COMPRESS_CMD < /tmp/initrd.cpio > /tmp/initrd.cpio.gz
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: No se pudo comprimir el archivo CPIO."
|
||||
exit 5
|
||||
fi
|
||||
echo "tee step"
|
||||
echo $CLIENTINITRD
|
||||
# Paso 4: Escribir el archivo comprimido en el destino
|
||||
sudo tee "$CLIENTINITRD" < /tmp/initrd.cpio.gz > /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: No se pudo escribir el archivo comprimido en el destino."
|
||||
exit 5
|
||||
fi
|
||||
|
||||
sudo rm /tmp/initrd.cpio /tmp/initrd.cpio.gz
|
||||
else
|
||||
echo "$PROG: Aviso: no se ha modificado la clave del cliente \"$OGLIVE\"."
|
||||
fi
|
||||
sudo rm -fr $TMPDIR
|
||||
# Calcular suma de comprobación.
|
||||
sudo md5sum "$CLIENTINITRD" | cut -f1 -d" " | sudo tee "$CLIENTINITRD.sum" > /dev/null
|
||||
let CHANGES++
|
||||
else
|
||||
echolog "$PROG: Cliente \"$OGLIVE\" no accesible."
|
||||
echo "$PROG: Cliente \"$OGLIVE\" no accesible."
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ $CHANGES != 0 ]]; then
|
||||
# Ticket 565, preparar acceso Rsync servidor.
|
||||
[ -e /etc/rsyncd.secrets ] && sed -i -n -e "/^$SAMBAUSER:/!p" -e "$ a$SAMBAUSER:$SAMBAPASS" /etc/rsyncd.secrets || echo "$SAMBAUSER:$SAMBAPASS" > /etc/rsyncd.secrets
|
||||
chown root.root /etc/rsyncd.secrets
|
||||
chmod 600 /etc/rsyncd.secrets
|
||||
echo "$SAMBAUSER:$SAMBAPASS" | sudo tee /etc/rsyncd.secrets > /dev/null
|
||||
echo "chown debugging"
|
||||
sudo chown root:root /etc/rsyncd.secrets
|
||||
sudo chmod 600 /etc/rsyncd.secrets
|
||||
# Cambiar clave Samba.
|
||||
echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | smbpasswd -a -s $SAMBAUSER
|
||||
echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | sudo smbpasswd -a -s $SAMBAUSER
|
||||
else
|
||||
echolog "$PROG: Aviso: no se ha modificado la clave de ningún cliente."
|
||||
echo "$PROG: Aviso: no se ha modificado la clave de ningún cliente."
|
||||
fi
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue