리눅스에서 eth0가 나타나지 않을 때는 일반적인 NIC이 아닐 경우 입니다.

하지만 대체로 호환되는 모듈이 리눅스에는 기본적으로 있을 것입니다.

1.아래와 같은 명령어로 NIC를 확인하신후

[root@op root]# lspci
00:00.0 Host bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 03)
00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03)
00:07.0 ISA bridge: Intel Corp. 82371AB/EB/MB PIIX4 ISA (rev 02)
00:07.1 IDE interface: Intel Corp. 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB (rev 01)
00:07.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI (rev 02)
00:10.0 Multimedia audio controller: Ensoniq ES1371 [AudioPCI-97] (rev 07)
00:14.0 Ethernet controller: 3Com Corporation 3c900B-TPO [Etherlink XL TPO] (rev 04)
01:00.0 VGA compatible controller: S3 Inc. Savage 4 (rev 04)

2. /lib/modules/2.4.x/kernel/drivers/net 에서 비슷한 모듈을 찾으신 후

3. [root@op kernel]#modprobe modulename (확장자 빼고)
위와 같이 했을 때 별다른 에러 메세지가 나오지 않으면 성공적으로 된것입니다.
2005/07/05 14:20 2005/07/05 14:20
1. Sun O/S 4.x인 경우
# mkfile 40m /user/swap (40MB size를 추가하고싶을때)
# swapon /user/swap
# pstat -T (swap size 확인)
# vi /etc/fstab
.
.
/usr/swap swap swap rw 0 0



- swap file 제거
# rm /user/swap
# vi /etc/fstab - add한 entry 제거




2. Solaris 2.x 인 경우
# /usr/sbin/mkfile 40m /user/swapfile (40 mbyte의 swap file을 생성시켜줌)
# swap -a /user/swapfile (생성된 swap file을 적용시켜줌)
# swap -l (display swap space)
# vi /etc/vfstab (다음번 부팅시에도 자동으로 swap file을 추가시켜줌)
/user/swapfile - - swap - no - ( 이라인을 추가)

# swap -s
total : 5828kbytes allocated + 2456k reserved = 8284k used, 103792k available
( allocated : 현재 사용, reserved : kernel이 잡아놓음 , available : 사용할수 있는양)

# swap -d /user/swapfile (swap add한 file을 삭제)
2005/07/05 14:07 2005/07/05 14:07
Admin을 위한 일반 명령어

▷ 현재 시스템의 Architecture를 확인
# arch -k
: Display The kernel architecture
▷ Inode 삭제 명령어 clrl
# clrl /dev/dsk/c0t1d0s7 231
: 231 inode를 삭제
▷ Text파일에서 특정 문자 추출해내는 명령 cut
# cut -d":" -f1 /etc/passwd > /tmp/user
: passwd file에서 유저부분만 추출해서 /tmp/user 파일로 저장
# ypcat passwd | cut -d":" -f1 > /tmp/user
▷ Disk 사용량 계산
# du -s . : 현재 및 SUB-dir까지의 전체 Disk사용량 (du:disk use)
-k . : killo byte 단위로 확인
▷ Text file의 비교와 Directory간의 상이한 내용의 비교
# diff /a /mnt : /a, /mnt directory 를 비교
# diff /a /b : /a, /b Text file 의 비교
▷ EEPROM의 내용을 명령행 에서 변경
# /usr/sbin/eeprom : 상태확인
# /usr/sbin/eeprom boot-device=disk3 : 값 변경
▷ File type을 확인 할때
# file /etc/passwd
/etc/passwd: 아스키 텍스트
# file core
core: ELF 32-비트 MSB 코어 파일 SPARC 버전 1, 원인수행 'sleep'
: 이건 core file 이 왜 생성됬는지 보고 하고 있다.
▷ File or Directory 을 지울때
# rm file_name ; 단일 파일을 지운다.
# rm -r /dir_name ; 디렉토리까지 전부 삭제한다.
# rm -i file_name ; "-i"옵션은 파일을 지우기 전에 한번 더 확인한다.
# rm 'file name' ; 중간에 공백이 있는 파일 지울때.
▷ File 검색을 위한 명령어
# find ~ -name '*%' -print -exec rm {} \;
: home 디렉토리 '%'로 끝나는 화일 탐색하여 보여주면서 삭제
Option 분류(검색기능이 상당히 많다. man page로 확인)
-atime n ; accessed n days ago
-ctime n ; change n days ago
-mtime n ; midified n days ago
-perm ; 해당 되는 퍼미션 파일 검색
...
▷ Key input 제대로 안될 때 Remote에서 Key mode를 바꾼다.
# kbd_mode -a
▷ Process를 강제 종료 시킬때
# kill pid : 통상 process 종료 시킬때
# kill -9 pid : 강제 종료 시킬때
# kill -HUP pid : process를 hangup
# kill -SEGV pid : process를 강제로 segmentation fault 시킬때
▷ Process관련 명령어
/usr/proc/bin Directory에 다수가 있다.
proc tools -
proc, pflags, pcred, pmap, pldd, psig, pstack, pfiles, pwdx, pstop, prun, pwait,
ptree, ptime
▷ File list를 표시한다.
# ls -al : 모든 file들을 long형태로 자세히 listing
# ls -ald : directory를 확인 할 때
# ls -li : inode number를 보고자 할 때
▷ NIS 의 기동 여부 확인
# nisls -l : 만일 서버가 다운되었다면 아래와 같은 메시지가 뿌려진다.
"NIS+ server unreachable"
▷ 특정 Disk partition 의 자세한 정보 획득
# prtvtoc /dev/rdsk/c0t0d0s0 : volume Table 의 내용 볼 때
위는 c0t0d0s0 slice에 대한 자세한 Information을 보여준다.
▷ 시스템의 상세 Configuration을 확인하는 명령어
# prtconf : System Configuration을 보여준다.
# sysdef : Current system definition을 출력
# /usr/platform/`uname -i`/sbin/prtdiag : H/W 정보 (sol 2.6)
; Display system diagnostic information
; SUN 장비에만 적용되고 Axil등에서는 안됨.
▷ CPU를 Enable 또는 Disable
psrinfo , psradm
# psrinfo [-v] : CPU 정보확인
# psradm -f 2 3 : 2,3번 CPU를 off_line
# psradm -n 2 3 : 2,3번 CPU를 on_line
: 대형 서버 등에서 CPU 수를 제한하여 성능 test할 때 유용하다.
▷ /etc/shadow 파일의 update
# pwconv : /etc/shadow file 생성 및 modify
▷ 실행된 명령어들 Display
lastcomm 설정방법
# touch /var/adm/pacct ; 꼭 이렇게 하지 않아도 되며, 보안유지가 필요한 곳이라면,
다른 DIR에 다른file_name으로 숨겨도 된다.
그러나 볼때는 반드시 /var/adm/pacct 로 copy하여 놓은후 사용
해야 함.
# /usr/lib/acct/accton /var/adm/pacct
# lastcomm
▷ Sytem Reconfiguration BOOT
# reboot -- -r :
▷ rlogin 접속
# rlogin -l hong basic : hong으로 basic시스템에 콘솔 접속
▷ Key-in을 위한 I/O setting
# stty -a : setting된 key 들을 보여준다
# stty erase ?임의의키? : erase 단축기능을 임의의 키로 바꿀 때.
▷ 현 유저소유의 비어있는 파일을 생성 시킨다.
# touch cream
# ls -al cream
-rw-r--r-- 1 storming staff 0 10월 21일 17:02 cream
▷ process,가상메모리,디스크,cpu Monitoring 통계치를 보여준다
# vmstat 1 100 : 1은 interval이고, 100은 count이다.
▷ 현재 접속 사용자에게 메시지를 뿌린다.
wall : write to all users --> /usr/sbin/wall [-a] [-g] [filename]
- 기능 : Broadcast Message from ...
- option : -a broadcast message to the console
and pseudo-terminals.
-g grpname broadcast to a specified group only.
# wall -a text_file : text_file의 내용이 터미널 에 뿌려진다.
▷ 접속 사용자 확인 명령어
# who -a : 접속상태 의 자세한 정보
# who -r : 현재 RUN Level 확인
▷ 프레임 버퍼의 상태 변경
# /usr/platform/'uname -i'/sbin/cg14config
▷ 시스템 log file 들
/var/adm/utmp , utmpx
/var/adm/wtmp , wtmpx
/var/log/syslog
/var/adm/pacct
설명 : last 등의 명령어로 위의 파일들의 내용을 볼수 있는데, 유저의 사용상황은
위의 파일에 계속 쌓이게 된다.
그런이유로 위 파일이 비대해지면, zero파일로 많들어 줄 필요가 있다.
#cp /dev/null utmp 이런 식으로 ...
▷ C2 보안 레벨 이용 명령
- /etc/security/bsmconv , bsmunconv
위의파일 이용하여 특정 호스트 및 유저의 활동상황을 감시할수 있다.
2005/07/05 14:07 2005/07/05 14:07
# /usr/bin/df -F ufs -o i
파일시스템 iused ifree %iused 설치지점
/dev/dsk/c0t3d0s0 3451 60741 5% /
/dev/dsk/c0t3d0s7 18443 200565 8% /usr
/dev/dsk/c0t3d0s5 953 48135 2% /var
/dev/dsk/c0t3d0s6 213 120619 0% /export/home

