На следующей неделе я помогаю вести два курса по Unix. Пользователям будет предоставлена учетная запись на машине RHEL 5, в течение которой они будут добавлять файлы в свои /home
папку, обновите их .bashrc
и другие точечные файлы, а также выполнять другие беспорядки, которые необходимо устранить.
Учащиеся второго занятия будут повторно использовать учетные записи пользователей первого занятия. Я хотел бы автоматизировать очистку своих учетных записей, чтобы новые пользователи могли начать все заново.
Я уверен, что смогу написать сценарий оболочки, который запускает su -u $USER_ID
и помещает «исходный» набор хороших файлов в свой домашний каталог и удаляет все, что находит. Есть ли другие инструменты, которые помогут мне с этой операцией очистки / сброса? У меня нет опыта работы с Puppet, Chef или другими инструментами. Могут ли они сделать что-то подобное?
Чтобы обеспечить масштаб проблемы, существует около 30 учетных записей пользователей, я знаю все идентификаторы пользователя / пароли, и все они созданы в одном блоке RHEL.
Есть много способов, которые могут помочь:
/etc/skel
обратно в хомедир. После этого измените разрешения.tar
домашний каталог до урока, потом удалить дом, восстановить из tar
А изучение других инструментов, таких как Puppet / Chef, - это слишком много, если вы хотите результатов на следующей неделе.
Допустим, у всех ваших учеников был 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 )
Если вы используете 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
«Исходный» набор файлов учетных записей обычно находится в / etc / skel в системах unix.
Кроме этого, я не знаю ни одного инструмента для автоматизации очистки. Я бы, наверное, написал какой-нибудь простой скрипт на bash.
Попробуй это
#!/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.
Может быть какой-нибудь хороший инструмент, который поможет, но я бы, вероятно, просто (а) поместил желаемый материал в репозиторий git и (б) написал скрипт, который перебирает пользователей и rm желаемый материал и извлекает из репозитория git .
Это работает для Ubuntu gnome: pico /usr/local/bin/cleanup.sh
rm -rf / home / user / Downloads / *
выйти из chmod 511 /usr/local/bin/cleanup.sh
пико / и т.д. / gdm / PostSession / по умолчанию
/usr/local/bin/cleanup.sh выход 0