2015. 4. 23. 14:27 :: 시스템 보안
[Message] gdb를 이용한 버퍼 오버플로우 실습3

http//pwnable.kr/?p=probs 사이트에 있는 bof[PT5] 문제를 풀이합니다.

실행환경은 칼리리눅스입니다.

 

1. 소스코드 실행

1) 다운로드

위 사이트에 접속하여 bof PT5 실행파일을 다운로드합니다.

 

2) 스택고정

랜덤스택을 disable하기 위해 아래와 같은 명령어를 입력합니다.

- echo 0 > /proc/sys/kernel/randomize_va_space

 

3) GDB 실행

-q 옵션을 이용하여 gdb를 실행합니다.

- set disassembly-flavor intel 옵션을 이용하여 인텔 문법으로 설정하고 main을 살펴봅니다.

main함수에 브레이크를 걸고 실행을 한번 해야 함수명들이 보입니다.

 

main함수

main함수에서는  <func> 함수와 인자값으로 들어가는 0xdeadbeef 변수가 보입니다.

 

func함수

 

 

2. 분석

1) main

main에서는 복잡한 내용없이 0xdeafbeef를 인자로 넣고 func 함수를 실행합니다.

 

1) func

<puts>

func 함수에서 첫번째 호출되는 함수는 <puts> 함수입니다.

 

들어가는 매개변수를 확인해보면 "overflow me : " 라고 되어있습니다.

 

<gets>

func함수에서 두번째 호출되는 함수는 <gets> 함수입니다.

[ebp-0x2c] 버퍼에 gets로 받은 값을 저장합니다.

 

<비교구문>

cmp를 이용하여 [ebp+0x08], 즉 함수의 첫번째 전달인자와 0xcafebabe를 비교합니다.

첫번째 인자는 0xdeadbeef이므로, 값을 변경하지 않는이상 <func_63>으로 점프합니다.

점프후에 0x800007a3값을 출력하고 끝냅니다.

해당 값은 아래와 같습니다.

만약 값이 0xcafebabe일 경우, system 함수를 호출하고 종료하게됩니다.

 system 함수에 들어가는 인자는 아래와 같습니다.

 

 

3. 풀이방법

0xdeedbeef 값을 0xcafebabe로 바꿔야 하므로,

입력하는 버퍼를 이용하여 RETN 아래에 위치한 매개변수를 0xcafebabe로 덮어쓰면 됩니다. (아래그림 참고)

따라서 쓰레기값 문자열 "A"를 52개를 넣고, 끝부분에 "0xcafebabe"를 넣습니다.

4. 0xdeadbeef 덮어쓰기

1) 사용할 코드

파이썬으로 "A"문자열 52개를 만들고, 뒷부분에 "0xcafebabe"를 입력합니다.

argvs가 인자가 아니므로, 파이프라인으로 bof파일에 입력값을 넣어줍니다.

(python -c 'print "A"*52 + "\xbe\xba\xfe\xca"' ; cat) | ./bof

 

2) 실행결과

 

 

posted by Red_Message
2015. 4. 23. 09:14 :: 시스템 보안

gdb를 이용한 버퍼 오버플로우 실습2

버퍼공간이 작을 때 우회하는 방법으로 버퍼오버플로우를 실습합니다.

1. 소스코드 작성

1) 소스코드 작성

아래와 같은 간단한 소스코드를 작성합니다. 지난번 실습과 다른점은 버퍼의 크기가 4밖에 되지 않습니다.

 

2) 컴파일

아래와 같은 옵션으로 컴파일을 수행합니다.

-fno-stack-protector : 스택 보호 기법 해제

-mpreferred-stack-boundary=2 : 스택 더미 없애기

-z execstack : 스택 메모리에 실행권한 부여

 

3) 스택고정

랜덤스택을 disable하기 위해 아래와 같은 명령어를 입력합니다.

- echo 0 > /proc/sys/kernel/randomize_va_space

 

