* 실습 리스트 * 

 

 

[실습 10] OS 설치 후 초기 작업 수행 프로그램

* ENV_main.sh

* ENV1.sh (TELNET.sh, FTP.sh)

* ENV2.sh

* ENV3.sh

 

[실습 11] 네트워크 설정 점검 프로그램

* check_network.sh

 

[실습12] 설치 진행과정 표시 프로그램

* install.sh

 

[실습13] 백업 스크립트 + crontab

* 매월 2번째 주 일요일에 백업 스크립트 실행 시키도록 프로그램 제작

* home_backup.sh

 

[실습14] 중요 파일 퍼미션 점검 스크립트 제작

* check_perm.sh(perm.list)

 

 

 


 

 

 

[실습 10] OS 설치 후 초기 작업 수행 프로그램

 

* ENV_main.sh

#!/bin/bash

./ENV1.sh
./ENV2.sh
./ENV3.sh

 

 

* ENV1.sh (TELNET.sh, FTP.sh)

#!/bin/bash

./TELNET.sh
./FTP.sh

 

* ENV1.sh (TELNET.sh)

#!/bin/bash

#1) 부팅시 서비스  on : telnet 서비스 enable 
#		* 패키지 설치 유무 확인 / systemctl is-enableled telnet.socket
#2) 현재  서비스 기동중인 상태 확인 : telnet 서비스  activate 
#		* systemctl is-active telnet.socket
#3) 사용자 : root 사용자 접근 허용
#		* /etc/securetty

# 변수 설정 및 초기화
TelnetPKG='telnet-server telnet'
TelnetServiceName=telnet.socket
TelnetConf=/etc/securetty

# 1) 패키지 설치 유무 확인
#		*telnet-server / telnet

rpm -q $TelnetPKG >/dev/null 2>&1
if [ $? -ne 0 ] ; then
		echo "[ INFO ] 잠시만 기다려 주세요."
		yum install -q -y $TelnetPKG >/dev/null 2>&1 
		if [ $? -eq 0 ] ; then
				echo "[ OK ] 패키지가 정상적으로 설치 되어 있습니다"
		else
				echo "[ FAIL ] 텔넷 패키지가 설치되어 있지 않습니다"
				exit 1
		fi
fi


# 2) 텔넷 서비스 enable 유무 확인
Enabled=`systemctl is-enabled $TelnetServiceName`
if [ $Enabled != 'enabled' ] ; then
		systemctl enable $TelnetServiceName >/dev/null 2>&1
		echo "[ OK ] 텔넷 서비스가 enable 되었습니다."
fi


# 3) 텔넷 서비스 active 유무 확인
Active=`systemctl is-active $TelnetServiceName`
if [ $Active != 'active' ] ; then
		systemctl start $TelnetServiceName >/dev/null 2>&1
		echo "[ OK ] 텔넷 서비스가 active 되었습니다."
fi


# 4) 관리자 서비스 접근 가능 설정
grep -q 'pts/' $TelnetConf #-q 옵션은 실행 과정을 생략하고 결과만 보여줌 (/dev/null기능)
if [ $? -ne 0 ] ; then
		for i in $(seq 1 11) ; do echo "pts/$i" >> $TelnetConf ; done
		echo "[ OK ] 관리자 서비스에 접근 가능하도록 설정하였습니다."
fi

 

* ENV1.sh (FTP.sh)

#!/bin/bash

#1) 부팅시 서비스  on : vsftpd ftp 서비스 enable 
#		* 패키지 설치 유무 확인 / systemctl is-enableled telnet.socket
#2) 현재  서비스 기동중인 상태 확인 : telnet 서비스  activate 
#		* systemctl is-active telnet.socket
#3) 사용자 : root 사용자 접근 허용
#		* /etc/securetty



# 변수 설정 및 초기화
Name='FTP'
FtpPKG='vsftpd ftp'
FtpServiceName='vsftpd'
FtpConf1='/etc/vsftpd/ftpusers'
FtpConf2='/etc/vsftpd/user_list'

