Linux 사용자의 홈 디렉토리 지우기 및 재설정을 기본값으로 자동화하려면 어떻게해야합니까?


8

다음 주에 두 가지 유닉스 과정을 가르치고 있습니다. 사용자는 RHEL 5 컴퓨터에 계정을 부여받으며,이 기간 동안 /home폴더 에 파일을 추가하고 해당 파일 .bashrc및 기타 도트 파일을 업데이트 하며 정리해야 할 일반적인 혼란을 수행합니다.

두 번째 세션의 학생들은 첫 번째 세션에서 사람들의 사용자 계정을 재사용합니다. 계정 정리를 자동화하여 신규 사용자를 새로 시작할 수 있습니다.

필자 su -u $USER_ID는 자신의 homedir에 "원본"좋은 파일 세트를 저장하고 찾은 다른 것을 제거 하는 쉘 스크립트를 작성할 수 있다고 확신 합니다. 이 정리 / 리셋 작업에 도움이되는 다른 도구가 있습니까? Puppet, Chef 또는 기타 도구에 대한 경험이 없습니다. 이런 식으로 도움이 되겠습니까?

문제의 범위를 제공하기 위해 약 30 명의 사용자 계정이 있으며 모든 사용자 ID / 비밀번호를 알고 있으며 모두 동일한 RHEL 상자에 작성됩니다.


당신이 그것을 가르치면 아마 당신은 이미 알고 있지만 Linux는 Unix가 아닙니다. 이 이름은 Linus의 이름이지만 [L] inux [i] s [n] ot [U] ni [x]의 약자입니다.
mailq

충분합니다. 제목을 반영하여 제목을 변경했습니다.
matthewsteele

답변:


12

도움이되는 많은 방법이 있습니다.

  • 완전한 홈 디렉토리를 제거하고 모든 파일을 /etc/skelhomedir로 다시 복사하십시오 . 나중에 권한을 변경하십시오.
  • 레슨 1 후에 시스템을 가상 머신에 넣고 스냅 샷을 작성하고 스냅 샷으로 되돌립니다.
  • RHEL에서 키오스크 모드와 같은 것을 찾으십시오. 우분투에는 로그 오프 중에 자동으로 집을 복원하는 것과 같은 것이 있습니다.
  • btrfs 파일 시스템에 집을 놓고 스냅 샷을 만들고 수업 1 후 되돌립니다.
  • tar 수업 전 홈 디렉토리, 나중에 홈 삭제,에서 복원 tar
  • ...

다음 주에 결과를 원한다면 Puppet / Chef와 같은 다른 도구를 배우는 것이 너무 많습니다.


감사. 아마도 tar시간을 낭비하지 않을 때 꼭 실행 하고 복원하고 Puppet과 같은 도구를 배우려고 노력할 것입니다.
matthewsteele

4

모든 학생들이 1000에서 65000 사이의 UID를 가졌다 고 말할 수 있습니다.

이와 같은 빠른 원 라이너가 작동합니다. 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

"원본"계정 파일 세트는 일반적으로 유닉스 시스템에서 / 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

이것은 우분투 그놈에서 작동합니다 : pico /usr/local/bin/cleanup.sh

rm -rf / home / user / Downloads / *

문서를 제거하려면 동일한 작업을 수행하십시오.

chmod 511 종료 /usr/local/bin/cleanup.sh

피코 / etc / gdm / PostSession / Default

! / bin / bash

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.