2. 풀이방법

버퍼공간이 4byte밖에 되지 않기때문에 리턴값이 들어있는 주소 아래에

쉘코드를 삽입하여 실행시키는 방법으로 진행합니다.

NOP이 추가되는 이유는 시스템마다 주소가 조금씩 바뀔 수 있으므로 NOP코드를 추가하여

쉘코드 주변의 NOP코드로 점프하게 될 경우 쉘코드를 실행시킬 수 있도록 만들기 위해서입니다.

 

3. gdb 실행

 -q 옵션을 이용하여 gdb를 실행합니다.

- set disassembly-flavor intel 옵션을 이용하여 인텔 문법으로 설정하고 main을 살펴봅니다.

 

4. NOP코드가 끝나고 쉘코드가 들어가는 주소 얻기

ebp 주소값을 얻어내기 위해 main+3으로 브레이크 포인트를 걸고,

argv의 인자로 "AAAAAAAATEST"를 넣어줍니다.

ebp의 값이 "0xbffff4e8"이므로 "0xbffff4ec"에 RET값이 들어가며,

"0xbffff3d0"에 NOP코드가 들어갑니다. (NOP코드는 길어져도 상관없습니다)

따라서 쉘코드가 들어가는 주소는 NOP코드의 시작주소부터 "0xbffff3d4" 사이에 들어가면 됩니다.

 

5. RET를 덮어쓰기

1) 사용할 쉘코드

구글링을 이용하여 사용할 쉘코드를 얻습니다. 저는 아래와같은 코드를 사용했습니다.

"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"

 

2) 실행

실행하기 위해 아래와 같은 명령어를 입력합니다.

r $(python -c 'print "AAAAAAAA" + "RET주소" + "NOP코드" + "쉘코드""')

RET주소 : NOP코드가 끝나고 쉘코드가 들어가는 주소

NOP코드 :  "\x90\x90\x90\x90"

쉘코드 : "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"

 

3) 결과 확인

리턴값을 조작하여 buffer에 입력된 쉘코드의 주소를 넣어주었고, 코드가 실행되면서 쉘(하단의 '#')을 얻게됩니다.

만약 segmentation fault가 나오는 경우, buffer의 주소를 잘못입력했거나, 쉘코드가 잘못 입력되었을 가능성이 있습니다.

 

얻어낸 쉘을 이용하여 명령어를 입력해봅니다.

 

posted by Red_Message
2015. 4. 22. 12:54 :: 시스템 보안

gdb를 이용한 버퍼 오버플로우 실습

칼리리눅스로 간단한 소스코드를 이용한 버퍼오버플로우를 실습합니다. 

 

1. 소스코드 작성

1) 소스코드 작성

아래와 같은 간단한 소스코드를 작성합니다.

 

2) 컴파일

아래와 같은 옵션으로 컴파일을 수행합니다.

-fno-stack-protector : 스택 보호 기법 해제

-mpreferred-stack-boundary=2 : 스택 더미 없애기

-z execstack : 스택 메모리에 실행권한 부여

 

3) 스택고정

랜덤스택을 disable하기 위해 아래와 같은 명령어를 입력합니다.

 

2. 풀이방법

버퍼에 쉘코드를 넣고, RETN에 buffer의 시작주소를 입력합니다.

변경된 RETN주소는 pop 되면서 버퍼주소로 이동하게 되며,

쉘코드가 실행되면 쉘을 획득할 수 있습니다.

3. gdb 실행

 -q 옵션을 이용하여 gdb를 실행합니다.

- set disassembly-flavor intel 옵션을 이용하여 인텔 문법으로 설정하고 main을 살펴봅니다.

 

 

4. buffer 시작 주소 얻기

buffer 시작주소를 얻기 위해 main+30에 브레이크 포인트를 걸고 eax값을 얻습니다.

여기서 eax값은 strcpy함수를 call 하기 위해 넣어주는 buffer의 주소입니다.

 