위의 결과에서 "ifree"의 값이 현재 사용가능한 inode의 갯수 입니다.
2005/07/05 14:06 2005/07/05 14:06

Sun시스템 부팅절차

FAQ 2005/07/05 14:06
Boot PROM 단계

1.system identification banner의 표시
system의 model, keyboard, host ID, PROM version 및 Ethernet
adress를 화면에 나타난다.

2.self-test diagnostics의 실행
boot PROM의 자가진단 program은 system의 Hardware와 memory를
확인한다. 자가진단를 성공적으로 마쳐야만 다음 boot 과정을
실행한다.

3.PROM에 정의된 boot장치에서 boot program을 찾는다.
boot PROM은 'ufs'filesystem reader를 포함하고 있는 system 첫번째
boot program인 'bookblk'(1-15 sector에 위치함)을 읽는다.( boot
PROM 내의 boot 장치는 변경시킬수 있음)

4.boot program load
filesystem reader는 boot 장치를 열고 두번째 boot program인
/ufsboot 를 memory에 load한다.

5./ufsboot program을 load한후 boot PROM은 kernel(/kernel/unix)을
load한다.


Kernel 초기화 단계

6.kernel은 스스로 초기화한후 /ufsboot program을 이용하여 module
들을 load 한다.
kernel이 root partition을 mount 하는데 필요한 module을 읽고나면
/ufsboot program은 memory에서 제거되고, 계속해서 kernel 자신의
자원을 이용하여 초기화한다.


/sbin/init 단계

7. kernel은 사용자 process 한개를 생성하며 /sbin/init program을
실행시킨다. /sbin/init program은 /etc/inittab file에 기록된 내용을
실행한다.
init process는 하나의 rc script 또는 실행 가능한 다른 script들을
차례로 실행시킨다. 이러한 script(/sbin/rc*)들은 filesystem을 check
하고 mount하며, 여러 process들을 기동시킨다.
2005/07/05 14:06 2005/07/05 14:06
#ifconfig hmeX ether xx.xx.xx.xx.xx.xx
/etc/rc2.d/S72inetsvc 수정하여 적용한다.

#eeprom local-mac-address?=true
#reboot
2005/07/05 14:05 2005/07/05 14:05
1.vi편집기로 아래와 같은 스크립트를 만듭니다.

[root@op root]# vi rotate.sh
#!/bin/bash
DATE=`/bin/date +%y%m%d`
/bin/cp /usr/local/apache/logs/access_log /usr/local/apache/logs/access_log.$DATE
cat /dev/null > /usr/local/apache/logs/access_log
/bin/gzip /usr/local/apache/logs/access_log.$DATE
/bin/cp /usr/local/apache/logs/error_log /usr/local/apache/logs/error_log.$DATE
cat /dev/null > /usr/local/apache/logs/error_log
/bin/gzip /usr/local/apache/logs/error_log.$DATE
위의 아파치 로그 경로는 실제 아파치 로그가 있는 경로로 설정해주면 됩니다.
예를 들어 /var/log/httpd/에 로그파일을 옮겼다면 모든 경로를
/var/log/httpd로 바꿔놓으면 됩니다.

