190827

2019. 9. 2. 22:12정보보안과정/리눅스 기초

\\192.168.0.40

ID/PASS : TJ/soldesksecurity1.

모의해킹 -> 웹 쪽 주력


Typical -> I will install -> Linux -> single -> Customize hardware -> bridge방식

CD found -> skip -> 파일 초기화 하시겠습니까? -> 네

파티션 나누기 과정
-> 사용자 레이아웃 만들기(직접 나누겠다)

----------- 드라이브
/ 나머지 공간
swap 1024MB
/data1 500M
/data2 500M
/data3 500M
/data4 500M
/home 500M (최대 가능한 용량, 첫번째 파티션으로 함)

* 네트워크 설정

hostname : linux2XX.example.com
ip/netmask : 192.168.0.2XX/255.255.255.0
gateway : 192.168.0.1
dns server's ip : 168.126.63.1

자리배치도
200 201 202 203 204
205 206 207 208 209
210 211 212 213 214
215 216 217 218 219
220 221 222 223 224

server, server - GUI (체크!)

200일

root 사용자 암호 : centos
fedora 사용자 암호 : fedora

VMware Tools 프로그램 설치 -> 윈도우와 리눅스를 왔다갔다하는데 번거로움 없이 편리하게 이동하기 위해서
(굳이 ctrl+art 누를 필요 없음)
화면 상단 -> VMware Tools 클릭
1. GUI환경이 재구동 될 때 적용
2. ctrl + art + <-(백스페이스)

화면 해상도
시스템 -> 기본설정 -> 화면 해상도
글꼴
시스템 -> 설정 -> 글꼴 -> 고정폭 글꼴
아이콘 생성
gnome-terminal
gedit
shift+space -> 한/영 전환
바탕화면 우측 마우스 -> 실행 아이콘 만들기
붙여넣기 -> shift + insert

파일 관리
touch CMD
# touch -t 08301300 file1
시간이 바뀐 것을 맹목적으로 믿으면 안된다.(해커가 인위적으로 바꿨을수도 있기 때문)
cp CMD
# cp file1 file2
# cp file1 dir1
# cp -r dir1 dir2 /* -r : recursive */
OPTIONS : -r(recursive[회귀적으로]), -i, -f(force), -p, -a(rp)

inode -> 파일 속성 정보
stat file1 -> inode에 들어있는 정보를 표시
ls -li -> inode 번호 확인

cd -> change directory (디렉토리 이동)
cat file1(내용 출력)

**** ~ -> 자신의 홈폴더 라는 뜻 *****
**** . -> 현재 셸에서 실행한다! *****

export PS1(셸 프롬프트)할때 /w -> 소문자 w는 전체경로를 표시해줌!
export 적용 -> 터미널 창에서 . ~/.bashrc

-i(interactive[대화형][물어본다])

echo -> 모니터에 echo 된다
echo linux > file1 -> file1에 linux <- gedit 쓰기

alias -> 단축키 설정

-p(preserve[유지하다]) (chmod[권한설정]과 수정시간)을 기본 파일과 똑같이 유지해줌

su - fedora -> fedora로 사용자 전환

[실무예] 설정 파일 백업 받고 복구하기
# cd /etc/httpd/conf
# cp -p httpd.conf httpd.conf.old
# cp -p httpd.conf.old httpd.conf
백업할 때는 cp -p 옵션을 꼭 넣음! -> permission이 달라지면 불리해지기 때문(더 많은 권한을 주게 됨)

# cp -a /was /was.old
-a -> -i, -p가 포함
주로 디렉터리 백업할 때 사용

[실무예] 로그 파일 비우기
# cp /dev/null file.log
# cat /dev/null > file.log
# > file.log

mv CMD
# mv file1 file2 (파일 이름 바꾸기)
# mv file1 dir1 (파일 이동)
# mv dir1 dir2 (dir2 디렉토리가 없을경우 dir1 이름바꾸기, dir2가 있을경우 dir1로 이동하기)
OPTIONS : -i, -f


rm CMD
rm -r(리커시브[회귀적으로]) 하위폴더까지 삭제
rm -f(force[강제적으로]) 안물어보고 지우겠다
# rm -rf dir1
OPTIONS : -r -f -i

[실무예] rm 명령어로 지운 파일 복원
(TUI) extundelete CMD
(GUI) TestDisk Tools

파일 내용 확인 명령어
cat CMD
# cat file1 file2 > file3
# cat -n file1 (파일넘버)

cat - concatenate(순서대로)
# cat /etc/passwd | grep fedora -> fedora만 찾아서 출력