1) 브레이크 포인트 걸고 실행

 

2) eax 값 알아내기

레지스터 정보를 출력하는 info register 명령어로 eax의 값을 알아냅니다.

 

5. RET를 덮어쓰기

1) 사용할 쉘코드

구글링을 이용하여 사용할 쉘코드를 얻습니다. 저는 아래와같은 코드를 사용했습니다.

"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"

 

2) 실행

RET 값을 덮어쓰기 위해 아래와 같은 명령어 입력해야합니다.

명령어가 길지만 뜯어보면 [ 쉘코드 + A x 236 + buffer주소 ] 입니다.

buffer 주소값은 거꾸로 적어주어야 합니다.

파이썬을 사용한 이유는 A*236개를 쉽게 입력하기 위해 사용한겁니다.

r $(python -c 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" + "A"*236 + "\xe8\xf2\xff\xbf"')

 

3) 결과 확인

리턴값을 조작하여 buffer에 입력된 쉘코드의 주소를 넣어주었고, 코드가 실행되면서 쉘(하단의 '#')을 얻게됩니다.

만약 segmentation fault가 나오는 경우, buffer의 주소를 잘못입력했거나, 쉘코드가 잘못 입력되었을 가능성이 있습니다.

 

얻어낸 쉘을 이용하여 명령어를 실행시킵니다.

 

 

posted by Red_Message
2015. 4. 21. 14:37 :: 시스템 보안

gdb 다루기

칼리리눅스를 이용하여 어셈블리어 실습을 위한 gdb 실습을 해보겠습니다.

 

1. 실행방법

1) 테스트 프로그램 example.c 작성

두개의 정수를 합쳐수는 함수가 포함된 간단한 프로그램을 작성합니다.

 

2) 옵션을 사용하여 컴파일

stack-protector 를 없애지 않고 컴파일 할 경우 실습하는데 어려움이 있을 수 있습니다.

 

3) gdb 실행

- q : gdb 실행하면서 프린트되는 설명 생략

 

 

2. 어셈블리어 코드 보기

- set disassembly-flavor intel : AT&T 어셈블리어 명령어를 Intel 어셈블리어 명령어로 변경

 

 

3. 브레이크 포인트

1) 브레이크포인트 명령어

- b func

- b *func+5

- b *0x8040000

- info break : 현재 걸려 있는 모든 break 포인트 확인

- delete : 브레이크포인트 모두 지우기

 

     2) 진행명령어

- r : 프로그램을 수행한다.

- kill : 프로그램 종료

- si : 다음 인스트럭션 실행, 만약 함수라면 안으로 진입

- ni : 다음 인스트럭션 실행, 함수 안으로 진입하지 않는다.

- c : 다음 브레이크 포인트로 진행

 

3) main함수에 브레이크 포인트 걸고 실제 확인

 

 

4. 메모리검사

1) 진행명령어

- x/"범위""출력형식""범위의단위" "메모리주소 또는 함수명"

- 출력형식 : x (16진수), s (문자열), I (명령어)

- 범위의단위 : b (1byte), h(2byte), w(4byte), g(8byte)

 

2) 실행예제

ex) x/20wx $esp : esp가 가리키는 메모리부터 높은 주소쪽으로 4byte 씩 20개 출력

 

 

 

 

posted by Red_Message
2015. 4. 15. 13:41 :: 운영체제

Solaris 10 IP 주소 수동 설정하기

솔라리스에서 IP를 수동설정 하는데 사용되는 파일은 아래와 같습니다.

- /etc/hosts

- /etc/hostname.[장치명]

- /etc/resolv.conf

- /etc/nsswitch.conf

- /etc/netmasks

- /etc/nodename

위의 6개 파일을 이용하여 IP 수동 설정을 할 수 있습니다.

 

1. /etc/hosts

해당 파일에 수동으로 설정할 IP주소와 호스트명을 입력합니다.

