如何自动清除Linux用户的主目录并将其重置为默认目录?


8

下周我要教两个Unix课程。将在RHEL 5计算机上为用户授予一个帐户,在此期间,他们会将文件添加到其/home文件夹,更新其文件.bashrc和其他dotfile以及执行其他需要清除的常规混乱情况。

第二节课中的学生将重用第一节课中的用户帐户。我想自动清理他们的帐户,以便新用户可以重新开始。

我确定我可以编写一个运行脚本,并运行一个shell脚本,su -u $USER_ID并在其homedir中放置一组“原始”好的文件,并删除它找到的任何其他文件。还有其他工具可以帮助我进行此清理/重置操作吗?我没有使用Puppet,Chef或其他工具的经验。他们这样做会有所帮助吗?

为了提供一个问题的范围,大约有30个用户帐户,我知道所有用户ID /密码,并且它们都在同一RHEL框中创建。


如果您教它,您可能已经知道了,但是Linux不是Unix。该名称来自Linus,但它也是[L] inux [i] s [n] ot [U] ni [x]的首字母缩写。
mailq

足够真实。我已经更改标题以反映它。
matthewsteele

Answers:


12

有很多方法可以帮助您:

  • 删除完整的主目录,然后将所有文件复制/etc/skel回homedir。之后更改权限。
  • 将系统放在虚拟机中,制作快照并在第1课后还原到快照
  • 在RHEL中找到类似信息亭模式的内容。Ubuntu有这样的东西,它可以在注销过程中自动还原主目录
  • 将主目录放置在btrfs文件系统上,进行快照并在第1课后还原
  • tar 上课前的主目录,然后删除主目录,从 tar
  • ...

如果您想在下周获得结果,那么学习其他工具(例如Puppet / Chef)会有点过多。


谢谢。我可能会运行a 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

帐户文件的“原始”集通常位于UNIX系统中的/ etc / skel下。

除此之外,我不知道有什么工具可以自动进行清理。我可能最终会写一些简单的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

可能会有一些不错的工具会有所帮助,但我可能只是(a)将所需的东西放入git repo中,并且(b)编写一个脚本,该脚本遍历用户并rm所需的东西并从git repo中提取。


-2

这适用于Ubuntu gnome:pico /usr/local/bin/cleanup.sh

rm -rf / home /用户/下载/ *

如果要删除文档,请执行相同的操作

退出chmod 511 /usr/local/bin/cleanup.sh

pico / etc / gdm / PostSession /默认

!/ bin / bash

/usr/local/bin/cleanup.sh退出0

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.