2.다음과 같이 실행 가능한 파일로 변경 합니다.
[root@op root]# chmod 755 rotate.sh

3.위의 스크립트를 clontab에 넣어서 매일 실행하게 합니다.
[root@op root]# crontab -e
0 3 * * * /root/rotate.sh
스크립트가 있는 경로를 등록해주시면 되고 매일 3시에 돌게 되어있습니다.

4.스크립트가 실행되어 로그가 일자별로 압축되어 저장된 결과입니다.
[root@op root]# cd /usr/local/apache/logs/
[root@op logs]# ls
access_log access_log.031031.gz error_log error_log.031031.gz httpd.pid
로그체크를 할때 필요한 날짜의 로그만 압축을 풀어서 확인하시면 되겠죠?

위의 스크립트를 응용하면 아파치 로그뿐만 아니라 /var/log 아래
있는 여러 로그들을 일별로 효율적으로 관리할 수 있습니다.
2005/07/05 14:04 2005/07/05 14:04
r_sr_xr_x 이런식으로 권한이 설정되어 있으면 set user id가 걸려 있는 것입니다.
ser user id란 set user id가 설정된 파일을 실행하면 그 사용자 권한으로만 그 파일이
실행되는 겁니다.

간단히 예를 들어 보겠습니다.
비밀 번호를 변경하기 위한 passwd 명령을 들수가 있습니다.

passwd의 실행 권한은 아래에 보시는 것처럼 set user id가 설정 되어있습니다.
[root@op bin]# ls -al passwd
-r-s--x--x 1 root root 15368 5월 29 2002 passwd
이 명령은 새로운 패스워드를 입력 받아서 /etc/shadow 파일에 비밀 번호를 암화시켜서 넣는데요.

shadow 파일의 권한은 아래와 같습니다.
[root@op bin]# ls -al /etc/shadow
-r-------- 1 root root 1697 10월 16 23:58 /etc/shadow
루트만 강제로 쓰기가 가능할뿐 다른 이들은 쓸수도 볼수도 없읍니다.

그렇지만 일반계정으로 접속된 유저들은 자신의 로그인 비밀번호를 바꿀수가 있습니다.
그렇게 할 수 있는 이유가 바로 set user id때문입니다.
passwd 파일의 소유자가 root 이므로 이 파일을 실행 동안에는 root권한을 가지는거죠
(이동안에 uid는 원래 자신의 id가 나오고 euid(effective user id)는 root가 됩니다.)
set group id도 이와 마찬가지입니다.

참고로 set user id가 걸려 있는 파일을 실행시켜서 root권한을 가지는 해킹기법도 있으니
쓸데없는 파일에 set user id가 걸려 있는지 확인해 볼 필요가 있습니다.
find명령어로 set uid가 걸려 있는 파일을 찾을 수 있습니다.

[root@op log]# find / -perm -4000
2005/07/05 14:04 2005/07/05 14:04
작성자 : 좋은진호(truefeel)
작성일 : 2003.9.14(일)
정리일 : 2003.10.23(수)

선 스팍서버의 PROM 모드(OpenBoot PROM, OBP)에서 사용 가능한 명령어를 알아본다.
싱글모드 부팅, CD-ROM으로 부팅해야하는 경우, root의 비밀번호 잊은 경우, 새로운 장치를
인식하거나 확인해야 하는 경우, 부팅 설정을 변경하는 경우 등에 사용한다.

시스템 운영 도중(sync되지 않은 상태에서는 데이터 손실이 발생할 수 있음)이나 부팅중에
STOP-A 키를 누르면 PROM 모드로 들어가게된다.

1. 원상태로 나오기
  PROM 상태에서 들어갔다가 원상태로 나오기 위해서는 go 를 입력한다.

  ok go

2. 시스템을 부팅

  ok boot [장치명] [옵션]

  -r : reconfiguration. 디바이스 파일(/devices, /dev)을 새로 만든다. 새로운 장치를 추가할 때 사용
  -s : single. 싱글모드로 부팅한다. root의 패스워드를 잊은 경우 등에 유용
  -v : verbose. 보다 상세한 메시지를 출력한다.
  -a : 인터랙티브한 방식으로 부팅한다. 시스템 파일명(/etc/system)이나 모듈 경로(/kernel)등을 지정해서 부팅 가능

  사용예)

  ok boot -s : 싱글 모드로 부팅한다.
  ok boot cdrom : CD-ROM 부팅을 한다.
  ok boot cdrom -s : 싱글 모드로 CD-ROM 부팅을 한다.
  ok boot -rv : 디바이스 파일을 새로 만들면서 보다 자세한 메시지를 출력하도록 한다.

3. SCSI 장비 나열
  현재 설치되어 있는 SCSI 장비를 나열한다. 장비 추가 후 정상적으로 설치된 것인지 확인할 때 등.
  만약 나열되지 않은 SCSI는 인식하지 못한 장치로 부팅 후에 사용할 수 없다.

  ok probe-scsi
  ok probe-scsi-all

4. 설정 값 조회
  현재 시스템에 설정된 값을 보여준다.

  ok printenv


ok printenv
Parameter Name    Value             Default Value

oem-logo       2c 31 2c 2d 00 00 00 00 ...  
oem-logo?       false             false
oem-banner                     
oem-banner?      false             false
output-device     ttya              screen
input-device     ttya              keyboard
sbus-probe-list    03               0123
keyboard-click?    false             false
keymap                       
ttyb-rts-dtr-off   false             false
ttyb-ignore-cd    true              true
ttya-rts-dtr-off   false             false
ttya-ignore-cd    true              true
ttyb-mode       9600,8,n,1,-          9600,8,n,1,-
ttya-mode       9600,8,n,1,-          9600,8,n,1,-
diag-file                      
diag-device      net              net
... 생략 ...



5. 환경 설정
  시스템 설정을 바꾼다. 설정된 값과 디폴트 값은 위의 printenv 명령을 통해서 볼 수 있다.

  ok setenv [파라미터] [설정값]

  사용예)

  ok setenv auto-boot? true : ok 프롬프트에서 멈춤없이 바로 부팅을 하도록 설정한다.

  부팅용 배너를 설정한다.
  ok setenv oem-banner truefeel test box
  ok setenv oem-banner? true