아래의 경우는 IP주소는 192.168.10.10, 호스트명은 Client1으로 입력했습니다.

 

2. /etc/hostname.[장치명]

사용할 장치(ifconfig에서 장치명 확인)에 위에서 설정한 IP주소 또는 호스트명을 입력합니다.

 

3. /etc/resolv.conf

해당 파일에 DNS서버의 IP주소를 입력합니다.

 

4. /etc/nsswitch.conf

해당파일의 hosts 옆에 dns를 입력합니다.

 

5. /etc/ntmasks

해당파일에 네트워크 주소와 서브넷 마스크를 입력합니다.

 

6. /etc/nodename

해당파일에 호스트명을 입력합니다.

 

7. 서비스 재시작

값을 적용하기 위해 아래와 같이 서비스를 재시작합니다.

 

8. ifconfig 체크 및 디폴트 라우터와의 통신 확인

입력한 값이 적용되었는지 확인하고 ping 테스트를 수행합니다.

 

 

 

 

 

posted by Red_Message
2015. 4. 3. 13:20 :: 운영체제

확장권한(Permission)

파일과 디렉토리의 권한을 확인하다 보면 때때로 일반적인 읽기(r), 쓰기(w), 실행(x) 권한 이외의

다른 문자가 부여되어 다른 권한의 파일이나 디렉토리를 확인할 수 있습니다.

아래와 같이 사용자 필드에 실행 권한(x) 대신 (s) 권한이 있습니다. 이를 setuid(set user id)라고 부릅니다.

- r w s r w x r w x

 

아래와 같이 사용자 그룹 필드에 실행 권한 대신 (s) 권한이 있습니다. 이는 setgid(set group id)라고 합니다.

- r w x r w s r w x

 

아래와 같이 기타 사용자 필드에 실행 권한 대신 t 권한이 있습니다. 이는 sticky bit라고 합니다.

 - r w x r w x r w t

 

 

1. 확장 권한(Permission)의 표기법

읽기(r), 쓰기(w), 실행(x) 권한을 8진수 표기법(Octal Mode)으로 읽기는 4, 쓰기는 2, 실행은 1로 표기하듯이

확장 권한 역시 8진수 표기법으로 setuid는 4000, setgid는 2000, sticky bit는 1000으로 표기합니다.

 

1) setuid 표기법

setuid는 사용자의 실행(x) 권한을 포함하는 권한입니다.

일반적인 권한 8진수 표기법이 777일때,

setuid의 8진수 4000을 더해서 4777로 표현할 수 있습니다.

 

2) setgid 표기법

setgid는 사용자 그룹의 실행(x) 권한을 포함하는 권한입니다.

일반적인 권한 8진수 표기법이 777일때,

setgid의 8진수 2000을 더해서 2777로 표현할 수 있습니다.

 

3) sticky bit 표기법

sticky bit는 사용자의 실행(x) 권한을 포함하는 권한입니다.

일반적인 권한 8진수 표기법이 777일때,

sticky bit의 8진수 1000을 더해서 1777로 표현할 수 있습니다.

 

     4) 확장권한 표기법 예제

    

 

2. 확장 권한의 변경

확장 권한이나 일반 권한은 chmod 명령을 사용하여 변경합니다.

 

1) 심볼릭모드 설정

 

2) 8진수 모드로 설정

 

3) 다른 확장 권한 형태

setuid는 대문자 S, setGid는 대문자 I, sticky bit는 대문자 T로 표기가 되어 있는것을 볼 수 있습니다.

이것은 실행(x) 권한이 없는 확장 권한을 나타냅니다.

 

3. 확장 권한의 의미

1) setuid 의미

만약 어떤 파일에 setuid가 설정되어 있다면, 그 파일의 사용자 이외의 모든 사용자가

파일을 실행할 때 마치 파일의 사용자인 것처럼 파일을 실행하게 됩니다.