[참고] strings CMD
# strings /bin/ls (바이너리형태를 제외한 스트링형태만 출력)

more CMD
-> 페이지단위로 끊어서 보는 기능
enter -> 한줄 단위
space -> 페이지단위
/ -> 검색
q -> 나오기

# CMD | more
cat /etc/services | more
// 보통 이렇게 뒤에 | more 을 붙여서 많이 사용함.

ps -ef 서버내 전체 프로세스의 목록을 출력
# ps -ef | more

rpm -qa 서버내 설치되어있는 모든 패키지 출력

chkconfig --list -> 내 서버에 존재하는 서비스 전체목록
# chkconfig --list | more
 
netstat -an -> 네트워크 상태정보 -> tcp포트 udp 포트
# netstat -an | more

head CMD
->  상단의 10줄 정도를 보여줌.
grep -> 검색기능

ps -ef | head -1;

[실무예] pps
**** alias pps='ps -ef | head -1; ps -ef | grep $1'
(~/.bashrc[환경화일]에 넣어놔야 지속적으로 사용 가능함.)

**** alias nstate='netstat -an | head -2; netstat -an | grep :22'

tail CMD
-> 하단의 10줄 정도를 보여줌.
tail -f /var/log/messages -> 실시간으로 들어가는 정보를 모니터링 해줌
-f(file) -> 로그파일을 모니터링하고 서버를 재기동할때 사용 (서버가 재기동할때 오류가 발생시 로그에 찍어주기 때문)
[실무예] 서비스 장애시 조치 방법
[term1] # tail -f /var/log/messages
[term2] # service named restart (재기동할때)

[실무예] 서버 모니터링 방법
[term1] # tail -f /var/log/messages (# gnome-system-log)
[term2] # top (# gnome-system-monitor)

[실무예] tail -f 사용법
# tail -f /var/log/messages
# tail -f /var/log/messages | grep -i oracle
# tail -f /var/log/messages | egrep -i 'warn|error|crit|alert|emerg'

기타 관리용 명령어
wc CMD
-> 데이터 수집하는데 주로 사용
[참고] Data Gathering
# cat /etc/passwd | wc -l
# rpm -qa | wc -l
# ps -ef | grep httpd | wc -l // 웹데모 카운터 셀 때
# df -h / |  tail -1 | awk '{print $5}'|

190828
su CMD
-> 사용자 전환
# su user01
su 뒤에 생략시 root로 전환
이전에 사용했던 사용자의 환경변수가 그대로 따라옴. (현재 위치한 폴더도 그대로 따라감)
echo $PATH
$PATH 안에 sbin -> 관리자의 환경변수임.
이전 사용자의 영향을 받음.
# su - user01
환경변수가 바뀐 사용자의 환경변수로 됨.
사용자가 바뀌면 위치가 바뀐 사용자의 홈폴더로 바뀜.
마치 사용자가 아예 바뀐 것처럼 됨.

# telnet 192.168.0.200 다른 ip 접속, 다른 서버 접속

# ssh 192.168.0.200 다른 ip 접속

# ssh fedora@localhost
hostname -> id -> pwd

[실무예] Oracle 사용자로 전환하는 경우
+---------------+
| |
| Oracle SW   | oracle
| |   A
+---------------+         |
| |   | (X) # su oracle -> 오라클 사용자의 환경변수가 적용되지 않아 문제가 됨.
|   Linux OS    | root    |     (O) # su - oracle
| |
+---------------+

[실무예] su CMD & sudo CMD
* su(Switching User)
# su fedora
# su - fedora
* sudo(Superuser Do) : /etc/sudoers <- 관리자가 사용하는 어떤 기능, 프로그램을 사용자들이 관리자처럼 사용할 수있게 설정해 놓음.
-> 관리자 권한으로 어떤 명령어를 수행할 수 있게 해주는 기능
-> 권한에 제한을 둘 수 있음 (ex) 백업할 수 있는 기능만
$ sudo CMD

id CMD
# id -> groups의 첫번째 그룹 -> primary group

groups CMD

* last CMD (/var/log/wtmp)
** 시험 많이 출제 -> 로그정보가 많이 누적되기 때문에 보안상 중요함!
# last -f /var/log/wtmp.# -> 전에 달 기록 출력
# last
-> 사용자 로그인, 로그아웃, 재부팅 정보 (/var/log/wtmp)
:0 -> 콘솔로 들어간 것.