6. 시스템 정보 조회


명 령 의 미

ok banner 부팅용 배너를 보여준다.

ok show-sbus 설치된 SBus 디바이스를 보여준다.

ok .version boot PROM의 버전과 날짜 정보를 보여준다.

ok .enet-addr 현재 Ethernet address



7. PROM 패스워드 설정
  리눅스의 lilo에 패스워드를 넣는 것 처럼, PROM에 패스워드를 넣어 아무나 CD-ROM으로 부팅하거나
  싱글모드로 부팅하는 것 등을 막을 수 있다.


  ok password
  ok New password (only first 8 chars are used):
  ok Retype new password: 비밀번호 입력



  그리고 보안 레벨(security level)을 지정한다.
  

레 벨 제 한

none 모든 PROM 명령어를 수행가능하고 PROM 패스워드를 지정하지 않음. default

command 패스워드 없이는 "c" 또는 "b"(continue, boot) 명령만 사용가능.
다른 모든 명령을 사용하기 위해서는 PROM 패스워드를 입력 해야 한다.

full c 명령어만 password 없이 사용 가능




  ok setenv security-mode full
  security-mode = XXXX level



※ 참고 자료

* OpenBoot PROM (OBP) Commands
 http://sunsolve.sun.com/handbook_pub/General/OBP.html

* OpenBoot 2.x Command Reference Manual
 http://docs.sun.com/db/doc/806-2906-10/6jc3f0a9n

* Solaris Handbook for Sun Peripherals >> B. Booting Your System
 http://docs.sun.com/db/doc/806-6086-10/6jf27m72t?a=view

* OpenBoot Parameters
 http://www.adminschoice.com/docs/open_boot.htm
2005/07/05 14:03 2005/07/05 14:03
1. 소개

Solaris Kernel은 TCP/IP스택에 여러가지 사용자 인터페이스를 제공한다. Cache 테이블의 Lifetime 및 다수의 TCP 연결에 대한 여러가지 옵션을 통하여 Kernel Parameter의 설정 및 제어가 가능하다. 하지만 이러한 Kernel Parameter들을 Tunning하기 위하여 각각의 kernel parameter들에대한 정확한 기능들의 이해가 반드시 요구되어진다. 그리고 많은 시스템관리자들은 이러한 Kernel Parameter들을 사용 및 설정하는 등의 일련의 Security 업무에 소홀히 해왔다. 이 보고서에서는 solaris에서 제공되어지는 Network Security Kernel들에 관련하여 올바르게 이해해고 설정하여 Tunning하는 방법을 소개하고자 한다.

2. Solaris Kernel Tools

solaris에서는 TCP/IP 커널에 대한 드라이버로서 "ndd"가 유일한 도구이며 Solaris 시스템의 네트워크 커널 변수들을 Tunning하기 위한 가장 유용한 Tool이 "ndd"이다.

3. Solaris 네트워크 커널 변수들

일반적으로 TCP/IP 커널에 대한 변수들을 보는 방법은 다음과 같은 명령어를 실행함으로써 가능하다.

# ndd /dev/

여기서 TCP/IP 커널에 대하여 는 ARP, IP, TCP, UDP중에 하나이며 각각의 드라이버에 대하여 모든 변수들을 보는 명령어는 다음과 같다.

# ndd /dev/ \?

IP 드라이버에 대한 명령어를 실행하면 다음과 같이 출력된다.

[phoenix:root]:/ >ndd /dev/ip \?

? (read only)

ip_forwarding (read and write)

ip_respond_to_address_mask_broadcast(read and write)

ip_respond_to_echo_broadcast (read and write)

ip_respond_to_timestamp (read and write)

ip_respond_to_timestamp_broadcast(read and write)

ip_send_redirects (read and write)

ip_forward_directed_broadcasts(read and write)

ip_debug (read and write)

ip_mrtdebug (read and write)

ip_ire_cleanup_interval (read and write)

ip_ire_flush_interval (read and write)

ip_ire_redirect_interval (read and write)

ip_def_ttl (read and write)

ip_forward_src_routed (read and write)

ip_wroff_extra (read and write)

ip_ire_pathmtu_interval (read and write)

ip_icmp_return_data_bytes (read and write)

ip_send_source_quench (read and write)

ip_path_mtu_discovery (read and write)

ip_ignore_delete_time (read and write)

ip_ignore_redirect (read and write)

ip_output_queue (read and write)

ip_broadcast_ttl (read and write)

ip_icmp_err_interval (read and write)

ip_reass_queue_bytes (read and write)

ip_strict_dst_multihoming (read and write)

ip_addrs_per_if (read and write)

ip_ill_status (read only)

ip_ipif_status (read only)

ip_ire_status (read only)

ip_ipc_status (read only)

ip_rput_pullups (read and write)

ip_enable_group_ifs (read and write)

ndd를 사용하여 커널 변수를 설정하기 위하여는 다음과 같이 명령어를 실행하면 된다.

# ndd -set /dev/

ndd를 사용하여 커널 변수를 변경할때는 주의하여야 할 사항이 있다. 한번 설정된 parameter는 시스템을 재부팅할 경우에는 이전에 설정된 값이 원래의 기본설정값으로 변경된다는 점이다. 설정된 값을 계속적으로 사용하기 위해서는 시스템 관리자가 shell script등을 이용해서 시스템 부팅시 자동으로 시스템관리자가 원하는 설정값으로 설정되게 운영하여야 많다. 예를들어 /etc/init.d/inetinit나 개별적인 shell script로 운영하여야만 한다.

4. ARP (Address Resolution Protocol)