# 1) 패키지 설치 유무 확인
rpm -q $FtpPKG >/dev/null 2>&1
if [ $? -ne 0 ] ; then
		echo "[ INFO ] 잠시만 기다려 주세요."
		yum install -q -y $FtpPKG >/dev/null 2>&1 
		if [ $? -eq 0 ] ; then
				echo "[ OK ] 패키지가 정상적으로 설치 되어 있습니다"
		else
				echo "[ FAIL ] 텔넷 패키지가 설치되어 있지 않습니다"
				exit 1
		fi
fi


# 2) 서비스  enable 유무 확인
Enabled=`systemctl is-enabled $FtpServiceName`
if [ $Enabled != 'enabled' ] ; then
		systemctl enable $FtpServiceName >/dev/null 2>&1
		echo "[ OK ] $Name 서비스가 enable 되었습니다."
fi


# 3) 서비스 active 유무 확인
Active=`systemctl is-active $FtpServiceName`
if [ $Active != 'active' ] ; then
		systemctl start $FtpServiceName >/dev/null 2>&1
		echo "[ OK ] $Name 서비스가 active 되었습니다."
fi


# 4) 관리자 서비스 접근 가능 설정
egrep -v '^$|^#' $FtpConf1 | grep -q root
if [ $? -eq 0 ] ; then
		sed -i 's/^root/#root/' $FtpConf1
		echo "[ OK ] root 사용자의 접근 허용 설정을 하였습니다."
fi


egrep -v '^$|^#' $FtpConf2 | grep -q root
if [ $? -eq 0 ] ; then
		sed -i 's/^root/#root/' $FtpConf2
		echo "[ OK ] 다음번째 root 사용자의 접근 허용을 하였습니다."
fi

 

 

 

* ENV2.sh

#!/bin/bash

BASHRC=.bashrc
BASHLOGOUT=.bash_logout

cat << EOF >> $HOME/.bashrc
 
set -o vi
alias vi='/usr/bin/vim'
export EDITOR=/usr/bin/vim
export PATH=\$PATH:/root/scripts

EOF


cat << EOF >> $HOME/$BASHLOGOUT

history -c

EOF

 

 

 

* ENV3.sh

#!/bin/bash

#gcc packages
yum -q -y install gcc 
#tree
yum -q -y install tree gedit 

 

 

 

 


 

 

 

[실습 11] 네트워크 설정 점검 프로그램

 

* check_network.sh

#!/bin/bash

. functions.sh

# Variable Definitions & Initialization
IP1=172.16.xx.xxx
IP2=168.xxx.xx.x #외부 IP
IP3=www.google.com

# 1) Local Network Check
print_info "[*] ping $IP1"
ping -c 1 $IP1 >/dev/null 2>&1 # 출력내용은 필요없으니 null로
if [ $? -eq 0 ] ; then
		print_good "[ OK ] Local Network Connection"
else
		print_error "[ FAIL ] Local Network Connection"
	cat <<- EOF
	(ㄱ) VMware > Edit > Virtual Network Editor
    (ㄴ) VMware > VM > Settings > Network Adapter
    (ㄷ) # ifconfig 
	EOF
	exit 1 #비정상적으로 종료
fi


# 2) External Network Check
print_info "ping $IP2"
ping -c 1 $IP2 >/dev/null 2>&1
if [ $? -eq 0 ] ; then
		print_good "[ OK ] Local Network Connection"
else
		print_error "[ FAIL ] Local Network Connection"
		echo -e "\t(t) # netstat -nr (# route -n)"
		exit 2
fi


# 3) DNS Check
print_info "ping $IP3"
ping -c 1 $IP3 >/dev/null 2>&1
if [ $? -eq 0 ] ; then
		print_good "[ OK ] DNS Client Configuration"
else
		print_error "[ FAIL ] DNS Client Configuration"
		echo -e "\t(ㄱ) # cat /etc/resolv.conf"
		exit 3
fi







# 3) DNS Check

 

 

 


 

 

[실습12] 설치 진행과정 표시 프로그램

* install.sh

#!/bin/bash

for i in `seq 1 10`
do
        PER=$(expr $i \* 10)
        echo -ne "$PER% |"
					
        START=1
        while [ $START -le $i ]
        do
                echo -ne "=="
                START=`expr $START + 1`
        done
					
        if [ $i -ne 10 ] ; then
                echo -ne ">"
        else
                echo -ne "| \"Complete !!!\"\n"
        fi
					
        echo -ne "\r" 			 # "\n"은  다음줄    /   "\r"은  처음으로 repeat
					        
		sleep 0.5