who -> 현재 어떤 사용자가 내 서버에 들어와 있나 확인
w(work) -> 무슨(what) 명령어를 하고 있는지 보여줌
w user01

# last -5 (최근 5개만 출력) (#last | head -5)

/var/log 많은 log 파일들이 존재
file wtmp -> 파일이 무슨 형태인지 확인
wtmp는 data형태라 cat으로 온전하게 보지 못함(text가 아니기 때문)
-> 따라서 last로 확인해야함
*** last는 /var/log/wtmp를 참조함!

history -> 우리가 친 명령어 기록들이 다 남음
사용자가 로그아웃 하면 기록들은 bash_history에 남음

새 터미널 -> ctrl + shift + T(Tab)
** lastb CMD (** /var/log/btmp) data형태
-> 사용자가 로그인하지못한 실패기록
lastlog CMD (/var/log/lastlog)
-> 가장 최근에 로그인한 시간, 가장 마지막에 로그인 한 시간

/etc/passwd -> 사용자에 대한 정보

tty -> 현재터미널 출력
df -h -> 디스크 사용량 출력

ps -u user01 -> user01이 사용하는 모든 것을 출력

last -> 로그인, 로그아웃정보
who -> 현재 서버에 로그인 되어있는 사용자들
w -> 로그인된 사용자들이 사용하는 명령어

who CMD(/var/log/utmp)
# w -f user01
[실무예] 모니터링 구문


exit CMD
exit

telnet -> 원격으로 서비스

vi -r(recovery[복구,백업])
append -> 추가하다

파일의 종류
일반 파일(Regular File)
디렉토리 파일(Directory File)
링크 파일(Link File)
- 하드링크 파일
# ln file1 file2
- 심볼릭 링크 파일
# ln -s file1 file2
장치 파일(Device File)
- 캐릭터 장치 파일(Character Device File)
- 블럭 장치 파일(Block Device File)

. <- 현재폴더를 포인터 하는 정보
.. <- 상위폴더를 포인터 하는 정보

파일 속성 정보 변경 명령어
chown CMD
# chown -R user01:staff dir1
chgrp CMD

chmod CMD
파일 퍼미션 변경 방법
- 심볼릭 모드(symbolic Mode) # chmod u+x file1
- 옥탈 모드 (Ocatal Mode) # chmod 755 file1

디렉토리 r(ls [안에를 읽을 수 있다])
w(안에를 생성& 삭제할 수 있다.)
x(cd [들어갈 수 있다.])

디렉토리는 x 권한이 없으면 다른 기능은 소용이 없다.
반드시 x 권한이 있어야지만 동작한다.
디렉토리로서 의미가 있으려면 1권한(x권한)이 필요하다.