ARP는 Layer3의 네트워크 주소를 data-link 주소(MAC Address)로 동적 맵핑(mapping)하는데 사용된다. 하나의 시스템이 한 네트워크 상에서 다른 시스템과 통신하고자 한다면 broadcast주소인 ff:ff:ff:ff:ff:ff로 ARP 패킷을 첫번째로 보낸다. 그 패킷은 단순한 패킷으로서 해당 주소를 어떤 시스템이 사용하고 있는지에 대한 질의 패킷이다. 예를 들어 누가 주소 A를 사용하고 있느지에 대하여 ARP패킷을 broadcast하면, 한 network 상에 존재하는 모든 호스트들이 이 패킷을 수신하게 된다. 이때 시스템 A는 ARP 요구에 대한 응답으로서 답을 보내게된다. ARP Broadcast패킷을 보냈던 해당 시스템은 32bit IP주소를 layer-2인 MAC주소로 매핑하면서 table과 cache를 구성하여 운영하게 된다. 이때 해당 시스템은 network layer에의한 두번째 테이블을 구성하게 된다. 이 테이블은 data-link layer에의해 제공되어지는 정보로부터 구성되어지며, 활성화된 연결에대한 네트워크 라우팅 정보를 포함하고 있다. network layer는 data-link layer로부터 MAC주소를 요청하며, 요청된 결과로부터 수신된 이러한 주소를 네트워크 라우팅 테이블에 저장되어진다. Network layer의 정보는 20분 후에 만료된다.

하나의 네트워크에서 호스트는 다른 시스템과 통신하기 우히아여 첫번째로 IP layer의 ARP cache를 체크한다. 이때 네트워크 peer에대한 엔트리가 cache에 존해하지 않으면 ARP 요청이 broadcast되어 진다. ARP Cache 엔트리는 5분후에 만료된다. ARP Cache를 이용한 공격은 두가지 종류가 있다. 하나는 ARP cache poisoning이며 다른 하나는 ARP spoofing이다.

ARP cache poisoning은 존재하지 않는 ARP주소나, 잘못된 ARP주소를 시스템의 ARP cache에 삽입시키는 것이다. 이것은 target시스템이 peer의 IP주소로 패킷을 보내지만 MAC주소가 잘못되어 있기때문에 해당 시스템으로 하여금 서비스 거부를 일으킬수 있다,

ARP spoofing은 system compromise결과를 초래할 수 있다. IP spoofing처럼 ARP spoofing은 네트워크상에 존재하는 하나의 호스트를 네트워크 기능을 정상적으로 처리하지 못하게 해서 모든 ARP 요청 broadcast에 대한 응답을 못하도록 한다. 이것이 행해지기만 하면 공격자는 무능력해진 호스트의 IP주소를 공격 호스트로서 구성하여 사용할 수가 있게 되어진다. 피해 호스트가 무능력해진 호스트와 통신하려 할때 공격자의 시스템이 모든 ARP broadcast의 요청에 응답하게 된다. 이렇게 하면 그것의 MAC주소가 피해시스템의 ARP Cache에 저장되어지게 되서 피해시스템은 disable된 시스템이 공격자의 시스템으로 알게되서 공격시스템과 피해시스팀과의 정상적인 통신이 가능하게 되어진다.

ARP 공격에 대응하기는 매우 어렵다. ARP공격에 대한 한가지 대응방법은 cache 엔트리의 lifetime을 줄이는 것이다. cache lifetime은 네트워크 커널 변수인 arp_cleanup_interval에 의하여 결정되어 진다. IP routing 테이블 엔트리의 lifetime은 커널 변수인 ip_ire_flush_interval에 의해서 조정되어 질 수 있다. 이에 대한 커널 변수는 다음과 같은 명령어의 실행에 의해서 가능하다.

# ndd -set /dev/arp arp_cleanup_interval
2005/07/05 14:02 2005/07/05 14:02
. 시스템 reconfigure

시스템을 shutdown 한 후에 disk 를 설치한다. 하드웨어를 연결하는 일은 그다지 어려운 일이 아니므로 설명을 생략하도록 하겠다. 디스크 설치 후에 그냥 부팅을 한다면 시스템은 인식을 하지 못한다. 그래서 필요한 작업이 reconfigure 수행이다.

Reconfigure 방법엔 여러 가지가 있다.
/reconfigure 파일을 만들어 준 후 reboot 을 한다.
부팅 후 init에서 불러 들이는 rc.sysinit 파일에서는 root 디렉토리에 reconfigure 라는 파일의 존재를 파악해서 시스템이 변경된 부분이 있는지 kernel 을 rebuild 하게 한다. 참고로 / 디렉토리는 root 만이 쓸 수 있으니 반드시 root로 로그인해야 한다.

[ebee@test2 /]su -
Password:
[root@test2 /]touch reconfigure
[root@test2 /]ls
TT_DB devices lib packages tmp
bin etc lost+found platform usr
boot export mnt proc var
cdrom floppy net reconfigure vol
core home nsmail sbin xfn
dev kernel opt




이때 만들어진 reconfigure 파일은 재부팅 시 rebuild 후 자동으로 삭제된다.
부팅 후 쉘 상태에서 다음과 같이 입력한다.
reboot -- -r


부팅 시 옵션을 입력한다.
x86 버전의 경우 부팅 후 (b)oot (i)nterprete 를 고르는 부분이 있는데, 이곳에 “b –r”을 입력한다.
PROM 프롬프트 에서는 “boot –r” 을 입력한다.
위와 같은 방법을 거쳐 booting 이 된 후에야 다음 작업을 할 수 있다.
2005/07/05 14:01 2005/07/05 14:01

bash 팁 몇가지

FAQ 2005/07/04 14:45
아래와 같이 env를 입력해 보시면 자신이 어떤 쉘을 쓰는지
알 수 있습니다.

[root@op isseo]# env
HOSTNAME=op
SHELL=/bin/bash
.
.
다음은 bash의 팁 입니다.

ctrl-L -> clear명령어와 같은 효과가 있습니다.

bash shell에서는 cd 명령어에 * 즉 와일드카드를 사용할수 있습니다.
cd blah*

ctrl-t -> 두개문자가 서로 뒤바뀌게 해줍니다.

ctrl-u, ctrl-w -> 현재 커서의 왼쪽에 있는 문자들만 삭제됩니다.

cd - -> 바로 전에 위치하고 있던 디렉토리로 이동할때는?
2005/07/04 14:45 2005/07/04 14:45
예를 들어서 /home2/isseo/board 라는 경로에 cgi
게시판을 설치 하고 싶을 때에는 httpd.conf에
아래와 같이 추가 시켜주신 후 apache를 restart시켜
주면 됩니다.


