* 실습 리스트 *
[실습 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. 작업 (스크립트 ) 수행
: 작업 목록에 있는 내용을 구현 (프로젝트)
'정보보안공부 > 정보보안전문과정' 카테고리의 다른 글
정보보안 과정 Day41 : 모의해킹 실습환경 구축 (1) | 2020.11.20 |
---|---|
정보보안 과정 Day 35~40 : RHCSA 시험 준비 (0) | 2020.11.03 |
정보보안 과정 Day32 : 쉘 프로그래밍 실습 2 (0) | 2020.10.21 |
정보보안 과정 Day31 : 쉘 프로그래밍 실습 (0) | 2020.10.20 |
정보보안 과정 Day30 : 쉘 스크립트 (1) | 2020.10.19 |