즉, 파일을 실행할 때 사용자 자신의 고유 UID를 사용하는 것이 아니라

파일의 inode 정보로부터 파일 사용자의 UID를 받아서 파일을 실행하게 됩니다.

 

2) setgid 의미

setuid와 비슷하게 파일에 setgid가 설정되어 있다면, 파일을 실행할 때 마치 파일의

사용자 그룹인 것처럼 파일을 실행하게 됩니다. 즉, 사용자의 GID가 아닌 파일의

inode정보로부터 파일 사용자그룹의 GID로 파일을 실행하게 됩니다.

 

3) sticky bit 의미

sticky bit는 해당 파일이나 디렉토리에 설정되어 있으면 쓰기(w) 권한이 있다고 하더라도

파일의 사용자 이외에 삭제가 불가능합니다. 이는 흡사 인터넷에 공개된 게시판과도 유사합니다.

누구나 글쓰기를 허용하되, 글의 삭제는 관리자와 글을 쓴 사용자만이 삭제할 수 있도록

하는 것입니다. 디렉토리에 sticky bit를 사용하면 임시 작업 공유를 위ㅐ서나 프로젝트를 진행할 때에도

유용하게 사용할 수 있습니다.  

 

 

# 참고서적 : 유닉스 관리자를 위한 엔터프라이즈 솔라리스 핵심 운영 가이드2 / 김석, 박찬주, 장성균 공저

 

posted by Red_Message
2015. 4. 3. 09:41 :: 운영체제

Client에서 보조 DNS 설정하기

서버에서 설정한 DNS 정보를 Client에서 가져와 사용하는 방법입니다.

 

 1. /etc/named.conf 파일 생성 및 유효성 체크

 

2. /var/named 폴더 생성

 

3. 서비스 실행 확인

 

4. 서비스가 구동되면 자동으로 파일이 생성됨 (서버와 동일한 내용으로)

 

posted by Red_Message
2015. 4. 3. 09:00 :: 운영체제

NFS 분산 파일시스템

솔라리스는 원격 파일 공유를 지원하며, 이러한 파일 리소스는 사용자에게 로컬 파일과

디렉토리인 것처럼 제공해 줍니다. 솔라리스에서 지원하는 분산 파일 시스템은 NFS 입니다.

NFS의 환경의 구성요소는 다음과 같습니다.

- NFS 서버

- NFS 클라이언트

솔라리스 10에서는 디렉토리를 공유하거나 공유된 파일에 접근하기 위해 NFSv4를 사용합니다.

NFS 클라이언트가 NFS 서버에 접근할 때 NFS의 버전을 확인합니다. 만약에

클라이언트와 서버 모두 솔라리스 10이라면 기본적으로 NFSv4를 사용합니다.

 

1. NFS 서버 관리

NFS 서버를 활성화 시키기 위해서 몇가지 파일이 필요합니다. 아래 표는 NFS 서버에 필요한 파일들과

그에 따른 기능입니다.

1) /etc/dfs/dfstab 파일

/etc/dfs/dfstab 파일은 로컬 디렉토리를 공유하는 명령을 포함합니다.

dfstab 파일의 각 라인 마다 share 명령으로 구성되며, 읽어지는 경우는 아래와 같습니다.

- 시스템이 multi-user-server milestone 부팅 때,

- 관리자가 shareall 명령을 실행할 때

- svc:/network/nfs/server 서비스 활성화 시

하지만 위 파일과 같이 어떠한 share 명령어가 없다면 NFS 서버 데몬이 시작되지 않습니다.

 

2) /etc/dfs/sharetab 파일

sharetab 파일은 share 명령의 결과를 저장하고 있는 파일입니다. 이 파일은 현재 공유되고 있는

로컬 리소스의 목록을 포함하고 있습니다.

 

2. NFS 서버 데몬

NFS 서버를 활성화시키기 위해 몇 가지 데몬이 필요합니다. 이러한 데몬은