AllowOverride All
Options MultiViews -Indexes FollowSymlinks +ExecCGI
AddHandler cgi-script .cgi
2005/07/04 14:45 2005/07/04 14:45
vi 에디터를 사용할 때 익숙하지 않을 경우 무심코
key-in을 한 뒤 급하게 빠져 나오다보면 자신도
모르게 파일이 수정될 수 있습니다. 설정 파일등
vi 에디터로 잘못 수정될 경우 서비스에 크게 영향을
주게 됩니다.

위와 같은 경우를 대비해서 vi 에디터를 읽기 전용으로
여는 방법이 있습니다.

$view filename

파일 내용에 편집이 가해지면 경고 메시지가 표시되며
변경된 내용을 부득이 하게 저장을 하려면 ":w!"를
사용하여야만 저장이 가능합니다.
2005/07/04 14:41 2005/07/04 14:41
솔라리스에서 vmstat을 하시면 메모리 사용량과 cpu 사용량을 보실수
있습니다.

그냥 vmstat만 하시면 그 command를 치신 한순간의 사용량만을 보여주며
vmstat "time interval"을 하시면 time interval마다 사용량을 집계하여
보여줍니다. 예를 들어 vmstat 5 하면 5초마다 사용량을 집계해서
보여주는데 다음과 같이 display 됩니다.

procs memory page disk faults cpu
r b w swap free re mf pi po fr de sr cd f0 s0 -- in sy cs us sy id
0 0 0 531416 21504 1 5 6 0 0 0 0 1 0 0 0 261 4657 449 4 2 94
0 0 0 530632 21336 69 344 37 0 0 0 0 15 0 0 0 294 22806 585 45 10 45
0 0 0 531412 21192 43 169 2 0 0 0 0 2 0 0 0 296 6881 636 13 5 82

swap 아래의 숫자는 현재 available한 swap space (KBytes) free 아래 숫자는
free memory size입니다. cpu 아래에 us, sy, id는 각각 user time, system
time, 그리고 idle time을 퍼센트로 나타낸것입니다.

vmstat는 리눅스 에서도 위와 비슷한 결과를 보여줍니다.
2005/07/04 14:41 2005/07/04 14:41
#cd /proc

#cat cpuinfo
#cat meminfo
하시면 cpu정보나 메모리 정보를 볼 수 있습니다.
#cat partitions 는 파티션 정보
#cat swaps는 스왑 정보 입니다.
2005/07/04 14:40 2005/07/04 14:40
External Hard Drive라도 Rebooting 하셔야 됩니다.
왜냐하면 IBM, Sun, HP 그어느 System이라도 System booting 전에
연결되어 있는 External Device가 Power on 되있어야 인식을 합니다.
IBM AIX에는 cfgmgr이라는 command가 모든 새로 장착된 device를
관장해 주는데 이 command 또한 System boot(Phase 2)당시 자동으로
run 해서 모든 device를 잡아 줍니다. 다른 System도 마찬마지 입니다.
이런 관계로 꼭 Reboot 하셔야 합니다.

질문과는 방향이 다른데 RAID(특히 5)에 사용하는 Dard Drive(hot swap)는
문제 발생시 System reboot 없이 Hard drive 교체가 가능합니다.
2005/07/04 14:40 2005/07/04 14:40
링크(Link)

도스나 윈도 사용자에게는 낯선 개념인데, 유닉스나 리눅스 파일 시스템에서 실제 파일이나 디렉토리 혹은 또 다른 링크를 가리키도록 연결해 준다는 의미이다. 윈도의 '바로 가기'나 단축 아이콘을 연상할 수도 있지만, 바로 가기나 단축 아이콘이 단순히 파일 관리자가 담당하는 기능인 반면, 리눅스의 링크는 파일 시스템 차원에서 제공된다는 근본적인 차이가 있다. 링크에는 소프트(Soft) 링크와 하드(Hard) 링크 두 가지가 있는데, 일반적으로 링크라 함은 소프트 링크를 말한다.

 

소프트 링크(Soft Link)

소프트 링크는 심볼릭(Symbolic) 링크라고도 하는데, 윈도의 바로 가기 기능과 유사하다. 특정 디렉토리의 파일을 다른 디렉토리에서 실행하려면 그 파일에 대한 절대경로를 이용해 명시하거나 그 파일을 사용할 디렉토리로 복사해야만 한다. 이럴 경우 윈도에서는 바로 가기 기능을 이용해 원본 파일의 위치에 대한 정보를 가진 단축 아이콘을 만들어 편리하게 사용할 수 있다. 소프트 링크 역시 파일의 불필요한 반복적 복사를 방지하여 파일 시스템을 유연하게 활용하거나 여러 디렉토리에서 동일한 라이브러리를 요구할 경우, 같은 파일을 여러 사람이 공통으로 관리하면서 사용할 경우, 비슷한 역할을 담당하는 여러 가지 파일들 중 하나를 선택하여 대표적으로 사용하려 할 때 유용하게 쓸 수 있다. 소프트 링크에서는 원본 파일이 삭제되면 그 링크는 사용할 수 없게 된다.

 

하드 링크(Hard Link)

소프트 링크가 단순히 원본 파일에 대한 정보만을 가지고 있는데 비해 하드 링크는 원본 파일을 복사한 다음 이의 사본을 생성한다는 차이가 있다. 소프트 링크와 마찬가지로 링크로 접근하거나 원본으로 접근하여 파일의 내용을 수정하였다면 원본과 하드 링크된 파일이 모두 수정되어 항상 같은 내용이 유지된다. 소프트 링크는 원본이 삭제될 경우 링크를 사용할 수 없지만, 하드 링크는 원본이 삭제되어도 원본과 동일한 내용의 파일을 가지고 있으므로, 자원을 공유하면서도 데이터를 안전하게 관리하고자 할 때 주로 사용된다.
2005/07/04 14:39 2005/07/04 14:39

unix 파일시스템구조

FAQ 2005/07/04 14:39
모든 UNIX 파일 시스템은 5개의 주요부분으로 되어 있습니다.
파일시스템의 첫 번째 블록을 포함하는 몇 개의 블록에는
부트블록이 저장 됩니다.
이곳을 제외한 나머지 부분은 실린더 그룹이라 부르는 여러개의
실린더 그룹으로 나누어 관리 합니다.
한 개의 실린더 그룹은 수퍼블록, 실린더 그룹블록,i-node데이블
및 데이터 블록으로 구성 됩니다.

