Bagaimana saya bisa mengotomatiskan membersihkan dan mengatur ulang direktori home pengguna Linux ke default?

8

Saya membantu mengajar dua kursus Unix minggu depan. Pengguna akan diberikan akun pada mesin RHEL 5, selama waktu itu mereka akan menambahkan file ke /homefolder mereka , memperbarui .bashrcdotfile mereka dan lainnya, dan melakukan kekacauan umum lainnya yang perlu dibersihkan.

Siswa di sesi kedua akan menggunakan kembali akun pengguna orang-orang di sesi pertama. Saya ingin mengotomatiskan pembersihan akun mereka, sehingga pengguna baru dapat memulai baru.

Saya yakin saya bisa menulis skrip shell yang menjalankan su -u $USER_IDdan meletakkan satu set "asli" file yang baik di homedir mereka, dan menghapus apa pun yang ditemukannya. Apakah ada alat lain yang akan membantu saya dengan operasi pembersihan / reset ini? Saya tidak punya pengalaman dengan Wayang, Koki, atau alat lainnya. Akankah mereka membantu untuk melakukan hal seperti ini?

Untuk memberikan ruang lingkup masalah, ada sekitar 30 akun pengguna, saya tahu semua userid / kata sandi, dan semuanya dibuat pada kotak RHEL yang sama.

matthewsteele
sumber
Jika Anda mengajarkannya, Anda mungkin sudah mengetahuinya, tetapi Linux bukan Unix. Namanya berasal dari Linus, tetapi juga merupakan akronim untuk [L] inux [i] s [n] ot [U] ni [x].
mailq
Cukup benar. Saya telah mengubah judul untuk mencerminkannya.
matthewsteele

Jawaban:

12

Ada banyak cara yang akan membantu:

  • hapus direktori home yang lengkap dan salin semua file dari /etc/skelbelakang ke homedir. Ubah izin sesudahnya.
  • letakkan sistem di mesin virtual, buat snapshot, dan kembali ke snapshot setelah pelajaran 1
  • temukan sesuatu seperti mode kios di RHEL. Ubuntu memiliki sesuatu seperti itu, yang secara otomatis mengembalikan rumah selama logoff
  • letakkan home pada sistem file btrfs, buat snapshot dan kembalikan setelah pelajaran 1
  • tar dir home sebelum pelajaran, hapus home sesudahnya, restore from tar
  • ...

Dan mempelajari alat-alat lain seperti Wayang / Koki sedikit terlalu banyak jika Anda ingin hasil minggu depan.

mailq
sumber
Terima kasih. Saya mungkin akan menjalankan tardan mengembalikan, dan mencoba belajar alat seperti Wayang ketika saya tidak berada di bawah krisis waktu.
matthewsteele
4

Katakanlah semua siswa Anda memiliki UID antara 1000 dan 65000

Satu kalimat cepat seperti ini akan berhasil. Awk akan mencetak perintah rsync dan perintah chown untuk setiap pengguna dalam jangkauan. Mengirim output awk ke bash akan menjalankan semua perintah untuk mengatur ulang direktori dan izin.

# 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 )
Sakit kepala
sumber
2

Jika Anda menggunakan gdm untuk manajer login Anda, Anda dapat menambahkan sesuatu seperti file ini: / 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
Andrew Case
sumber
1

Kumpulan file akun "asli" biasanya terletak di bawah / etc / skel di sistem unix.

Selain itu, saya tidak tahu alat apa pun untuk mengotomatiskan pembersihan. Saya mungkin akhirnya menulis beberapa skrip bash sederhana.

pengguna683887
sumber
1

Coba ini

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

Mungkin ada beberapa alat bagus yang akan membantu, tapi saya mungkin hanya (a) meletakkan barang-barang yang diinginkan di git repo, dan (b) menulis skrip yang beralih ke pengguna dan rm barang-barang yang diinginkan dan menarik dari git repo .

Kevin Beam
sumber
-2

Ini berfungsi untuk Ubuntu gnome: pico /usr/local/bin/cleanup.sh

rm -rf / home / user / Downloads / *

lakukan hal yang sama jika Anda ingin menghapus Dokumen

keluar dari chmod 511 /usr/local/bin/cleanup.sh

pico / etc / gdm / PostSession / Default

! / bin / bash

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

kongwu
sumber