Como posso automatizar a limpeza e a redefinição de um diretório inicial do usuário Linux para um padrão?

7

Estou ajudando a ministrar dois cursos Unix na próxima semana. Os usuários receberão uma conta em uma máquina RHEL 5, durante a qual eles adicionarão arquivos à sua pasta /home , atualizarão seu .bashrc e outros dotfiles e realizarão outras tarefas gerais que precisam ser limpas.

Os alunos da segunda sessão reutilizarão as contas de usuário das pessoas na primeira sessão. Gostaria de automatizar a limpeza de suas contas, para que novos usuários possam começar de novo.

Tenho certeza de que poderia escrever um script de shell que execute su -u $USER_ID e defina um conjunto "original" de arquivos bons em seu homedir e remova qualquer outra coisa que encontrar. Existem outras ferramentas que me ajudarão com essa operação de limpeza / reinicialização? Não tenho nenhuma experiência com o Puppet, Chef ou outras ferramentas. Eles seriam úteis para fazer algo assim?

Para fornecer um escopo do problema, há cerca de 30 contas de usuário, todas as senhas / usuários e todas elas criadas na mesma caixa do RHEL.

    
por matthewsteele 07.09.2011 / 23:37

7 respostas

12

Existem muitas maneiras de ajudar:

  • remova o diretório pessoal completo e copie todos os arquivos de /etc/skel de volta para o homedir. Altere as permissões depois.
  • coloque o sistema em uma máquina virtual, faça um instantâneo e reverta para o instantâneo depois da lição 1
  • encontre algo como um modo de quiosque no RHEL. O Ubuntu tem algo assim, que restaura automaticamente a casa durante o logoff
  • coloque a casa em um sistema de arquivos btrfs, faça um instantâneo e reverta após a lição 1
  • tar do diretório inicial antes da aula, excluir home depois, restaurar de tar
  • ...

E aprender outras ferramentas como Puppet / Chef é um pouco demais se você quiser resultados na próxima semana.

    
por 07.09.2011 / 23:52
4

Digamos que todos os seus alunos tenham um IDI entre 1.000 e 65.000

Um verso rápido como esse funcionaria. O awk imprime um comando rsync e um comando chown para cada usuário no intervalo. Enviar a saída do awk para o bash executará todos os comandos para redefinir diretórios e permissões.

# 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 )
    
por 08.09.2011 / 00:57
2

Se você estiver usando o gdm para o seu gerenciador de login, você pode adicionar algo como este arquivo: / 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
    
por 22.09.2011 / 22:52
1

O conjunto "original" de arquivos de conta geralmente está localizado em / etc / skel em sistemas unix.

Além disso, não conheço nenhuma ferramenta para automatizar a limpeza. Eu provavelmente acabaria escrevendo algum script simples.

    
por 07.09.2011 / 23:51
1

Tente isso

#!/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.
    
por 23.05.2013 / 17:28
0

Pode haver alguma boa ferramenta que ajude, mas eu provavelmente apenas (a) colocarei as coisas desejadas em um repositório git, e (b) escreverei um script que itera sobre os usuários e rm o material desejado e puxa de o repositório do git.

    
por 08.09.2011 / 00:04
-2

Isso funciona para o gnome do Ubuntu: pico /usr/local/bin/cleanup.sh

rm -rf / home / user / downloads / *

faça o mesmo se quiser remover documentos

sair chmod 511 /usr/local/bin/cleanup.sh

pico / etc / gdm / PostSession / Default

! / bin / bash

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

    
por 05.05.2016 / 17:04