done

 

 

 

 


 

 

 

[실습13] 백업 스크립트 + crontab

 

* 매월 2번째 주 일요일에 백업 스크립트 실행 시키도록 프로그램 제작

* home_backup.sh

 

 

#!/bin/bash

LOG=/var/log/backup.log
DAY=$(date +%d)

backup() {
echo
echo "Backup Started: $(date)" 
cd /home
tar czf /backup/home_$(date +%m%d).tar.gz . >/dev/null 2>&1
if [ $? -eq 0 ] ; then
		echo " [ OK ] Backup Suceecss!" 
else
		echo " [ FAIL ] Backup Failed"  
fi
echo "Backup Finished: $(date)"  
echo 
}


if [ $DAY -ge 2 -a $DAY -le 8 ] ; then
		echo "==> check1"
		backup >> $LOG 2>&1
fi

backup >> $LOG 2>&1

#[ $DAY -ge 2 -a $DAY -le 8 ] && backup >> $LOG 2>&1





 

 

 


 

 

 

[실습14] 중요 파일 퍼미션 점검 스크립트 제작

* check_perm.sh(perm.list)

 

 

#!/bin/bash

PermList=perm.list
ResultFile=report.txt
TMP1=/tmp/tmp1

> $ResultFile
> $TMP1


cat $PermList | while read FileName FileAuth FilePermNum FilePermChar
do
		#echo "$FileName : $FilePermNum : $FilePermChar"
		if	[ ! -f $FileName ] ; then 
				echo "[ ERROR ] $FileName not found" >> $ResultFile
				continue
		else
				find $FileName -type f -perm -$FilePermNum -ls \
				| fgrep -v $FilePermChar > $TMP1 
				if [ -s $TMP1 ] ; then
						BadPerm=$(cat $TMP1 | awk '{print $3}')
						echo "[ WARN ] $FilePermNum 이하 : $BadPerm : $FileName" >> $ResultFile
				else
						GoodPerm=$(find $FileName -type f -ls | awk '{print $3}')
						echo "[  OK  ] $FilePermNum 이하 : $GoodPerm : $FileName" >> $ResultFile
				fi
		fi
done	

 

 

* perm.list 내용

 

* check_perm.sh 실행 후 report.txt 파일 출력 내용

 


 

 

 

 

[과제] 중요 파일 퍼미션 점검 스크립트 제작

 

* /etc/passwd (root 사용자 소유, 644 이하)

* /etc/shadow (root 사용자 소유, 400 이하)

* /etc/hosts (root, 600 이하)

* /etc/xinetd.conf (root, 600 이하)

* /etc/rsyslog.conf (root, 644 이하)

* /etc/services (root, 644 이하)

 

과제 기간: 2020.10.22(목) ~ 2020.10.23(금)

과제 내용: 다음 조건을 갖는 퍼미션 점검 프로그램을 제작

이름: /root/scripts/check_perm2.sh

목적: 보안 점검(소유자/퍼미션)

 

 

 

* functions.sh 내용

function print_good () {
    echo -e "\x1B[01;32m[+]\x1B[0m $1"
}

function print_error () {
    echo -e "\x1B[01;31m[-]\x1B[0m $1"
}

function print_info () {
    echo -e "\x1B[01;34m[*]\x1B[0m $1"
}

function OK () {
    echo -e "\x1B[01;32m[ 양호 ]\x1B[0m $*"
}

function WARN () {
    echo -e "\x1B[01;31m[ 취약 ]\x1B[0m $*"
}

function INFO () {
    echo -e "\x1B[01;34m[ 정보 ]\x1B[0m $1"
}

function ERROR () {
    echo -e "\x1B[01;31m[ 애러 ]\x1B[0m $1"
}

 

 

 

* 코드1

#!/bin/bash

. /root/scripts/functions.sh


# 1) 변수 설정 및 초기화
PermList=/root/scripts/perm.list		# 점검 대상 파일 목록
Result=/root/scripts/report2.txt		# 점검 결과
TMP1=/tmp/tmp1

