Как я могу автоматизировать очистку и сброс по умолчанию домашнего каталога пользователя Linux?


8

Я помогаю преподавать два курса Unix на следующей неделе. Пользователям будет предоставлена ​​учетная запись на машине RHEL 5, в течение которой они будут добавлять файлы в свою /homeпапку, обновлять свои .bashrcи другие точечные файлы и выполнять другие общие проблемы, которые необходимо очистить.

Студенты на втором занятии будут повторно использовать учетные записи пользователей на первом занятии. Я хотел бы автоматизировать очистку своих учетных записей, чтобы новые пользователи могли начать все сначала.

Я уверен, что мог бы написать сценарий оболочки, который запускает su -u $USER_IDи устанавливает «оригинальный» набор хороших файлов в их homedir и удаляет все остальное, что он находит. Существуют ли другие инструменты, которые помогут мне с этой операцией очистки / сброса? У меня нет опыта работы с Puppet, Chef или другими инструментами. Будет ли им полезно сделать что-то подобное?

Чтобы решить эту проблему, существует около 30 учетных записей пользователей, я знаю все идентификаторы пользователей и пароли, и все они созданы в одном блоке RHEL.


Если вы научите этому, вы, вероятно, уже это знаете, но Linux - это не Unix. Название происходит от Линуса, но оно также является аббревиатурой от [L] inux [i] s [n] ot [U] ni [x].
mailq

Правда достаточно. Я изменил название, чтобы отразить это.
Matthewsteele

Ответы:


12

Есть много способов, которые могут помочь:

  • удалите полный домашний каталог и скопируйте все файлы /etc/skelобратно в домашний каталог. Измените разрешения впоследствии.
  • поместить систему в виртуальную машину, сделать снимок и вернуться к снимку после урока 1
  • найти что-то вроде режима киоска в RHEL. В Ubuntu есть нечто подобное, которое автоматически восстанавливает дом при выходе из системы.
  • поставить дом на файловую систему btrfs, сделать снимок и вернуться после урока 1
  • tar домашний каталог перед уроком, потом домашний удалить, восстановить из tar
  • ...

А изучение других инструментов, таких как Puppet / Chef, - это слишком много, если вы хотите получить результаты на следующей неделе.


Спасибо. Я, вероятно, запустлю tarи восстановлю, и попробую изучить инструмент типа Puppet, когда у меня нет времени.
Matthewsteele

4

Допустим, у всех ваших студентов был UID от 1000 до 65000

Быстрая однострочная работа подойдет. Awk распечатает команду rsync и команду chown для каждого пользователя в диапазоне. Отправка вывода awk в bash запустит все команды для сброса каталогов и разрешений.

# 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 )

2

Если вы используете gdm для вашего менеджера входа, вы можете добавить что-то вроде этого файла: / 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

1

«Оригинальный» набор файлов учетных записей обычно находится в / etc / skel в системах Unix.

Кроме этого, я не знаю никакого инструмента для автоматизации очистки. Я, вероятно, в конечном итоге написал бы простой скрипт bash.


1

Попробуй это

#!/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.

0

Может быть какой-то хороший инструмент, который поможет, но я бы, вероятно, просто (а) поместил нужные вещи в репозиторий git и (б) написал скрипт, который перебирает пользователей и rm - это нужные вещи и извлекает из репозитория git ,


-2

Это работает для гнома Ubuntu: pico /usr/local/bin/cleanup.sh

rm -rf / home / user / Downloads / *

сделайте то же самое, если вы хотите удалить документы

выход chmod 511 /usr/local/bin/cleanup.sh

pico / etc / gdm / PostSession / Default

! / Bin / Баш

/usr/local/bin/cleanup.sh выход 0

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.