(1) 부트블록

: 부트스트랩에 필요한 파일들이 존재하며 루트영역외에는
해당되지 않는다. 즉 일반사용자 들에게는 해당되지 않는 블록이다.

(2) 수퍼블록
: 파일 시스템의 크기, i-node 테이블의 크기, free 블록리스트 등
파일시스템을 관리하는 데 필수적인 정보가 저장된다.

(3) 실린더 그룹 블록

: 실린더 그룹내의 유효 블록들의 비트 맵 정보나 통계 정보를 기록한다.

(4) i-node 테이블
: 파일에 대한 중요한 정보를 싣는데 즉, 파일에 대한 크기,
데이터위치(디스크주소), 파일유형, 사용허가권, 생성날짜등이
기록되는 커널의 파일관리에 있어서 핵심이 되는 모든 자료를 기록한다.
만약 한 파일이 생성된다면 그 파일은 파일명을 가짐과
동시에 i-node number를 가지고서 해당 디렉토리 파일에
저장되기 때문에 디렉토리에서 파일명으로 손쉽게
i-node를 찾아 파일의 위치정보를 알아낼 수 있다.

(5) 데이터 블록
: 실제 데이터가 저장되는 공간이다.
2005/07/04 14:39 2005/07/04 14:39

awk 명령어의 활용

FAQ 2005/07/04 14:38
아래는 awk 명령어에 관한 활용 설명입니다.

- awk 명령어
awk라는 이름은 이를 개발한 세 사람의 이름 Aho, Weinberger, Kernighan에서 유래된 것이다.
awk명령어는 일련의 입력 화일을 읽어 지정된 패턴과 일치하는 패턴을 간직한 라인을 찾는다.
패턴이 일치하면 지정된 연산이 실행된다. 여기서의 연산은 라인 내의 필드 조작이나 필드값을
이용한 산술 연산을 의미한다. 이 awk는 shell programming과 bc 그리고 C 프로그래밍언어의 기능을 갖춘
프로그래밍 언어로 bc와 같이 완벽하게 해독이 되며 쉘의 인수인 $1, $2, $3과 같은 이름을 가진
필드 변수가 각 입력 라인에 사용될 수 있다. 또 C 언어와 유사한 프린팅, 제어 연산자도 가지고 있다.
awk의 사용에는 두가지 방법이 있다. 한가지 방법은 다음 형식으로 타이프하는 것이다.
# awk program filename --> program: 명령어들로 이루어짐
filename: awk가 작용할 화일의 명칭
# awk -f file filename --> file: 프로그램 명령어들을 포함하고 있는 화일의 명칭
프로그램은 하나 또는 그 이상의 프로그램 라인들로 이루어진다. 프로그램 라인은 일반적으로
패턴과 작용으로 이루어진다.
/rotate/ {print} --> 패턴은 rotate(단순한 문자열 패턴은 /들로 둘러싸임)
작용은 print이다.
이것을 사용하면 , awk 프로그램은 문자열 rotate를 포함하고 있는 라인들을 발견하고 그것들을 프린트한다.
그것은 grep rotate filename을 사용하는 것과 같다.
필드들은 공백들에 의해 분리된 문자열들이다.
awk 프로그램은 필드에 대한 레이블 시스템을 가지고 있다. $1은 첫 번째 필드이고 $2은 두 번째 필드이다.
$0은 특수한 의미를 갖는바, 그것은 전체 라인을 나타낸다.
---------------------------------------------------------------------------------------------
패 턴 의 미
---------------------------------------------------------------------------------------------
/fish/ 문자열 fish를 포함하고 있는 라인
$1 - /fish/ 첫번째 필드가 문자열 fish를 포함하고 있는 라인
$3 - /fish/ 세번째 " "
$1! - /fish/ 첫번째 필드가 문자열 fish를 포함하고 있지 않은 라인
---------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------
작 용 의 미
---------------------------------------------------------------------------------------------
{print $2} 두번째 필드만을 프린트하라
{print $4,$2} 네번째 필드의 내용을 프린트한 다음 두번째 필드의 내용을 프린트하라
{print $2,$2+$4} 두번째 필드를 프린트한 다음 두번째 필드와 네번째 필드의 합을 프린트하라
{s=$2+$4; print s} 두번째와 네번째 필드를 추가한 다음, 그 합을 프린트하라
---------------------------------------------------------------------------------------------
패턴에서의 ~와 !사용에 주목하라. ~는 우측에 있는 패턴이 좌측에 있는 필드에 포함된다는 것을 의미한다.
!~ 조합은 우측의 패턴이 좌측의 필드에 포함되지 않음을 의미한다.
{ }작용들을 세미콜론으로 분리시킴으로써 하나 이상의 작용들을 포함시킴 수 있다.

몇가지 이러한 개념들을 사용하는 간단한 예를 고찰해보자. 화일 sales는 여섯 열의 정보를 가지고 있다.
첫번째 열은 품목 명칭, 두번째 열은 품목의 판매가격 , 그리고 다음의 네 열들은 품목에 대한 분기별
판매수이다.
# vi sales
carts 29.99 45 13 55 22
corks 0.02 30 20 25 93
doors 49.99 40 15 20 25
geese 15.00 2 8 1 128
nighties 50.00 11 23 15 82
우리는 두 열을 추가하려 한다. 품목합계 그리고 현금 판매 합계.
다음과 같은 addup이라는 화일을 작성한다.
# vi addup
{total=$3+$4+$5+$6;print $0, total, total*$2}
이 작용은 ;에 의해 분리된 두 부분들을 가지고 있다. 첫 부분은 판매수를 합하고 영리하게도 합계를
total이라 부른다. 두번째 부분은 원래의 라인($0)을 프린트하고, 그 뒤에 합계를 , 그 다음에는
total*$2를 프린트하는데, 이것은 합계x두번째 열을 의미한다.
# awk -f addup sales
carts 29.99 45 13 55 22 135 4040.64
corks 0.02 30 20 25 93 93 3.36
doors 49.99 40 15 20 25 100 4999
geese 15.00 2 8 1 128 139 2085
nighties 50.00 11 23 15 82 131 6550