NFS 클라이언트, NFS 서버, NFS 서버 로깅에 필요한 데몬입니다.

NFS 서버 데몬을 시작하거나 NFSD 데몬에 의해 처리될 수 있는 동시 NFS 요청 수를 지정하려면

svc:/network/nfs/server 서비스를 활성화합니다.

 

3. NFS 서버 데몬 관리

NFS 데몬은 시스템의 런 레벨이 변경될 때 조건적으로 시작되거나,

수동으로 svc:/network/nfs/server 서비스를 활성화 할 때 시작하게 됩니다.

1) NFS 서버 데몬 시작

svc:/network/nfs/server 서비스는 시스템의 런 레벨이 3으로 될 때 NFS 데몬이 시작됩니다.

NFS 서버 데몬을 수동으로 시작시키기 위ㅐ서는 share 명령으로 /etc/dfs/dfstab 파일에

공유 디렉토리를 추가하 뒤 아래의 명령으로 NFS 명령어를 활성화 시켜야 합니다.

- svcadm enable svc:/network/nfs/server

2) NFS 서버 데몬 정지

기본적으로 NFS 서버 데몬은 multi-user-server milestone을 벗어날 때 SMF에 의해 정지됩니다.

수동으로 정지시키기 위해서 아래와 같이 명령어를 입력합니다.

- svcadm disable svc:/network/nfs/server

 

4. NFS 서버 명령

아래 표는 NFS 서버를 관리하는데 필요한 명령입니다.

 

5. 리소스 공유를 위한 NFS 서버 구성

1) NFS 마운트

mountd와 nfsd 데몬이 실행중일 때, share 명령을 사용하여 파일 리소스를 공유할 수 있습니다.

다음은 share 명령의 옵션입니다.

아래는 위 옵션을 이용하여 /Desktop/share 디렉토리를 만들고 읽기 전용으로 공유하는 예제입니다.

share 명령을 아무런 옵션 없이 사용할 경우 현재 공유된 모든 파일 리소스들의 목록을 보여 줍니다.

위에서 사용된 -o 옵션은 아래와 같은 옵션을 가집니다.

이를 이용하여 userB가 NFS 마운트 리소스에 대해 관리자 권한으로 접근할 수 있도록 설정해보겠습니다.

2) NFS 마운트 해제

unshare 명령을 사용하여 파일 리소스들을 마운트할 수 없도록 해제 할 수 있습니다.

이 unshare명령은 /etc/dfs/sharetab 파일을 읽어서 실행 합니다.

3) 모든 NFS 리소스 공유 해제

shareall 명령이나 unshareall 명령을 사용하여 모든 NFS 리소스를 공유하거나 해제할 수 있습니다.

shareall 명령을 아무런 옵션 없이 사용할 때, /etc/dfs/dfstab 파일을 참조하여

dfstab 파일에 등록된 모든 리소스를 공유하게 됩니다.

unshareall 명령도 마찬가지로 /etc/dfs/dfstab 파일을 참조합니다.

아래 예제는 share1, share2 디렉토리를 dfstab 파일에 등록해놓고, shareall, unshareall을 사용한 예제입니다.

 

# 참고서적 : 유닉스 관리자를 위한 엔터프라이즈 솔라리스 핵심 운영 가이드2 / 김석, 박찬주, 장성균 공저

 

 

posted by Red_Message
2015. 4. 2. 13:50 :: 운영체제

DNS (Domain Name System)

도메인 주소를 입력했을 때 IP주소를 알려주는 서비스를 제공하는 시스템

 

1. DNS 처리과정

1. DNS-Cache 테이블 조회

2. 내가 설정 DNS 서버에게 질문

3. 질문을 받은 DNS 서버는 자신의 Zone 영역에서 해당 내용을 찾아보고 있으면 '권한 있는 응답'으로 알려준다.

    없으면 Root Hint 서버에게 Top-Level 도메인의 주소를 물어봄