> $Result																	# 파일 실행 시 점검 결과 초기화
> $TMP1																		# 파일 실행 시 임시 파일 초기화

# 2) 파일 유무 점검
for ChkFile in `cat $PermList | awk '{print $1}'`
do
		if [ ! -f $ChkFile ] ; then
				echo "[ WARN ] '$ChkFile' not found."
				exit 1
				break
		fi
done


# 3) 점검 스크립트
cat $PermList | while read FName FAuth FPermNum FPermChar
do
		if [ ! -f $FName ] ; then
				echo "[ ERROR ] $FName not found" >> $Result
				echo >> $Result
				continue
		else
				find $FName -type f -perm -$FPermNum -ls | fgrep -v $FPermChar > $TMP1
				if [ -s $TMP1 ] ; then
						BadPerm=$(cat $TMP1 | awk '{print $3}')
						WARN "$FPermNum : $FName ($BadPerm)" >> $Result
				else
						GoodPerm=$(find $FName -type f -ls | awk '{print $3}')
						OK "$FPermNum : $FName ($GoodPerm)" >> $Result
				fi
		fi
done

 

 

 

 

 

* 코드 2

#!/bin/bash


. /root/scripts/functions.sh

# 1) 변수 설정 및 초기화
PermList=/root/scripts/perm.list		# 점검 대상 파일 목록
Result=/root/scripts/report3.txt		# 점검 결과
TMP1=/tmp/tmp1
TMP2=/tmp/tmp2

> $Result																	# 파일 실행 시 점검 결과 초기화
> $TMP1																		# 파일 실행 시 임시 파일 초기화
> $TMP2																		# 파일 실행 시 임시 파일 초기화



# 2) 파일 유무 점검
for ChkFile in `cat $PermList | awk '{print $1}'`
do
		if [ ! -f $ChkFile ] ; then
				echo "[ WARN ] '$ChkFile' not found."
				exit 1
				break
		fi
done



# 3) 점검 스크립트
cat $PermList | while read FName FUser FPermNum FPermChar
do
		if [ ! -f $FName ] ; then
				echo "[ ERROR ] $FName not found" >> $Result
				echo >> $Result
				continue
		else
				find $FName -type f -perm -$FPermNum -ls \
				| fgrep -v $FPermChar > $TMP1
				if [ -s $TMP1 ] ; then 
						BadPerm=$(cat $TMP1 | awk '{print $3}')
						WARN "$FPermNum : $FName ($BadPerm)" >> $Result
				else
						GoodPerm=$(find $FName -type f -ls | awk '{print $3}')
						OK "$FName permission($FPermNum 이하) : $GoodPerm" >> $Result
				fi
				find $FName -type f -user $FUser -ls > $TMP2
				if [ -s $TMP2 ] ; then
						GoodUser=$(cat $TMP2 | awk '{print $5}')
						OK "$FName owner : $GoodUser" >> $Result
											
				else
						BadUser=$(find $FName -type f -ls | awk '{print $5}')
						WARN "$FName owner : $BadUser" >> $Result
						echo >> $Result
				fi
				FileUser=$(ls -l $FName | awk '{print $3}') 
				if [ $FileUser = $FUser ] ; then
						echo "ㄴ-----> Authorized User matched." >> $Result
						echo >> $Result
				else
						echo "ㄴ-----> Authorized User does not matched." >> $Result
						echo >> $Result
				fi
		fi
done

 

 

 

 


 

 

 

 

프로젝트 : 리눅스 설치 후 필요한 기본 세팅 자동화

1. 작업 계획 세우기

ㄱ) 작업 목록 만들기

* 환경 파일 :$HOME/.bashrc

* OS 기본적인 설정 : 전원 (화면 잠금 기능 해제. 디스플레이 끄기 설정)

*폰트

*바탕화면 아이콘 생성

* etc

ㄴ) 필요한 패키지 설치

* gcc

* tree

ㄷ) 서비스 기동

* SAMBA(/share 폴더 공유해두기)

2. 작업 (스크립트 ) 수행

: 작업 목록에 있는 내용을 구현 (프로젝트)

728x90

+ Recent posts