Làm cách nào tôi có thể tự động xóa và đặt lại thư mục chính của người dùng Linux về mặc định?


8

Tôi đang giúp dạy hai khóa Unix vào tuần tới. Người dùng sẽ được cấp một tài khoản trên máy RHEL 5, trong thời gian đó họ sẽ thêm các tệp vào /homethư mục của mình , cập nhật các tệp .bashrcdotfile khác và thực hiện các mớ hỗn độn chung khác cần được dọn sạch.

Học sinh trong phiên thứ hai sẽ sử dụng lại tài khoản người dùng của mọi người trong phiên đầu tiên. Tôi muốn tự động hóa việc dọn dẹp tài khoản của họ, để người dùng mới có thể bắt đầu mới.

Tôi chắc chắn rằng tôi có thể viết một tập lệnh shell chạy su -u $USER_IDvà đặt một tập hợp các tập tin tốt "gốc" trong homedir của họ và loại bỏ bất cứ thứ gì nó tìm thấy. Có công cụ nào khác sẽ giúp tôi với thao tác xóa / đặt lại này không? Tôi không có bất kỳ kinh nghiệm nào với Puppet, Chef hoặc các công cụ khác. Họ sẽ có ích để làm một cái gì đó như thế này?

Để cung cấp phạm vi của vấn đề, có khoảng 30 tài khoản người dùng, tôi biết tất cả tài khoản / mật khẩu và tất cả chúng đều được tạo trên cùng một hộp RHEL.


Nếu bạn dạy nó, có lẽ bạn đã biết, nhưng Linux không phải là Unix. Tên đến từ Linus, nhưng nó cũng là từ viết tắt của [L] inux [i] s [n] ot [U] ni [x].
mailq

Đúng đủ rồi. Tôi đã thay đổi tiêu đề để phản ánh nó.
matthewsteele

Câu trả lời:


12

Có nhiều cách có thể giúp:

  • xóa thư mục nhà hoàn chỉnh và sao chép tất cả các tệp từ /etc/skeltrở lại homedir. Thay đổi quyền sau đó.
  • đặt hệ thống vào máy ảo, tạo ảnh chụp nhanh và trở lại ảnh chụp nhanh sau bài 1
  • tìm một cái gì đó giống như chế độ kiosk trong RHEL. Ubuntu có một cái gì đó tương tự, nó tự động khôi phục nhà trong khi đăng xuất
  • đặt nhà trên một hệ thống tập tin btrfs, tạo ảnh chụp nhanh và hoàn nguyên sau bài 1
  • tar thư mục nhà trước khi học, xóa nhà sau đó, khôi phục từ tar
  • ...

Và học các công cụ khác như Puppet / Chef là một chút quá nhiều nếu bạn muốn kết quả vào tuần tới.


Cảm ơn. Có lẽ tôi sẽ chạy tarvà khôi phục, và thử học một công cụ như Puppet khi tôi không bị khủng hoảng thời gian.
matthewsteele

4

Hãy nói rằng tất cả các sinh viên của bạn có UID trong khoảng từ 1000 đến 65000

Một lót nhanh như thế này sẽ làm việc. Awk sẽ in ra một lệnh rsync và lệnh chown cho mọi người dùng trong phạm vi. Gửi đầu ra của awk vào bash sẽ chạy tất cả các lệnh để thiết lập lại các thư mục và quyền.

# 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

Nếu bạn đang sử dụng gdm cho trình quản lý đăng nhập của mình, bạn có thể thêm một cái gì đó như tệp này: / etc / gdm / PostSession / Mặc định

#!/bin/sh

if [[ "$USER" != "" ]]; then
   rm -rf /home/$USER
   cp -r /etc/skel /home/$USER
   chown -R $USER:$USER /home/$USER
fi

1

Tập hợp các tệp tài khoản "gốc" thường được đặt trong / etc / skel trong các hệ thống unix.

Ngoài ra, tôi không biết công cụ nào để tự động dọn dẹp. Có lẽ tôi cuối cùng đã viết một số kịch bản bash đơn giản.


1

Thử cái này

#!/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

Có thể có một số công cụ tốt sẽ giúp ích, nhưng tôi có lẽ chỉ cần (a) đặt nội dung mong muốn vào repo git và (b) viết một tập lệnh lặp lại cho người dùng và rm là công cụ mong muốn và lấy từ repit git .


-2

Điều này hoạt động cho Ubuntu gnome: pico /usr/local/bin/cleanup.sh

rm -rf / home / user / Tải xuống / *

làm tương tự nếu bạn muốn xóa tài liệu

thoát chmod 511 /usr/local/bin/cleanup.sh

pico / etc / gdm / PostSession / Mặc định

! / thùng / bash

/usr/local/bin/cleanup.sh thoát 0

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.