4. Top-Level 도메인은 Second-Level 도메인의 주소를 알려준다

5. 알아온 호스트 이름의 주소를 '권한 없는 응답'으로 클라이언트 에게 알려준다.

 

3. DNS 서버 구축

명령어 : dhcpconfig -D -p /var/dhcp -r SUNWfiles

-D : DHCP 서비스

-p : 리소스 저장경로

-r : 리소스 파일

 

3. 파일생성

1. /var/named.conf 생성

- 디렉토리 설정 : directory "/var/named"

- 접속 허용할 IP 주소 or 네트워크 주소 : allow-transfer { 192.168.10. 11; };

- 설정할 주소 이름 : abc.com

- 만들어야 할 파일 : /var/named/abc.com.zone

 

2.  /var/named/ 생성

 

3.  생성된 파일 이상유무 체크

 

4.  Server에서 서비스 동작 유무 확인

 

5.  Client에서 DNS 동작 여부 확인

- Client와 Server와의 Ping 확인

- Client에서 nslookup 명령어 실행 후 server 지정

- Server에서 설정한 "abc.com" 질의 

 

 

posted by Red_Message
2015. 4. 2. 09:15 :: 운영체제

DHCP (Dynamic Host Configuration Protocol)

- Discover : Client가 IP를 가지고 있지 않기 때문에 브로드 캐스트로 DHCP 서버를 찾는 과정

- Offer : Discover를 받은 S가 사용 가능하 IP 주소 1개를 브로드캐스트, 서버가 여러 대일 경우 모든 서버가 같은 동작 수행

- Request : Sserver로부터 받은 IP 주소를 바로 사용할 수 있는 것은 아니므로, 받은 IP 주소 중 하나를 다시 브로드캐스트하여

                 Server에게 임대 허락을 받는다. 서버가 여러 대일 경우 한대에게만 IP를 부여받기 위해 수행

- Ack : Client의 Request를 받은 Server는 Request 패킷에 담긴 IP가 자신이 보내준 IP 목록이면,

           IP 목록에서 해당 IP 주소를 사용 중으로 바꾸고

           다른 Client가 요청 시 다른 IP 주소를 전송한다. 자신이 보내준 IP가 아니면 IP주소를 전송한다.

           자신이 보내준 IP가 아니면 IP주소를 사용 안함 상태로 유지하고 다른 Client가 이용할 수 있게 한다.

 

1. 초기 설정
    dhcpconfig -D -p /var/dhcp -r SUNWfiles
    -D : DHCP 서비스
    -p : 리소스 저장경로
    -r : 리소스 파일



2. 네트워크 대역 및 기본 게이트 웨이 설정
    dhcpconfig -N 192.168.10.0 -m 255.255.255.0 -t 192.168.10.2
  . -N : 네트워크 ID
    -m : 서브넷 마스크
    -t : 라우터, 기본 게이트웨이


3. IP 테이블 설정

1) 테이블에 엔트리 추가 + 조회
     - pntadm -A 192.168.10.10 192.168.10.0


2) 테이블에 엔트리 수정 + 조회
    - pntadm -M 192.168.10.10 -n 192.168.10.20 192.168.10.0


3) 테이블에 엔트리 삭제 + 조회
    - pntadm -D 192.168.10.20 192.168.10.0


4) 테이블 삭제 + 조회
    - pntadm -R 192.168.10.0

 

4. 매크로 설정


1) 매크로 조회
    - pntadm -P

 

2) 매크로 추가 및 적용
    - 추가 : dhtadm -A -m default -d ':Subnet=255.255.255.0:DNSdmain="abc.com":DNSserv=8.8.8.8:'
    - 적용 : pntadm -M 192.168.10.11 -m default 192.168.10.0

 

3) 클라이언트 DHCP 적용
    - ifconfig e1000g0 dhcp

 

4) DHCP 할당 리스트 확인
    - pntadm -P 192.168.10.0

 

 

 

 

posted by Red_Message