o awk 입력 라인을 읽는 방법
표준 입력이나 화일로부터 읽혀지는 각 라인은 공백문자로 구분된 필드를 가지고 있는 것으로 간주된다.
-F(field)선택자 뒤에 임의의 문자를 입력하면 필드 구분자가 그 문자로 변경된다.
예를 들어 :(콜론)을 구분자로 사용하려면 다음과 같이 입력한다.
# awk -F: -f prog files

o awk의 패턴과 연산
awk가 읽어들이는 라인과 필드들에 대한 작업은 패턴-연산의 쌍으로 정의되며 이쌍은 다음과 같은
형식을 갖는다.
pattern {action}
연산 부분을 중괄호로 둘러쌈으로써 패턴과 구분한다. 연산 부분이 생략되면 그 라인이 프린트된다.
일반적으로 사용되는 연산에는 print가 있으며 이 연산은 인수를 표준 출력에 출력한다.
다음연산은 입력 필드 개의 순서를 바꾸어 출력한다.
{ print $2, $1}
# vi in.file
hello goodbye again
111 222
thirty forty
# vi awk.prog1
{print $2, $1}
# awk -f awk.prog1 in.file
goodbye hello
222 111
forty thirty
위의 예에서 print의 인수는 콤마로 구분되었으며 이로 인해 출력 데이터 사이에 현재의 필드 구분자가
삽입되었다. 콤마가 생략되면 $1과 $2가 연속하여 출력된다.
예를 들어 다음의 awk 프로그램은
# vi awk.prog2
/hello/ {print $2, $1}
# awk -f awk.prog2 in.file --> 입력 화일 내에서 패턴 /hello/과 일치하는 라인은 1개뿐이기
goodbye hello 때문에 그 라인에 대해서만 지정된 연산인 print가 실행되었다.
# vi awk.prog3
/hello/ {print $2, $1}
/thirty/ {print $1, $2, "and more"}
# awk -f awk.prog3 in.file --> print명령어의 인수가 따옴표로 둘러싸여 제공되었으며 그 문자열이
goodbye hello 출력에 표시되었다.
thirty forty and more
# vi awk.prog4
/hello/||/111/ {print "htt", $1, $2}
# awk -f awk.prog4 in.file --> ||연산자는 2개의 정규식 중 하나만 일치하면 지정된 연산을 실행하며
hit hello goodbye &&연산자는 2개의 정규식이 모두 일치애햐 지정 연산을 실행한다.
hit 111 222 !연산자는 정규식이 일치하지 않아야 지정된 연산을 실행하며
정규식 앞에 기술된다.
# vi awk.prog5
/^[Hh1]/ {print "htt", $0}
# awk -f awk.prog5 in.file --> $0을 사용했기 때문에 입력 라인 전체가 출력되었음
hit hello goodbye again Hh1으로 시작하는 line을 출력
hit 111 222
# vi awk.prog6
/hello/ {
print $2
print "another"
print $1
}
# awk -f awk.prog6 in.file --> 패턴 /hello/와 일치하는 첫번째 입력 라인만이 연산의 대상이 됨
goodbye
another
hello

o awk를 이용한 숫자 연산
awk의 산술 연산이 bc의 산술 연산과 다른 점은 awk는 입력 화일 내의 라인 중 일부를 선택하는
패턴 부분을 사용할 수 있다는 것이다.
예를 들어 awk의 내장 함수인 length는 문자열로 취급되는 입력 필드의 길이를 뱐환하며 숫자 변수는
숫자로 취급되는 필드의 값을 할당받을 수 있다.
# vi awk.prog7
{
s += $2
print $2, "length=" length($2), "s=" s
}
# awk -f awk.prog7 in.file --> 숫자로 변환될수 없는 문자열은 값이 0이 된다.
goodbye length=7 s=0 문자열 thirty가 그 예로서, 숫자로 변환될수 없다. 그러나 문자열
222 length=3 s=222 222는 숫자로 올바르게 변환되었다. 또한 s=0과 같은 형식으로 변수에
forth length=5 s=222 값을 할당할 수 있다.
다음은 awk변수의 욜바른 예이다.
s
S
SS
S1
qwerty[42]
변수를 사용하기 전에 선언하거나 초기화시킬 필요는 없다. awk가 자체적으로 변수를 초기화시키며
필요에 따라 그 변수를 문자열이나 숫자를 기억시킬수 있다.
# vi awk.prog8
/hello/ {
SSS=34
print "SSS is", SSS
SSS=hello
print "SSS is", SSS
}
# awk -f awk.prog8 in.file --> 이와 같은 자동적인 변수 형식 변환은 변수의 사용을 수월하게 한다.
SSS is 34
SSS is hello

o 처리를 시작하고 끝내기 위한 특수 패턴
정규식 패턴 외에도 2개의 특수 패턴으로 BEGIN과 END가 사용된다. BEGIN은 첫 번째 입력 라인을
읽기 전에 awk프로그램의 선두에서 실행되며 END는 마지막 입력 라인이 처리된 후 프로그램의 제일
끝에서 실행된다.
BEGIN은 주로 변수 초기화 등의 작업에 사용되며 END는 마지막 계산을 하고 출력을 요약하는 작업에
사용된다. BEGIN이나 END가 없어도 되나 필요한 경우 포함시킬 수 있다.
예를 들어 다음 프로그램은 여러 개 숫자의 평균값을 출력한다.
BEGIN {
print "Beginning to process the input data ..."
}
{
s += $1
n++
}
END {
print "mean of these",n,"data items is", s/n
}
메시지를 프린트하는 BEGIN과 관련된 연산은 프로그램의 선두에서 실행되며 그 후에 각 입력라인이
읽혀진다. 패턴이 생략되었기 때문에 모든 입력 라인에 대해 연산이 실행되었다.
첫 번째 필드를 변수 s에 더하고 1을 증가시키며 마지막의 END패턴은 모든 입력이 처리된 후 실행된다.
이 END 패턴에서는 계산의 최종 결과를 출력하고 있다.
2005/07/04 14:38 2005/07/04 14:38