我如何自动清除和重置Linux用户的主目录为默认?

我正在帮助下周开设两门Unix课程。 用户将被授予一个RHEL 5机器上的帐户,在此期间,他们将文件添加到他们的/home文件夹,更新他们的.bashrc和其他dotfiles,并执行其他一般的杂乱,需要清理。

第二次会议的学生将在第一次会议中重复使用人员的用户帐户。 我想自动清理帐户,所以新用户可以重新开始。

我确信我可以编写一个运行su -u $USER_ID的shell脚本,并在其homedir中放置一个“原始”的好文件集,并删除它find的其他东西。 有其他的工具可以帮助我清理/重置操作吗? 我对傀儡,厨师或其他工具没有任何经验。 他们会有帮助做这样的事情吗?

为了提供这个问题的范围,大约有30个用户帐户,我知道所有的用户名/密码,他们都是在同一个RHEL盒子上创build的。

有很多方法可以帮助:

  • 删除完整的主目录并将所有文件从/etc/skel复制回homedir。 之后更改权限。
  • 将系统放在虚拟机中,创build快照并在第1课后恢复到快照
  • 在RHEL中find像Kiosk模式的东西。 Ubuntu有类似的东西,它可以在注销的时候自动恢复
  • 把家放在btrfs文件系统上,做一个快照并在第一课之后恢复
  • 在上课之前把家里的东西tar把家里的东西还原,从tar还原

而学习其他工具,如木偶/厨师,如果你想在下周获得成果,就有点太多了。

假设你所有的学生的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作为你的loginpipe理器,你可以添加这样的文件:/ 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 

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

除此之外,我不知道任何工具来自动清理。 我可能最终会写一些简单的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. 

可能有一些很好的工具可以帮助,但我可能只是(a)把所需的东西放在一个git仓库中,(b)编写一个脚本,遍历用户和rm所需的东西,并从git仓库。

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

rm -rf / home / user / Downloads / *

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

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

pico / etc / gdm / PostSession / Default

!/斌/庆典

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