파일/디렉토리 퍼미션 의미
- 파일 (r / w / x)
- 디렉토리 (r(ls CMD / w(생성/삭제) / x(cd CMD))
190829
퍼미션 적용 순서
- UID -> GID -> other

ls -lR -ld
ls -R -> 지정 디렉토리 이하에 있는 하부디렉토리 포함

umask 확인 -> /etc/bashrc

umask CMD (002 -> 022 -> 027)
- (관리자) /etc/bashrc
- (사용자) $HOME/.bashrc
특수퍼미션(SetUID, SetGID, Sticky Bit)
- 특수 퍼미션 의미
SetUID(SUID), SetGID(SGID) -> 프로그램이 실행되는 동안에만 한정
Sticky Bit
사용자 암호 : /etc/shadow에 있음
명령어 passwd가 실행될 때 ->  /usr/bin/passwd가 실행됨
# ls -ld dir1  /* dir1디렉토리의 정보를 출력 */
sticky bit -> 디렉토리를 게시판처럼
-> 내가 올린 게시물을 다른사람이 지울 수 없다는게 특징
- 특수 퍼미션 설정방법
# chmod 4755 file1
# chmod 2755 file1
# chmod 6755 file1
# chmod 1777 dir1
./ -> 현재폴더 밑에 있는
ifconfig -> interface configuration

[참고] bash 쉘에 SetUID 비트 설정 우회 방법
# vi backdoor.c
---------------
#include 
#include <sys/types.h>
#include 
main ()
{
setuid(0);
setgid(0);
system("/bin/bash");
}
----------------
# gcc -o backdoor backdoor.c
# chmod 4755 backdoor
- 특수 퍼미션 관리방법
# find / -perm -4000 -o -perm -2000
# find / -perm -4000 -o -perm -2000 > setuid.list
# chmod 755 /usr/bin/passwd
# find /home -type f -perm -4000 -exec rm -rf {} \;



vi -r(recovery[복구])

vi 환경설정 vi ~/.vimrc (vim run command)
set nu(number)
set ai(autoindent[자동 들여쓰기])
set ts=4(tabstop)

vim 편집기
$HOME/.vimrc
------------
set nu
set ai
set ts=4
------------
9장 사용자와 통신할 때 사용하는 명령어
mail/mailx CMD
# mail -s "OK: linux200" admin@example.com < report.txt

mail -s(subject[제목])
service sendmail restart

영문으로 변경 -> export LNG=C,
 export LNG=en_US.UTF-8
system-config-network-tui -> hostname 바꾸기
service network restart

talk CMD
[참고] talk-server 패키지 설치
# rpm -qa | gre[ talk
# yum -y install talk-server

[참고] 서비스 on/off 툴 종류
(GUI) # system-config-services (# serviceconf)
(TUI) # ntsysv (# setup)
(CLI) # chkconfig ntalk on|off
wall CMD

물리적 주소바꾸기
# cd /etc/sysconfig/network-scripts
# ls
ifcfg-eth0
# vi ifcfg-eth0
# poweroff
*.vmx
Power ON
root 사용자로 로그인
# ifconfig eth0

telnet localhost -> user01

wall CMD
-> 1 대 전체 통신 (관리자가 모든사용자에게 통신할 때 사용)



관리자가 알아두면 유용한 명령어 -ㅅ-
cmp/diff
cmp -> compare(비교)
# diff file1 file2
# diff -r(recursive) dir1 dir2

[실무예] 설정 파일 비교하는 경우
# diff httpd.conf httpd.conf.old

[실무예] 디렉토리 마이그레이션 이후 확인 방법(/was1/* -> /was2/*)
# diff -r(파일 하나하나씩 비교) /was1 /was2


sort CMD -> 정렬할 때 쓰는 명령어
# CMD | sort -k 3
# CMD | sort -k 3 -r

[실무예] 디스크 용량 확인
# df -k
# du -sk /var /* -s: sum, -k: KB*/
# cd /var; du -sk * | sort -nr | more
file CMD
-> 텍스트파일인지 데이터파일인지 확인
# file *


rm -rf file? (file뒤에 한글자있는거 모두 제거)

grep CMD
-> 텍스트파일 내에서 내가 원하는 패턴을 찾아줌
# grep OPTIONS PATTERN file1
OPTIONS: -l(file list[파일의 이름만 리스트해서 보여줌]), -n(numberline), -v(inverse[반대,제외하고]),
-i(ignore case [대소문자 구분안하겠다]), -w(word[단어]), --color
PATTERN: * . ^root root$ [abc] [^abc] -> 글자만 제외하고
r
# CMD | grep xinetd
# cat /etc/passwd | grep root /파일에서 검색
# rpm -qa | grep ssh
# ps -ef | grep xinetd
# chkconfig --list | grep ssh
# netstat -an | grep :22

rc?.d -> rc1.d, rc2.d, rc3.d 등등.....

[실무예] alias
# alias grep='grep -i --color' (~/.bashrc)
190830
egrep(Extended grep) CMD = grep -E
grep [123]같은 한글자 검색은 가능하지만 선택적인 word는 없음.
그래서 egrep이 등장, (grep -E도 가능함.

fgrep(Fixed[고정시키다] grep)
grep '^root' <- 라인의 처음에 오는 root로 해석
fgrep '^root' <- ''안에 있는 특수문자를 따지지 않음. 그 자체를 검색하는 것으로 사용.
암호같은경우는 특수문자가 포함되어 있는 경우가 많아서 egrep을 씀.
chkconfig --list <- 서비스 전체 목록

echo 'date'[본셸 스타일] = echo $(date) [배쉬쉘스타일]

[실무예] chklog.sh 사용방법
# vi /root/bin/chklog.sh // 관리자가 만드는거라
----------------------------------
#!/bin/bash

RE=$(date +'%b %d')
cat $1 | grep "$RE" | egrep -i --color '(warn/error/crit/alert/emerg)'
---------------------
# chmod 755 /root/bin/chklog.sh
chklog.sh /var/log/messages

wall CMD
# wall < /etc/MESS/work1.txt

ps -ef | xinetd -> 프로세스 상태가출력되는데 grep xinetd라는 명령어 실행도 프로세스 상태에
출력되어 제외시켜야함 ->  ps -ef | grep xinetd | grep -v grep (제외)
find CMD

find / -perm -755 -> 최소한 755
find / -mtime -7 -> 현재~6일전까지
find / -mtime 7 -> 7일전
find / -mtime +7 -> 8일전부터~
find / -size -300 -> 0-

mkdir -p -> 디렉토리 경로로 생성 (디렉토리를 만들 때 상위 디렉토리가 없을시 상위 디렉토리까지 생성)

[실무예] 오래된 로그 파일 지우기(30일)
# find /Log -name "*.log" -type f -mtime +30 -exec rm -f {} \;

[실무예] 갑자기 파일 시스템이 full 난 경우
# find /Log -type f -mtime -2 -size +1G
[참고] lsof(List Open File) -> 프로세서가 열고있는 파일의 목록들을 보여줌

[실무예] 기동 스크립트 실행시 에러 메시지 처리 방법
# find /source -type f -exec grep -l 'Error' {} \;

압축(Compress)과 아카이빙(Archiving[여러개의 파일을 하나로 묶는다])

* 아카이브 -> 여러개의 파일을 하나로 묶는다는 의미
압축 관련 명령어
gzip CMD
# gzip file1 (압축)
# gunzip -c(파일내용 확인) file1.gz
# gunzip file1.gz (압축해제)
압축 gzip 풀기 gzip -d
gzip -r 안에 있는 파일 하나하나를 압축
bzip2 CMD
# bzip2 file1
# bunzip2 -c file1.bz2(내용확인)
# bunzip2 file1.bz2
bzip2 -kv file2 (복사본을만들어서 압축, 원본도 보존가능)
bunzip2 -c file2 (내용확인)
xz CMD
# yum -y install xz
# xz file1
# unxz -c file1.xz
# unxz file1.xz

(압축 + 아카이브) 관련 명령어
tar CMD
# tar cvf file.tar file1 file2 (압축)
# tar tvf file.tar file1 file2 (확인)
# tar xvf file.tar file1 file2 (풀기)

# tar cvzf file.tar.gz file1 file2 (압축)
# tar tvzf file.tar.gz file1 file2 (확인)
# tar xvzf file.tar.gz file1 file2 (풀기)

# tar cvjf file.tar.bz2 file1 file2 (압축)
# tar tvjf file.tar.bz2 file1 file2 (확인)
# tar xvjf file.tar.bz2 file1 file2 (풀기)

# tar cvJf file.tar.xz file1 file2 (압축)
# tar tvJf file.tar.xz file1 file2 (확인)
# tar xvJf file.tar.xz file1 file2 (풀기)

jar CMD
# jar cvf file.jar
# jar tvf file.jar
# jar xvf file.jar

zip CMD
 -> 윈도우에 있는 툴과 호환 가능
 -> 호환성이 가장 높음
 -> 아카이빙과 압축을 동시에 수행.
# zip file.zip file1 file2
# unzip -l file.zip
# unzip file.zip
 
 du -sh -> 용량확인
 
[실무예] 인터넷 상에서 받은 파일의 확장자에 따라 압축 해제하기
file.tar.gz : tar xvzf file.tar.gz
file.tar.bz2 : tar xvjf file.tar.bz2
file.tar.xz : tar xvJf file.tar.xz
file.zip : unzip file.zip
file.jar : jar xvf file.jar

쉘의 특성
리다이렉션
(direction) -> 화살표
redirection -> 화살표를 되돌리다 -> 방향재지정
fd(File Description) -> 파일을 열 때 구분하는 번호
표준입력,표준출력,표준제어 ->

cat < /etc/passwd -> 파일의 내용을 입력받아라

fd
-----------------
0 stdin
1 stdout
2 stderr
-----------------

입력 리다이렉션(Redirection Stdin)
# mail -s "Server OK" admin@example.com < report.txt
# wall < /etc/MESS/work.txt(키보드에서 입력받을 걸 대신해서 파일에서 받겠다)

출력 리다이렉션(Redirection Stdout)
# ls -l > file.txt
에러 리다이렉션(Redirection Stderr)

[실무예]
# mail -s "Server OK" admin@example.com < report.txt
# ./script.sh > script.log 2>&1
# ./configure --prefix=/usr/local/apache2 >apache.log 2>&1
$ find / -name core -type f 2>/dev/null



nslookup
파이프
쉘 기능
변수
메타 캐릭터
히스토리
환경파일

'정보보안과정 > 리눅스 기초' 카테고리의 다른 글

15장 원격접속과 파일접속  (0) 2019.09.04
14장 프로세스 관리  (0) 2019.09.03
쉘특성  (0) 2019.09.02