Linuxユーザーのホームディレクトリをクリアしてデフォルトにリセットする方法を教えてください。


8

来週、2つのUnixコースを教えるのを手伝っています。ユーザーにはRHEL 5マシンのアカウントが付与されます。その間に、ファイルを/homeフォルダーに追加し、自分.bashrcや他のdotfileを更新し、クリーンアップが必要なその他の一般的な混乱を実行します。

2番目のセッションの学生は、最初のセッションのユーザーのユーザーアカウントを再利用します。アカウントのクリーンアップを自動化して、新しいユーザーが新たに始められるようにしたいと思います。

を実行しsu -u $USER_ID、ホームディレクトリに「元の」適切なファイルのセットを配置し、見つかったものをすべて削除するシェルスクリプトを記述できると確信しています。このクリーン/リセット操作に役立つ他のツールはありますか?Puppet、Chef、その他のツールの経験はありません。彼らはこのようなことをするのに役立ちますか?

問題の範囲を提供するために、約30のユーザーアカウントがあり、すべてのユーザーIDとパスワードを知っています。これらはすべて同じRHELボックスで作成されています。


あなたがそれを教えればあなたはおそらくすでにそれを知っているでしょうが、LinuxはUnixではありません。名前はLinusに由来しますが、[L] inux [i] s [n] ot [U] ni [x]の頭字語でもあります。
mailq

十分だ。タイトルを反映するように変更しました。
matthewsteele、2011

回答:


12

役立つ多くの方法があります。

  • 完全なホームディレクトリを削除し、すべてのファイルをホームディレクトリにコピーします/etc/skel。後で権限を変更します。
  • システムを仮想マシンに配置し、スナップショットを作成して、レッスン1の後でスナップショットに戻します。
  • RHELでキオスクモードのようなものを見つけます。Ubuntuにはそのようなものがあり、ログオフ時に家を自動的に復元します
  • ホームをbtrfsファイルシステムに置き、スナップショットを作成し、レッスン1の後で元に戻します。
  • tar レッスン前のホームディレクトリ、後でホームを削除、から復元 tar
  • ...

また、来週の結果を知りたいのであれば、Puppet / Chefのような他のツールを学ぶのは少しやりすぎです。


ありがとう。おそらく実行しtarて復元し、時間に余裕がないときにPuppetのようなツールを学習してみます。
matthewsteele、2009

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リポジトリに入れ、(b)ユーザーを反復してrmが望ましいものを取り、gitリポジトリからプルするスクリプトを記述します。


-2

これは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

!/ bin / bash

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.