*실습 리스트*
[실습6] 보고서 내용 중 일부를 추출하는 프로그램
* check_report.sh
[실습7] 중요한 파일의 변경 상태 확인 프로그램
* check_file.sh
* check_file2.sh
[실습8] 파일 자동 업로드/다운로드, 원격 명령어 자동 실행
* auto_ftp.sh
* auto_ftp2.sh
* auto_telnet.sh
* auto_telnet2.sh
* auto_telnet_ftp.sh
* auto_ftp_windows.sh
[실습9] 파일 확장자 자동 변환 프로그램
* move_filename.sh
* move_filename2.sh
* move_filename3.sh
[실습6] 보고서 내용 중 일부를 추출하는 프로그램
* check_report.sh
#!/bin/bash
#./check_report.sh U-1
#sed -n '/U-1/,/U-2/p' report.txt
if [ $# -ne 1 ] ; then
echo "Usage: $0 <U-#>"
fi
RepFile=report.txt
RepNum=$1
Num1=`echo $RepNum | awk -F- '{print $2}'`
Nume2=`expr $Num1 + 1`
#echo "$Num1 : $Num2"
sed -n "/U-$Num1/,/U-$Num2/p" $RepFile | grep -v "U-$Num2"
#안에 변수를 넣을땐 싱글이 아닌 더블쿼트로 묶어줘야 한다.
[실습7] 중요한 파일의 변경 상태 확인 프로그램
* check_file.sh
#!/bin/bash
# # crontab -e
# Min Hour Day Mon Week CMD
# 0 8 * * * /root/shell/check_file.sh
#
# # cat /root/shell/test/.mail_contents_OK.txt
# Have a Good Day !!!!!
#
# # cat /root/shell/test/file_list.txt
# /etc/passwd
# /etc/group
# /etc/hosts
# .....
F_LIST=/root/shell/test/file_list.txt # 점검할 파일 목록
T_FILE=/var/tmp/.tmp1 # 임시파일
F_RESULT=/root/shell/test/result.`date +'%m%d'` # 결과 리포트 파일
EMAIL=root # 결과를 받을 이메일 주소
cp /dev/null $F_RESULT # 결과 파일 초기화 작업
for F_NAME in `cat $F_LIST` # 점검해야 하는 파일 목록 읽기
do
#echo $F_NAME ; read
if [ -f $F_NAME.orig ] ; then # 백업파일 존재 유무 확인
diff $F_NAME $F_NAME.orig > $T_FILE # 원본파일<-->백업파일 비교
# echo "==> check2" ; read
if [ -s $T_FILE ] ; then
echo "$F_NAME [ WARN ]" >> $F_RESULT
else
echo "$F_NAME [ OK ]" >> $F_RESULT
fi
# echo "==>check3" ; read
else
# echo "==> check1"
/bin/cp $F_NAME $F_NAME.orig
fi
# echo "==> check4" ; read
done
if /bin/grep WARN $F_RESULT > /dev/null 2>&1 ; then
# mailx -s "Critical Satus. Check Files" $EMAIL < $F_RESULT
echo "WARNING"
else
# mailx -s "OK" $EMAIL < $F_RESULT
echo "OK"
fi
# rm T_FILE # tempory file delete
# 불필요한 부분 한번에 삭제하고 싶을때
#fgrep "==>" /root/scripts/check_file.sh
#fgrep -v 옵션으로 배제시키기
* check_file2.sh
#!/bin/bash
# 변수 설정 및 초기화
FileList=/root/scripts/work/file.list
WorkDir=/root/scripts/work/backup
ResultFile=/root/scripts/work/results.txt
TMP1=/tmp/tmp1
TMP2=/tmp/tmp2
Email=root
> $ResultFile # 레포트 파일 매번 초기화 작업
# 1.중요 파일의 변경 상태 확인 후 result 파일 생성
# ㄱ) 파일 이름을 하나씩 받는다
# ㄴ) 백업 파일이 없으면 백업을 한다
# ㄷ) 백업 파일이 있으면 비교한다
# ㄹ) 비교된 내용을 result 파일에 넣는다.
# ㅁ) 한번 돌려보고 vi backup/passwd 들어가서 강제로 다른 부분 만들어 주고 다시 한번 돌린뒤 디른점 비교 (cat result_1021.txt)
for File in `cat $FileList`
do
#echo $File
FileName=`basename $File` # basename 커맨드는 줄의 마지막을 불러옴
BackupFile=$WorkDir/$FileName
if [ ! -f $BackupFile ] ; then # 파일이 존재하지 않는다면
/bin/cp $File $WorkDir/$FileName #파일은 만들고
else #존재하는 경우
diff $File $BackupFile > $TMP1
if [ -s $TMP1 ] ; then
echo "[ WARN ] $File" >> $ResultFile
else
echo "[ OK ] $File" >> $ResultFile
fi
fi
done
# 2.result 파일을 메일로 관리자에게 전송
# ㄱ) result 파일내에 WARN 단어가 들어 있으면 관리자에게 다음과 같이 메일 전송
# # mailx -s " [ WARN ] File is not OK." $Email < $ResultFile
# ㄴ) result 파일내에 WARN 단어가 없으면 관리자에게 다음과 같이 메일 전송
# # mailx -s " [ OK ] File is OK." $Email < $ResultFile
/bin/grep -w WARN $ResultFile > $TMP2 2>&1 # -w 별도의 word로 되어있을 경우
if [ $? -eq 0 ] ; then
mailx -s " [ WARN ] File is not OK." $Email < $TMP2
for CheckFile in `cat $TMP2 | awk '{print $4}'`
do
BackupFile2=$WorkDir/`basename $CheckFile`
CheckBackupFile=$WorkDir/`basename $CheckFile`.`date +%m%d_%H%M%S`
/bin/cp -p $BackupFile2 $CheckBackupFile
/bin/cp -p $CheckFile $BackupFile2
done
else
[ -f $ResultFile ] && date | mailx -s "[ OK ] File is OK." $Email < $ResultFile
fi
[실습8] 파일 자동 업로드/다운로드, 원격 명령어 자동 실행
* auto_ftp.sh
#!/bin/bash
ftp -n 127.0.0.1 21 << EOF #here documentation명령어에 입력값으로 넣어 키보드로 치는걸 대신한다
user root soldesk1.
cd /tmp
lcd /test
bin
hash
prompt
mput testfile.txt
quit
EOF
* auto_ftp2.sh
#!/bin/bash
ServerListFile=/root/scripts/server.txt
for ServerIP in `cat $ServerListFile`
do
#echo $ServerIP
ftp -n $ServerIP 21 <<- EOF
user root soldesk1.
cd /tmp
lcd /test
bin
hash
prompt
mput linux211.txt
quit
EOF
done
* auto_telnet.sh
#!/bin/bash
cmd() {
sleep 2 ; echo 'user01'
sleep 1 ; echo 'user01'
sleep 1 ; echo 'hostname'
sleep 1 ; echo 'exit'
}
cmd | telnet localhost # 앞서 입력한 것들이 파이프 다음에 있는 곳으로 들어간다
* auto_telnet2.sh
#!/bin/bash
ServerListFile=/root/scripts/server.list
cat $ServerListFile | while read IP ID PASS
do
cmd () {
sleep 2 ; echo "$ID"
sleep 1 ; echo "$PASS"
sleep 1 ; echo 'hostname'
sleep 1 ; echo 'exit'
}
cmd | telnet $IP
done
* auto_telnet_ftp.sh
#!/bin/bash
IP=172.16.6.249
ID='root'
PASS='soldesk1.'
cmd() {
sleep 2; echo "$ID"
sleep 1; echo "$PASS"
sleep 1; echo "tar cvzf /tmp/linux249.tar.gz /home"
sleep 1; echo "exit"
}
cmd | telnet $IP
ftp -n $IP << EOF
user $ID $PASS
cd /tmp
lcd /root
bin
hash
prompt
mget linux249.tar.gz
quit
EOF
ls -lh /root/linux*
* auto_ftp_windows.sh
#!/bin/bash
IP=172.16.6.xx
PORT=21
ID=user1
PASS=user1
ftp -n $IP $PORT << EOF
user $ID $PASS
lcd /test
cd test
bin
hash
prompt
put linux211.txt
bye
EOF
[실습9] 파일 확장자 자동 변환 프로그램
* move_filename.sh
#!/bin/bash
WorkDir=/test
TMP1=/tmp/tmp1
ls -1 $WorkDir | grep '.txt$' > $TMP1
for FileName in `cat $TMP1`
do
mv $WorkDir/$FileName $(echo $WorkDir/$FileName | sed 's/.txt$/.els/')
done
* move_filename2.sh
#!/bin/bash
if [ $# -ne 1 ] ; then
echo "Usage: $0 <Directory>"
exit 1
fi
WorkDir=$1
TMP1=/tmp/tmp1
SrtExt='els'
DstExt='txt'
ls -1 $WorkDir | grep "${SrtExt}$" > $TMP1
for FileName in `cat $TMP1`
do
mv $WorkDir/$FileName $(echo $WorkDir/$FileName \
| sed "s/.${SrtExt}$/.${DstExt}/")
done
* move_filename3.sh
#!/bin/bash
if [ $# -ne 3 ] ; then
echo "Usage: $0 <Directory> <SrcExt> <DstExt>"
exit 1
fi
WorkDir=$1
SrcExt=$2
DstExt=$3
TMP1=/tmp/tmp1
ls -1 $WorkDir | grep "${SrcExt}$" > $TMP1
for FileName in `cat $TMP1`
do
mv $WorkDir/$FileName $(echo $WorkDir/$FileName \
| sed "s/.${SrcExt}$/.${DstExt}/")
done
728x90
'정보보안공부 > 정보보안전문과정' 카테고리의 다른 글
정보보안 과정 Day 35~40 : RHCSA 시험 준비 (0) | 2020.11.03 |
---|---|
정보보안 과정 Day33~34 : 쉘 프로그래밍 실습 3,4 (0) | 2020.10.23 |
정보보안 과정 Day31 : 쉘 프로그래밍 실습 (0) | 2020.10.20 |
정보보안 과정 Day30 : 쉘 스크립트 (1) | 2020.10.19 |
정보보안 과정 Day28+29 : 웹 서버 FTP 서버 구축, bash shell script (0) | 2020.10.16 |