¿Cómo puedo automatizar la eliminación y restablecimiento del directorio de inicio de un usuario de Linux a un valor predeterminado?

8

Estoy ayudando a enseñar dos cursos de Unix la próxima semana. A los usuarios se les otorgará una cuenta en una máquina RHEL 5, durante la cual agregarán archivos a su /homecarpeta, actualizarán sus .bashrcy otros archivos de puntos y realizarán otros desordenes generales que deben limpiarse.

Los estudiantes en la segunda sesión reutilizarán las cuentas de usuario de las personas en la primera sesión. Me gustaría automatizar la limpieza de sus cuentas, para que los nuevos usuarios puedan comenzar de nuevo.

Estoy seguro de que podría escribir un script de shell que ejecute su -u $USER_IDay establezca un conjunto "original" de buenos archivos en su homedir, y elimine todo lo que encuentre. ¿Hay otras herramientas que me ayudarán con esta operación de limpieza / reinicio? No tengo ninguna experiencia con Puppet, Chef u otras herramientas. ¿Serían útiles para hacer algo como esto?

Para proporcionar un alcance del problema, hay alrededor de 30 cuentas de usuario, conozco todos los ID de usuario / contraseñas, y todos están creados en el mismo cuadro RHEL.

matthewsteele
fuente
Si lo enseñas, probablemente ya lo sabrás, pero Linux no es Unix. El nombre proviene de Linus, pero también es un acrónimo de [L] inux [i] s [n] ot [U] ni [x].
mailq
Suficientemente cierto. He cambiado el título para reflejarlo.
matthewsteele

Respuestas:

12

Hay muchas maneras que ayudarían:

  • elimine el directorio de inicio completo y copie todos los archivos de /etc/skelnuevo al homedir. Cambiar los permisos después.
  • coloque el sistema en una máquina virtual, haga una instantánea y vuelva a la instantánea después de la lección 1
  • encuentra algo como un modo de quiosco en RHEL. Ubuntu tiene algo así, que restaura automáticamente el hogar durante el cierre de sesión
  • poner la casa en un sistema de archivos btrfs, hacer una instantánea y revertir después de la lección 1
  • tar el directorio de inicio antes de la lección, eliminar el inicio después, restaurar desde tar
  • ...

Y aprender otras herramientas como Puppet / Chef es un poco demasiado si quieres resultados la próxima semana.

mailq
fuente
Gracias. Probablemente ejecutaré tary restauraré, y trataré de aprender una herramienta como Puppet cuando no esté en apuros.
matthewsteele
4

Digamos que todos sus estudiantes tenían un UID entre 1000 y 65000

Una frase rápida como esta funcionaría. Awk imprimirá un comando rsync y un comando chown para cada usuario en el rango. Enviar la salida del awk a bash ejecutará todos los comandos para restablecer directorios y permisos.

# see what will happen.
awk 'BEGIN{FS=":"} $3 >= 1000 && $3 <=65000 { print "rsync --delete -v -r /etc/skel/ " $6 "/ ; chown -R " $1 ":" $1 " " $6;}' /etc/passwd

# actually run the commands to reset all users matched by awk.
bash <( awk 'BEGIN{FS=":"} $3 >= 1000 && $3 <=65000 { print "rsync --delete -v -r /etc/skel/ " $6 "/ ; chown -R " $1 ":" $1 " " $6;}' /etc/passwd )
Zoredache
fuente
2

Si está utilizando gdm para su administrador de inicio de sesión, puede agregar algo como este archivo: / etc / gdm / PostSession / Default

#!/bin/sh

if [[ "$USER" != "" ]]; then
   rm -rf /home/$USER
   cp -r /etc/skel /home/$USER
   chown -R $USER:$USER /home/$USER
fi
Andrew Case
fuente
1

El conjunto "original" de archivos de cuenta generalmente se encuentra en / etc / skel en sistemas unix.

Aparte de esto, no conozco ninguna herramienta para automatizar la limpieza. Probablemente termine escribiendo algún script bash simple.

usuario683887
fuente
1

Prueba esto

#!/bin/bash

BASEDIR=/home

# error codes
E_OK=0
E_NOK=1

function handle_error
{

CODE=$1
ACTION=$2
INV=$3

# INV means to invert the handling logic

if [ -z $INV ]; then
  if [ $CODE -ne 0 ]; then
    echo "error: $ACTION"
    exit $E_NOK
  fi
else
 if [ $CODE -eq 0 ]; then
    echo "error: $ACTION"
    exit $E_NOK
  fi
fi

  return $E_OK
}


function print_usage()
{

  echo "usage: reset-homedir.sh USERNAME"

}
# target user and target dir
TUSER=$1
TDIR=$BASEDIR/$TUSER

if [ -z $TUSER ]; then
  print_usage
  exit 0
fi

getent passwd $TUSER >& /dev/null
RC=$?
handle_error $RC "user $TUSER does not exist"

TGROUP="`id -gn $1`"

if [ ! -d $TDIR ]; then
  echo "error: target directory $TDIR does not exist"
  exit 1
fi

# you don't want to delete user mounted stuff do you?
MOUNTS="`mount |grep $TDIR`" >& /dev/null
RC=$?
handle_error $RC "there are mounted filesystems below $TDIR" TRUE


ps -u $TUSER >& /dev/null
RC=$?
handle_error $RC "user $TUSER is logged in" TRUE

echo
echo "$TDIR will be reset to the default state - ALL DATA WILL BE LOST"
echo
echo "-- press ENTER to continue or CTRL+C to abort --"
read dummy

# we did our best to check for unwanted situations
rm -rf $TDIR
# creates a new one
cp -R /etc/skel $TDIR
chown -R $TUSER:"$TGROUP" $TDIR

echo Done.
memogh
fuente
0

Puede haber alguna buena herramienta que ayude, pero probablemente solo (a) coloque las cosas deseadas en un repositorio de git, y (b) escriba un script que itere sobre los usuarios y rm las cosas deseadas y extraiga del repositorio de git .

Kevin Beam
fuente
-2

Esto funciona para Ubuntu gnome: pico /usr/local/bin/cleanup.sh

rm -rf / home / user / Descargas / *

haz lo mismo si quieres eliminar Documentos

salga de chmod 511 /usr/local/bin/cleanup.sh

pico / etc / gdm / PostSession / Default

! / bin / bash

/usr/local/bin/cleanup.sh salida 0

kongwu
fuente