검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 시스템
참조 원문 : Understanding Signals

  시그널이란 실행 중인 프로세스에 발생하는 비동기 이벤트이며 소프트웨어, 하드웨어, 사용자에 의해 발생합니다. 시그널은 미리 정해진 의미를 가진 정수로 표현됩니다. 프로세스가 시그널을 받으면 그에 대한 응답을 해야 하며 그렇지 않을 경우 일반적으로 해당 프로세스는 종료 당합니다. 'kill -l'이나 'trap -l' 명령어를 통해 사용 가능한 시그널 목록을 볼 수 있습니다.
$ kill -l
1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL
5) SIGTRAP     6) SIGABRT     7) SIGBUS      8) SIGFPE
9) SIGKILL    10) SIGUSR1    11) SIGSEGV    12) SIGUSR2
13) SIGPIPE    14) SIGALRM    15) SIGTERM    16) SIGSTKFLT
17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU
25) SIGXFSZ    26) SIGVTALRM    27) SIGPROF    28) SIGWINCH
29) SIGIO    30) SIGPWR    31) SIGSYS    34) SIGRTMIN
35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3    38) SIGRTMIN+4
39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12
47) SIGRTMIN+13    48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14
51) SIGRTMAX-13    52) SIGRTMAX-12    53) SIGRTMAX-11    54) SIGRTMAX-10
55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7    58) SIGRTMAX-6
59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX
  아래는 상대적으로 자주 사용되는 시그널들입니다.
  • HUP : 2가지 용도로 사용됩니다. 먼저 데몬에게 리셋 시그널을 보내 데몬이 설정 정보를 다시 읽게 만들 때 사용되며, 터미널 드라이버가 터미널과 관련된 프로세스들을 정리(clean up)하려고 할 때도 사용됩니다.
  • INT : 터미널 드라이버가 현존하는 작업(existing operation)을 종료시킬 때 사용합니다.
  • TERM : 실행을 종료하고 정리(clean up)한 후 빠져나갑니다.
  • TSTP : 키보드에서 CTRL+Z를 누를 때 발생하며 프로그램에게 상태를 정리(clean up)하게 한 후 STOP 시그널을 보냅니다.
  • CONT : STOP 시그널로 멈춘 프로세스를 다시 작동하게 만듭니다.
  때에 따라 끝도 없이 실행되고 있거나 문제를 일으키는 프로세스가 있을 때가 있는데 이럴 때 해당 프로세스들을 멈추는 방법을 알아야 합니다. 프로세스에게 시그널을 보낼 때는 kill 명령어를 사용합니다.
kill [-signal] process_identifier (PID)
  참고로 시그널은 숫자로 사용할 수도 있고 상징적인 이름으로 사용할 수도 있습니다. kill 명령어를 사용하는 가장 좋은 방법은 kill 뒤에 PID를 적는 겁니다.
kill 4578
  죽이려는 프로세스의 PID는 top이나 ps 명령어를 통해 확인이 가능합니다. 위와 동일한 효과를 내는 또 다른 방법은 '-15'를 사용하는 겁니다.
kill -15 4578
  kill 명령어는 기본적으로 '-15'를 사용하기 때문에 'kill 4578'은 'kill -15 4578'과 동일합니다. '-15'는 프로세스에게 마치 사용자가 로그 아웃을 했을 때처럼 작동을 멈추라고 알리는 시그널입니다. 이 방법의 장점은 해당 프로세스의 자식 프로세스도 함께 죽인다는 겁니다.

  차선책으로 '-9'를 사용하는 방법이 있습니다. 이것은 프로세스를 강제로 죽이는 시그널입니다.


2011/01/03 14:02 2011/01/03 14:02
Posted
Filed under 시스템
참조 원문 : 20 essential virtualization tips & techniques
관련 글 : 우분투 10.10에서 KVM으로 가상화 돌리기

  가상화에 있어서 제품이나 벤더와는 무관한 보편적이고 기본적인 팁을 소개합니다. 단, 몇 가지는 VMware에 한정된 내용입니다. 이 팁들은 성능 향상과 관련된 내용이 주를 이루며 VM(가상 머신)의 수가 50개 이상인 중대형급 규모에서 효과적입니다.

1. 일회성 시스템에 VM을 활용하라
  VM은 하니팟, 악성 코드 테스트 시스템에 사용하기에 최적입니다. 템플릿으로부터 VM을 만들어('호스트 시스템을 계속 패치하라'참조) 그런 격리용 시스템으로 활용하는 것은 좋은 방법입니다. 바이러스가 악성 코드를 다룰 때는 네트워크 인터페이스를 비활성화하여 VM 내에서만 활동하게 할 수 있습니다. 이 목적을 위해 윈도우 VM을 사용할 경우 시스템 복구 기능을 꺼서 시스템을 다시 켰을 때 테스트 중에 변경하거나 파괴했던 파일들이 계속 남아있지 않도록 합니다.

2. VM 템플릿을 활용하라
  VM 템플릿은 가상화 관리자로 하여금 새로운 VM을 빠르고 일관성 있게 설치할 수 있도록 해줍니다. 템플릿이란 패치, 업데이트, 게스트 OS에 필요한 프로그램을 포함하여 설치해서 바로 사용할 수 있도록 만든 VM을 뜻합니다.

3. VM 호스트 만들기
  가상 호스트 하드웨어는 64비트의 멀티 프로세서, 여러 VM을 지원하기 위한 대용량 램, 확장성을 위한 거대한 디스크 공간, 기가비트 네트워크 인터페이스로 구성되어야 합니다. VM 트래픽 처리와 격리된 백업 인터페이스를 위해 다수의 네트워크 인터페이스가 필요합니다. 대부분의 서버급 하드웨어는 이런 조건에 만족합니다. 만약 구형 장비를 사용한다면 최소한 64비트의 멀티프로세서 사용 여부, 8GB 이상으로 램 확장 가능 여부를 확인해야 합니다. 8GB는 가상 호스트 시스템으로써 최소 조건에 속합니다.

4. 가상 디스크에 Thick 프로비저닝을 사용하라
  새로운 VM을 프로비저닝하거나 VM을 위한 새로운 디스크를 생성할 때 성능이 중요하거나 디스크 내용이 자주 변경될 거라면 Thick 프로비저닝을 사용합니다. Thick 프로비저닝이란 가상 디스크에 공간을 할당할 때 고정으로 할당하는 것을 뜻합니다. 예를 들어 30GB의 가상 디스크를 만든다면 스토리지 풀에서 정확히 30GB의 용량을 사용하는 겁니다. 이것의 반대 개념으로는 Thin 프로비저닝(=동적 확장 디스크)이 있습니다. 이것은 처음 만들 때 최소의 용량만 사용하고 데이터가 증가함에 따라 그에 맞춰 사용량도 증가하며 만들 때 지정한 크기까지 확장이 가능한 방식을 뜻합니다. Thin 프로비저닝은 디스크 공간을 아낄 수 있지만 성능이 떨어집니다. 그러므로 가상 디스크에 최적화된 성능이 필요하거나 쓰기 작업이 자주 일어날 경우에는 Thick 프로비저닝을 사용하는 것이 좋습니다.

5. 작업량이 많다면 디스크 이미지를 다른 곳에 나눠서 저장하라
  VM이 성능이 많이 떨어진다면 디스크 이미지들을 서로 다른 스토리지 공간에 저장합니다. 예를 들어 OS, 데이터 스토리지, 로그에 각각 하나씩 가상 디스크를 사용하고 있고 그 가상 디스크 3개를 모두 동일한 LUN에 있는 디스크들에 저장한 데이터베이스 시스템이 있다면 3개의 가상 디스크를 각각 다른 LUN에 있는 디스크들에 저장하여 성능을 높일 수 있습니다.

6. 물리적인 머신과 동일한 보안 규칙을 적용하라
  VM이라고 해서 물리적인 실제 머신과 보안적으로 다를 건 없습니다. 패치, 서비스 팩, 업데이트 등 모든 면에서 물리적인 시스템과 동일하게 VM을 보호해야 합니다. 안티 바이러스 스포트, 안티 스파이웨어 소프트, 방화벽 역시 모두 필요합니다. 사용하지 않는 서비스는 제거하거나 비활성화시키고 안전한 프로토콜만 허용해야 합니다. 모든 서비스에 대해 가능한 보안적인 버전을 사용하도록 합니다. 예를 들어 Telnet, RCP, FTP, HTTP 대신 SSH, SCP, SFTP, HTTPS를 사용합니다.

7. SAN 스토리지
  거대한 가상화 시스템은 SAN 스토리지 없이는 이뤄질 수 없습니다. SAN(Storage Area Network)은 현대의 서버 시스템들이 디스크 공간을 사용하는 방법 중 하나입니다. 거대한 디스크 어레이들이 HBA(Host Bus Adapter), 광 케이블, SAN 스위치들을 통해 시스템과 연결됩니다. SAN 시스템은 데이터베이스, 로그 등 쓰기 속도가 중요한 프로그램에 알맞은 수준의 빠른 디스크 액세스를 제공합니다. 디스크로는 SCSI와 SATA가 있는데 SCSI의 성능이 더 좋습니다. 둘이 동시에 쓰이는 경우도 자주 있지만 용도는 서로 다릅니다. SCSI 기반의 SAN과 SATA 기반의 SAN 모두 듀얼 광채널 설정으로 인해 다양한 RAID 구성이 가능하고 SPOF(Single Point of Failure: 죽으면 시스템 전체가 서비스 불능이 되는 부분)의 존재를 막을 수 있어 로컬 디스크 스토리지보다 뛰어납니다.

8. P2V 마이그레이션과 서비스
  가동 중인 물리적인 시스템을 가상 시스템으로 마이그레이션하기 전에 물리적인 시스템의 모든 서비스를 비활성화시켜 파일시스템의 컨텐츠에 변화를 모두 반영시키고 더 이상 변화가 일어나지 않도록 만듭니다. 데이터베이스, 주요 서비스, 로그는 파일시스템에 계속해서 쓰기 작업을 진행하기 때문에 마이그레이션으로 인해 VM과 물리적인 시스템의 불일치가 발생할 가능성이 있습니다. 변환 과정에서 약간의 불일치는 감수해야겠지만 최소화해야 합니다. 물리적인 시스템을 가상 시스템으로 변환할 때 부팅 가능한 변환용 디스크(bootable conversion disk: 마이그레이션 툴이 있는 부팅 가능한 CD)를 사용한다면 물리적인 시스템의 OS가 정지한 상태로 마이그레이션이 진행되기 때문에 변환 전에 서비스를 비활성화시킬 필요가 없습니다. 이 방법은 빠르고 효율적이지만 VM으로 변환할 시스템에 대해 물리적인 접근을 할 수 있어야 합니다.

9. VMware ESX/vSphere에서는 VMXNET 타입2나 타입3 네트워크 어댑터는 사용하라
  새로운 윈도우 VM을 생성하거나 P2V(Physical to Virtual) 마이그레이션을 진행할 때 새로 생성한 VM의 네트워크 인터페이스 드라이버는 범용성을 이유로 AMD PCNET이나 E1000으로 잡힐 겁니다. VM의 OS가 구형(윈도우 NT, 윈도우 2000, 윈도우 9x)이라거나 꼭 이 드라이버를 사용해야 할 이유가 있는 것이 아니라면 드라이버를 VMXNET 2나 VMXNET 3를 바꾸는 것이 좋습니다. 이 드라이버들은 더욱 실제 물리적인 장비의 드라이버처럼 작동합니다. P2V 마이그레이션에서 이전에 존재하던 드라이버가 VM으로 옮겨가서 IP 주소 정보를 입력할 때 IP 주소 충돌 경고가 발생하는 경우가 있습니다. 예전 드라이버들은 VM에 숨겨진 하드웨어로 이전됩니다. 이런 드라이버들을 VM에서 완전히 삭제하려면 다음 과정을 진행합니다.
1. 커맨드 프롬프트를 열어 아래의 명령어를 입력한다.
SET DEVMGR_SHOW_NONPRESENT_DEVICES = 1 <ENTER>

2. 계속해서 아래의 명령어를 입력한다.
DEVMGMT.MSC <ENTER>

3. View를 눌러 Show Hidden Devices를 선택. Network Adapters를 찾아 회색으로 된 물리 장치를 제거한다.

10. VMware에서 SAN 포맷팅
  VM에 SAN을 사용하기 위해 포맷을 할 때 해당 LUN에 존재할 가장 큰 크기의 가상 디스크 파일을 수용할 수 있도록 최대한 큰 블록 크기를 사용합니다. VMFS-3는 VMFS의 현재 버전으로 리눅스의 ext3와 동일한 기능과 한계점을 가지고 있습니다. VMFS-3에서 가장 큰 단일 파일의 크기는 2TB입니다. 파일 사이즈에 대한 VMware의 블록 사이즈는 아래와 같습니다.
Largest file    VMFS block size
256 GB          1 MB
512 GB          2 MB
1024 GB         4 MB
2048 GB         8 MB
  만약 알맞은 블록 크기를 선택하지 않는다면 해당 LUN에 있을 수 있는 단일 파일의 최대 크기가 제한됩니다. 예를 들어 1MB의 블록 크기로 포맷된 LUN에는 300GB의 가상 디스크 파일이 존재할 수 없습니다. 실제로 여유 공간이 충분한데도 불구하고 장치에 공간이 충분하지 않다는 에러 메시지를 보게 됩니다.

11. 가상 네트워크로 실제(Production) 네트워크를 복제하라
  물리적인 인프라스트럭쳐를 가상 인프라스트럭쳐로 마이그레이션 할 때 디자인과 레이아웃도 가상이 물리를 흉내내서 구현되어야 합니다. 기업용 가상화 소프트웨어는 완벽한 마이그레이션을 위해 가상 스위치, 가상 LAN(VLAN), 사설 네트워크를 생성할 수 있습니다. 모든 경로와 트래픽 흐름을 복제하기 위해 물리적/논리적 네트워크 다이어그램을 분석해야 합니다.

12. 가상화 도구, 성능 향상 프로그램, 게스트 부가 프로그램을 설치하라
  게스트 부가 프로그램에는 VM 성능 향상, 마우스 포인터 통합, 디스플레이 드라이버, 게스트-호스트 시간 동기화 유틸리티 소프트웨어가 포함되어 있습니다. 대부분의 OS마다 각각의 게스트 부가 프로그램이 존재합니다. 꼭 필요하진 않지만 VM 성능과 사용성에 있어서 차이가 큽니다.

13. VM의 화면 보호기를 꺼라
  VM은 화면 보호기가 필요 없습니다. 화면 보호기는 시스템 자원(CPU)을 소모하며 특히 3차원 화면 보호기의 경우 더욱 그렇습니다. 리소스를 잡지 않는 화면 보호기 방식이 필요하다면 '비어 있음(blanking)'을 사용하세요.

14. 호스트 하드웨어에 최신 BIOS 업데이트를 설치하라
  정기적으로 제조사의 웹사이트를 확인해서 시스템 BIOS(Basic Input/Output System) 업데이트를 하여 가상 호스트의 하드웨어에 최신의 시스템 향상 업데이트를 적용합니다. BIOS 업데이트는 자주 있지 않기 때문에 업데이트를 위한 총 다운타임 역시 크지 않습니다. BIOS 업데이트는 가상화 지원, 새로운 장치 지원, 성능 향상 같은 신기능을 제공합니다. 업데이트를 하기 전에 업데이트 유틸리티를 통해 현재 BIOS를 백업하도록 합니다. 잘못된 업데이트나 업데이트 실패는 시스템 BIOS를 다시 설치하기 전까지 시스템을 사용하지 못하게 만듭니다.

15. 서버끼리의 통신을 위해 사설 네트워크를 개설하라
  VM끼리 통신을 위해 사설 응용 네트워크를 개설하는 것은 가상화에 특화된 기능입니다. 이 서버 간의 통신은 가상 호스트 시스템 내부에 존재하기 때문에 매우 빠르고 안전하여 여러 단계를 거치는 프로그램들(multi-tiered applications)을 사용하는데 최적입니다. 엔드 유저가 백엔드 데이터베이스를 직접 접근해야 할 일은 거의 없기 때문에 이런 접근 방식은 프로그램하고만 통신하는 격리된 데이터베이스에 최적의 솔루션입니다.

16. 가능하다면 존(Zone)을 활용하라
  완전한 가상화 게스트 대신 존을 사용하면 더 높은 유연성과 성능을 얻을 수 있으며 자원을 더 현명하게 사용할 수 있습니다. 게다가 사용에 특별한 하드웨어를 필요로 하지도 않습니다. 리눅스 시스템에서 존을 사용하려면 새로운 OpenVZ 커널이 필요합니다. 차선책으로는 기능상 존과 비슷한 chroot의 'jails'는 더 간단하고 더 적은 시스템 개입을 제공합니다. OS 레벨의 가상화라고도 불리는 존은 공유된 커널 환경에서 프로그램을 실행할 수 있는 격리된 유저 공간의 인스턴스를 제공합니다. 프로그램은 마치 하나의 독립된 시스템에서 유일하게 실행되는 것처럼 동작합니다.

17. 호스트 시스템을 계속해서 패치하라
  VM은 관리자와 사용자가 계속해서 사용하는 시스템이기 때문에 패치와 업데이트를 해야 한다는 사실을 기억하기가 쉽습니다. 그와 반대로 호스트 시스템은 패치와 업데이트를 하는 것을 잊어버리기 쉽습니다. 대부분의 가상 시스템은 호스트 레벨에서 침입을 당합니다. 패치하지 않은 호스트는 해커의 1차 대상이 됩니다. 호스트 시스템이 믿을 수 있는 저장소로부터 정기적으로 업데이트를 받도록 설정합니다. 호스트 시스템이 침입당했다는 것은 그 안에 있는 모든 VM이 해킹, 크랙, 셧다운, 제거를 당할 수 있다는 것이기 때문에 호스트 레벨에서 패치되지 않은 취약점은 극히 위험합니다.

18. VM에 큰 변화를 일으키기 전에는 스냅샷이나 클론을 떠라
  변화는 모든 서버 환경에서 일어나는 일이지만 이에 있어서 VM은 물리적인 시스템에 비해 한 가지 장점을 가지고 있습니다. VM 어떤 큰 변화를 주기 전에 스냅샷이나 클론을 떠서 상태를 보존해놓을 수 있습니다. 거대한 환경에서라면 모든 VM에 대해 그런 일을 할 수 없겠지만 중요한 VM들에 대해 이것은 일반적인 백업을 대체할 수 있으며 속도도 훨씬 빠릅니다. 전통적인 클로닝 방법으로는 VM을 종료한 후 단순히 VM이 있는 디렉토리를 복사를 하는 겁니다. 예를 들면 '# cp -Rp Ubuntu_10.04 Ubuntu_10.04_Backup'처럼 말이죠. 이 명령어로 'Ubuntu_10.04' 디렉토리 전체를 퍼미션을 유지한 체 복사함으로써 나중에 VM을 원래의 상태로 복구할 수 있게 됩니다. 복구를 할 때는 원래 디렉토리를 지우고 복사해놨던 디렉토리의 이름만 원래 디렉토리 이름으로 바꾸면 됩니다.

19. VM을 삭제할 때 VM 디스크 이미지도 삭제하라
  VM을 삭제할 때 가상 디스크 이미지도 삭제하지 않으면 디스크 공간을 낭비하게 되고 스토리지가 사용하지 않는 디스크 이미지들로 난장판이 됩니다. 가상 머신을 삭제할 때 해당 가상 머신의 모든 가상 디스크를 함께 삭제하여 사용하지 않는 가상 디스크가 남는 것을 방지해야 하며 스크립트를 통해 주기적으로 스토리지에 검사하여 사용하지 않는 가상 디스크가 있는지 확인해야 합니다. 예를 들어 이 스크립트는 윈도우의 PowerShell 스크립트로서 사용하지 않는 VMware용 가상 디스크를 찾는 작업을 수행합니다.

20. 게스트의 시간을 호스트의 시간에 동기화
  시간 동기화는 시스템과 가상화 관리자에게 있어서 골칫거리 문제입니다. 네트워크 시간 프로토콜(NTP: Network Time Protocol)은 시스템 시간 동기화에 대한 해결책입니다. 하지만 그보다 더 쉬운 방법이 있습니다. 게스트와 호스트 간의 동기화는 여러 방법을 통해 해결할 수 있습니다. 게스트 부가 프로그램('가상화 도구, 성능 향상 프로그램, 게스트 부가 프로그램을 설치하라' 참조)을 설치하여 시간 동기화를 할 수도 있지만 게스트 OS 레벨에서 동기화를 해결할 수도 있습니다. 아래에서 2가지 방법을 설명하고 있습니다. 첫 번째는 젠(Xen) 호스트에 있는 리눅스 게스트를 호스트에 맞춰 동기화하는 겁니다.
# echo 0 > /proc/sys/xen/independent_wallclock
  위 명령어의 효력은 리붓 전까지만 유효합니다. 따라서 /etc/sysctl.conf 파일에 아래의 줄을 추가해서 리붓 후에도 계속 동기화를 하도록 만듭니다.
xen.independent_wallclock=0
  두 번째로 VMware 게스트 툴을 설치한 VMware 게스트는 호스트와 시간을 동기화하는 옵션을 사용할 수 있게 됩니다.

2010/12/19 19:35 2010/12/19 19:35
Posted
Filed under 시스템
참조 원문 : Ubuntu Crack & Hack Win7 User Passwords & Files

  우분투로 패스워드가 걸린 윈7의 파티션에 접근하거나 패스워드를 크랙하는 방법입니다.


1. 패스워드를 크랙하지 않고 그냥 윈7 파티션을 마운트해서 사용

  패스워드를 크랙할 필요가 없이 그냥 파티션 안에 있는 파일만 필요하다면 가장 쉽고 빠른 방법은 이겁니다. 거창하게 설명할 가치는 없지만 그래도 일단 설명하자면 일단 우분투 iso 파일을 받아 CD로 굽거나 부팅 가능한 우분투 USB를 만듭니다. 그리고 만든 CD나 USB를 넣고 부팅해서 언어를 선택한 후 맨 위에 있는 "Try Ubuntu without any changes to your computer"를 선택합니다.

  라이브 CD로 부팅이 끝나면 메뉴에서 "Places"를 눌러 노틸러스를 띄우면 윈7 파티션(NTFS)이 보입니다. 그걸 그냥 선택만 하면 마음대로 윈7 파티션을 돌아다닐 수 있습니다. 즉, 그냥 마운트하는 게 전부죠.

  일부 파일의 경우 만지려고 하면 루트 권한이 필요하다고 나옵니다. 이럴 때는 터미널을 열어서 'gksudo nautilus'를 실행하고 패스워드를 넣어 루트 권한으로 노틸러스를 띄우면 문제 없이 접근이 가능합니다.

  윈7의 입장에서 이것을 방지하려면 윈7에서 보호하고 싶은 파일을 암호화하거나 파티션 전체를 암호화해야 합니다. 그러면 이 방법으로 파일의 존재까지는 볼 수 있지만 열 수는 없게 됩니다. 파티션 전체가 아닌 일부 파일만 암호화했다면 암호화하지 않은 파일에 대해서는 접근이 가능합니다.


2. 윈7의 패스워드를 리셋

  본격적으로 유용한 방법으로 윈7의 패스워드를 없애서 직접 윈7으로 들어가는 방법입니다. 이 작업은 위와 동일하게 우분투 CD로 부팅해서 할 수도 있고 Ubuntu Rescue Remix라는 별도의 시스템 복구용 배포판을 사용할 수도 있습니다. 후자의 경우 따로 다운로드를 받아야 하는 번거로움이 있지만 부팅도 빠르고 chntpw를 별도로 설치하지 않아도 되는 장점이 있습니다. Ubuntu Rescue Remix는 http://ubuntu-rescue-remix.org/Download에서 다운로드 받을 수 있습니다.

  일단 어떤 걸 사용하든 다운로드 후 위에서 했던 것과 동일하게 CD나 USB로 만들어 부팅합니다. 우분투 CD의 경우 동일하게 "Try Ubuntu without any changes to your computer"를 선택하면 되고 Ubuntu Rescue Remix의 경우 프롬프트가 나오면 'live'를 타이핑해서 디폴트 모드로 진입합니다.

  우분투 CD의 경우 터미널을 띄웁니다. Ubuntu Rescue Remix는 이미 터미널 상태일 겁니다. 'sudo fdisk -l'로 윈7이 설치된 드라이브와 파티션을 파악합니다. 이 글에서는 /dev/sda2가 윈7의 설치된 디스크 및 파티션이라고 가정하겠습니다. 이후 글에서 나오는 /dev/sda2를 자신에 맞게 수정하시기 바랍니다.

  이제 아래의 명령어로 윈7 파티션을 마운트하고 윈도우 패스워드 파일이 있는 곳으로 갑니다.
sudo ntfs-3g /dev/sda2 /mnt/windows –o force
cd /mnt/windows/Windows/System32/config
  그리고 윈도우의 패스워드를 담고 있는 SAM 파일로부터 유저 리스트를 출력하고 그 중 원하는 유저의 패스워드를 삭제합니다. 참고로 우분투 CD로 작업하는 경우 chntpw가 기본적으로 없기 때문에 'sudo apt-get install chntpw' 명령어를 통해 별도로 설치해야 합니다. CD로 부팅했더라도 가상 저장공간을 사용하기 때문에 설치가 가능합니다.
sudo chntpw –l SAM
sudo chntpw -u "유저명" SAM
(다음 화면에서 '1'을 누르고 엔터를 눌러 첫 번째 옵션 선택)
  그러면 하이브 파일들에 쓰기 작업을 해도 되냐고 묻는데 이때 'Y'를 누릅니다. 이제 CD나 USB를 제거하고 리붓하면 패스워드 없이 윈도우로 로그인할 수 있습니다.

  이 방법 역시 윈도우에서 암호화로 막을 수 있습니다. 일부 파일만 암호화했다면 이전의 방법과 마찬가지로 암호화되지 않은 파일만 건들 수 있고 만약 파티션 전체를 암호화했다면 패스워드 파일을 만질 수 없기 때문에 이 방법 자체가 불가능합니다.


3. Ophcrack을 이용한 브루트 포스 크랙

  이 방법은 패스워드를 초기화하는 것이 아니라 원래의 패스워드를 알아내는 겁니다. 장점은 이전의 방법과 달리 원래 패스워드를 알아내 진짜 주인 행세를 하는 것이기 때문에 암호화된 파일도 접근할 수 있다는 겁니다. 방법도 간단하여 위에서 봤던 방법들을 무색하게 합니다.

  먼저 Ophcrack 사이트에서 라이브 CD 이미지를 다운로드합니다. 윈7용은 없지만 비스타용으로 동일하게 작업할 수 있으므로 비스타용을 다운로드합니다. 다운로드한 이미지를 동일하게 CD나 USB로 만들어 부팅합니다.

  부팅이 끝나면 자동으로 파티션 감지를 위한 창이 떴다가 사라지고 크랙을 위한 ophcrack 프로그램 창이 뜹니다. 그리고 자동으로 존재하는 모든 윈도우 계정에 대해 크랙을 시작합니다. 패스워드를 알아낸 후 윈7으로 부팅해서 정상적으로 로그인하면 됩니다.

  이 방법의 좋은(?) 점은 암호를 복잡하게 설정하지 않는 한 막을 방법이 없다는 겁니다. 정확히 막는다기 보다는 크랙 시간을 길게 만들어 포기하게 만드는 거지만요. 그래도 문자랑 숫자만 사용하고 14자리 이하라면 금방 뚫릴 겁니다.

2010/12/02 14:55 2010/12/02 14:55
Posted
Filed under 시스템
참조 원문 : Top 5 Mistakes Made by Linux First-Timers

  리눅스를 (데스크탑용으로)처음 접하는 사람들이 흔히 격는 실수를 다룬 기사입니다. 완벽히는 아니지만 그래도 어느 정도 공감이 가네요. 이런 내용들은 언제나 논란의 여지가 많으니 그냥 재미삼아 읽어주는 센스가 필요합니다.


1. 윈도우라고 생각
  심지어 머리로는 알고 있더라도 몸에 밴 습관을 무시할 수가 없습니다. 쓰다보면 어느새 윈도우의 조작법을 행하고 있는 자신을 발견하곤 하지요. 그나마 요즘은 데스크탑용 리눅스 배포판들이 윈도우나 맥과 많이 비슷해지긴 했지만 그래도 같지는 않기 때문에 리눅스를 자신이 쓰던 윈도우나 맥처럼 억지로 바꾸려고 하면 피곤해집니다. 리눅스는 리눅스니 그냥 거기에 적응하는 것이 좋습니다.

  그리고 원문에서는 리눅스가 어려운 게 아니라 그냥 윈도우나 맥과 다를 뿐이라고 하지만 제 개인적인 생각으로는 그건 그냥 프로그램을 실행하고 사용하는 수준일 때의 이야기고 문제가 발생했을 경우 그것을 해결하는데 있어서 확실히 리눅스가 더 어렵다고 생각합니다. 인터넷을 통해 얻을 수 있는 트러블슈팅 관련 지식도 유저가 비교적 적고 배포판마다 문제와 해결 방법이 다를 수 있는 리눅스보다 유저가 넘쳐나고 제품도 단일화된 윈도우가 더 얻기 쉽다고 생각하고요. 리눅스가 어렵지 않다고 생각하는 것도 자신이 리눅스에 너무 익숙해져서 그럴 수 있는 법이죠. 그래도 어쨌든 옛날에 비하면 지금은 확실히 사용하기 쉬워진 것 같긴 합니다.


2. 루트 계정으로 실행
  윈도우와 달리 리눅스는 유저가 관리자 권한을 일반적으로 사용하지 않는다는 내용인데 전혀 동감 안 가고 오히려 제가 보기엔 리눅스가 윈도우 이상으로 사용하지 않나 싶네요. 윈도우는 일반 계정으로 자신의 계정 내에 프로그램을 설치할 수 있지만 리눅스는 패키지 관리로 뭐 좀 설치하려고 하면 루트 권한 내놓으라고 하니...게다가 그나마 데비안 기반의 배포판 같은 경우엔 직접 루트 계정으로 로그인하는 것을 억지로 막기라도 했지(물론 그런다고 못 하는 건 아니지만) 레드햇 기반 같은 경우에는 책이나 문서를 보면 뭘 하든 루트 계정으로 작업하는 게 태반이죠. 요즘엔 레드햇 계열도 기본적으로 루트로 로그인을 못하게 막는 등 좀 나아진 것 같지만. 어쨌든 실수 방지나 보안을 이유로 루트 권한을 사용하는 것을 최소화하는 것이 맞는 말입니다.


3. 소프트웨어를 찾기 위해 구글 이용
  찾아도 그건 윈도우용 프로그램입니다 -_-; 요즘 배포판이 참 편한 이유 중 하나가 배포판 내에 패키지 검색 및 다운로드가 가능한 툴(예: Ubuntu Software Center)이 포함되어 있다는 겁니다. 그냥 실행해서 검색하고 설치 버튼 누르면 사용할 수 있습니다. 대부분이 무료고요. 퀄리티가 대부분 떨어지긴 하지만...

  주제와 좀 다른 사항이긴 하지만 저 같은 사람에게 리눅스를 메인OS로 사용할 수 없게 만드는 가장 큰 걸림돌은 바로 게임입니다. 게임이란 게 가상 머신으로 돌릴 만큼 만만한 프로그램도 아니고 와인으로 에뮬레이트하는 것도 제 성능이 안 나오는 것은 물론 실행 자체도 보장할 수 없고 그래픽 드라이버 지원도 리눅스는 미적지근하고...이것만 어떻게 해결이 되면 리눅스로 갈아타는 것도 어려운 일이 아닐텐데 말이죠.


4. 커맨드 라인을 싫어함
  이건 참 언제나 논란의 여지가 많은데...'일반 유저는 GUI로 어떻게든 다 해결할 수 있게 만들어야 함' VS '경우에 따라 커맨드 라인이 더 효율적이니 일반 유저도 커맨드를 익혀야 함' 뭐 이런 토론은 언제나 있는 것 같습니다. 원문 작성자도 '특히나 우분투의 경우 대부분 커맨드가 필요 없겠지만 혹시나 필요한 일이 생겨도 두려워 마라'라고 하고 있습니다만 보통 두려운 게 정상이죠 -_-;; 두려워 하지 말라는 건 좀 무리라고 생각하고요. 윈도우가 거의 표준OS로 사용되는 현재 데스크탑의 세계에서 일반 유저에게 커맨드를 사용하라는 건 개인적인 생각으론 아무래도 어불성설인 것 같습니다. 특히 젊은이들도 어렵다고 하는 판에 나이가 어느 정도 있으신 분들이라면...리눅스가 데스크탑으로 널리 퍼지기 힘든 가장 큰 이유들 중 하나가 이거겠죠.


5. 너무 쉽게 포기
  첫 번째 주제와 거의 같은 내용이라고 생각하는데 평소에 사용하던 것과 다르니 아무래도 때려치기 쉽습니다. 전에 잘 썼던 걸 버리고 뭔가 대체할 것을 배운다는 건 아무것도 모르는 상태에서 새로 배우는 것보다 오히려 어렵지 않나 싶습니다. 예전에 잘 쓰던 것이 '돌아와'라고 유혹을 해대니까요. 근데 아무래도 이런 건 개인성향의 문제라 딱히 대책이 없는 것 같습니다. 안 되면 열 받아서 근성으로 될 때까지 하는 사람이 있는 반면 그냥 바로 포기하는 사람이 있으니까요. 다만 리눅스에 남으면 얻을 수 있는 게 앞으로 더 많아졌으면 좋겠습니다. 포기하고 싶어도 포기할 수 없을 만큼 말이죠.

2010/11/23 14:26 2010/11/23 14:26
Posted
Filed under 시스템
참조 원문 : Softlinks vs. Hardlinks: A Quick Explanation

  심볼릭 링크와 하드 링크에 대해 '살짝' 알아보는 글입니다. 포스트할 가치가 있나에 대해서 좀 고민했지만 이거 전에 한 포스트를 생각하면 못할 것도 없군요 -_-;


심볼릭 링크란?

  다 필요 없고 윈도우의 바로가기입니다. 단순히 다른 파일을 가리키고 있는 파일이지요. 심볼릭이든 하드든 간에 링크는 ln 명령어로 만듭니다. 심볼릭 링크를 만들 때는 -s 옵션을 사용하며 대략 아래와 같은 명령어 형식으로 만듭니다.
ln -s target_file link_file_name
  이렇게 만들어진 링크는 'ls -l' 명령어를 통해 어떤 파일을 가리키고 있는지 볼 수 있습니다.
mirashi@myservlab:/home/mirashi$ ln -s /bin/bash ./bash_link
mirashi@myservlab:/home/mirashi$ ls -l
total 0
lrwxrwxrwx 1 mirashi mirashi 9 2010-11-16 11:40 bash_link -> /bin/bash
  자, 심볼릭 링크는 이렇게 대충 넘어가고 이번에는 하드 링크를 살펴보겠습니다.


하드 링크란?

  심볼릭 링크가 이미 존재하는 파일을 가리키는 새로운 파일이라면 하드 링크는 원래 파일의 데이터에 대한 또 다른 접근 경로입니다. 아니, 복사본도 아니고 애매하게 또 다른 접근 경로라니...이게 무슨 뜻이냐면 심볼릭 링크와 비슷하게 하드 링크도 어떤 것을 가리키지만 그 가리키는 것이 이미 존재하는 파일을 가리키는 것이 아니라 파일 시스템에 있는 데이터의 위치를 가리킵니다. 아래가 심볼릭 링크에 대한 모습이라면
심볼릭 링크 -> 원래 파일 -> 파일 시스템의 데이터
아래는 하드 링크의 모습입니다.
하드 링크 -> 파일 시스템의 데이터 <- 원래 파일
  두 링크의 차이를 가장 체감할 수 있을 때는 바로 '원래 파일'을 지웠을 때입니다. 심볼릭 링크의 경우 원래 파일을 지우면 파일 시스템의 데이터에 접근할 방법이 사라집니다. 하지만 하드 링크의 경우 원래 파일을 지워도 데이터에 접근하는데 아무런 문제가 없습니다. 자신도 완전한 하나의 파일이기 때문입니다. 그러나 일반적인 복사본과는 엄연히 다릅니다. 파일 시스템에 있는 데이터를 복사한 것이 아니라 그 겉모습인 파일(정확히는 Inode 값)만 복사했기 때문입니다. 따라서 진짜 복사했을 때와 달리 파일 시스템 내의 데이터 자체는 여전히 1개만 존재합니다. 파일과 실제 파일이 가리키는 데이터를 동일하게 생각하면 이해가 되지 않겠지만 파일을 '실제 데이터에 대한 정보를 담고 있는 정보체'로 실제 데이터와 분리해서 생각한다면 이해가 되실 겁니다.

  특정 파일이 가리키는 데이터에 대한 하드 링크의 개수를 보는 첫 번째 방법은 'stat 파일명' 명령어를 사용하는 겁니다.
mirashi@myservlab:/home/mirashi$ ln /bin/bash ./bash_hard
mirashi@myservlab:/home/mirashi$ stat ./bash_hard
  File: `./bash_hard'
  Size: 875596        Blocks: 1712       IO Block: 4096   regular file
Device: 803h/2051d    Inode: 131077      Links: 2
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-11-16 06:52:57.028456283 +0900
Modify: 2009-09-14 14:09:21.000000000 +0900
Change: 2010-11-16 13:12:27.671455383 +0900
  만든 하드 링크는 1개지만 원본 파일도 결국 실제 데이터를 가리키는 링크이기 때문에 생성한 하드 링크와 다를 게 없습니다. 즉, 원본 파일도 하드 링크의 개수에 포함됩니다.

  하드 링크의 개수를 보는 두 번째 방법은 'ls -l' 명령어를 사용하는 겁니다.
mirashi@myservlab:/home/mirashi$ ls -l
total 856
-rwxr-xr-x 2 root root 875596 2009-09-14 14:09 bash_hard
  2번째 열을 보면 숫자 '2'가 적혀 있는데 이것이 바로 이 파일이 가리키고 있는 데이터에 대한 하드 링크의 개수입니다.


장단점

  지금까지 심볼릭 링크와 하드 링크에 대해 간단히 알아봤는데요. 사실 하드 링크에는 아래의 2가지 제약이 있습니다.
  1. 다른 파일 시스템에 있는 데이터에 대해 하드 링크 생성 불가.
  2. 디렉토리에 대한 링크 생성 불가.
  위의 경우에는 심볼릭 링크를 사용해야 하며 위의 경우 말고도 같은 프로그램을 여러 버전 별로 가지고 있고 다른 프로그램이나 스크립트에서 그 프로그램을 실행해야 하는 경우에도 프로그램 소스나 스크립트를 변경할 필요 없이 원하는 버전을 실행하도록 심볼릭 링크를 유용하게 사용할 수 있습니다.

  반면 하드 링크에는 아래와 같은 장점이 있습니다.
  1. 성능 : 하드 링크는 데이터가 있는 위치를 직접 가리키고 있기 때문에 다른 파일을 가리키고 있는 심볼릭 링크에 비해 약간 더 빠르다.
  2. 저장 공간 : 하드 링크 파일은 마치 용량을 점유하고 있는 것처럼 보이지만 진짜로 데이터를 복사한 것이 아니라 이미 존재하는 데이터의 위치만 (Inode를 통해)가리키고 있으며 별도의 데이터를 저장하지 않기 때문에 용량을 차지하지 않는다. 반면 심볼릭 링크는 자신이 가리키고 있는 파일의 위치를 데이터로서 저장하기 때문에 약간의 용량(보통 4KB)을 차지한다.
  덤으로 원래 파일이 지워지면 쓸모없어지는 심볼릭 링크와 달리 하드 링크는 1개라도 남아 있을 경우 실제 데이터가 남는다는 장점이 있습니다.

2010/11/16 11:44 2010/11/16 11:44
Posted
Filed under 시스템
참조 원문 : Network Install Ubuntu using Windows TFTP Server

  일단 PXE이란 Pre-boot eXecution Environment의 약자로서 NIC를 통해 부팅할 수 있는 환경을 뜻합니다. 당연히 부팅하는 컴퓨터는 아무런 정보도 가지고 있지 않기 때문에 브로드캐스팅이 닿는 곳 내에 부팅에 필요한 이미지와 이것을 가지고 전송해 줄 일종의 서버 역할을 할 컴퓨터가 필요합니다.

  앞서 말한 대로 부팅을 할 컴퓨터(이후 클라이언트)는 네트워크에 대해 아무 정보가 없기 때문에 부팅 후 DHCP 서버를 통해 네트워크 정보를 받아와야 합니다. 그리고 DHCP 서버에서 네트워크 정보를 받아온 후 부팅에 필요한 파일을 건네받는데 이 때 인증절차가 따로 없는 TFTP를 이용하게 됩니다. 참고로 DHCP 서버는 클라이언트가 TFTP를 사용하도록 유도합니다.

  위 용도로 사용하기에 적절한 윈도우용 DHCP 및 TFTP 프로그램으로 TFTPD32라는 프로그램이 있습니다. DHCP와 TFTP를 동시에 처리할 수 있어 유용합니다.

  필요한 프로그램을 구했다면 이제 부팅에 사용할 이미지 파일이 필요합니다. 이제 우분투의 부팅 이미지를 받을 것입니다.

  위의 경로에서 원하는 버전을 골라 netboot.tar.gz 파일을 받습니다. 폴더를 하나 만들고 받 은 파일을 집어넣어 압축을 풀어줍니다. 자신이 받은 버전에 따라 ubuntu-installer/i386/ 또는 ubuntu-installer/amd64/ 로 이동하여 pxelinux.cfg 폴더와 pxelinux.0 파일을 복사하여 netboot.tar.gz 파일이 있는 곳에 붙여넣습니다. 그러면 최종적으로 새로 만들었던 디렉토리에 netboot.tar.gz 파일(지워도 됨), pxelinux.cfg 폴더, pxelinux.0 파일, ubuntu-installer 폴더가 있을 것입니다.

  이제 아까 소개한 TFTP32 프로그램을 실행시킵니다. 간단한 프로그램 창이 뜨는데 DHCP Server 탭에서 세팅을 시작합니다. 딱히 설명할 것도 없지만 그래도 안 하면 섭섭하므로 설명을 달아보겠습니다.

IP pool starting address: DHCP에서 할당할 IP 주소의 시작이 될 주소입니다.
Size of Pool: 이 프로그램이 할당할 주소의 개수입니다. 위에서 설정한 IP부터 시작해서 이 개수만큼 할당하겠죠.
Boot File: DHCP로 클라이언트에게 네트워크 정보를 준 후 TFTP를 이용해 건내줄 부팅 이미지 파일의 이름입니다. pxelinux.0 라고 적습니다.
WINS/DNS Server: 전혀 필요가 없을 것 같지만 혹시 모르니 DNS 서버IP를 적어줍니다.(예: 168.126.63.1)
Default router: 이름 그대로 자신의 직속 상관(??) 라우터 주소를 적어줍니다. 공유기를 쓰는 환경이라면 보통 공유기의 주소로 사용되는 192.168.0.1이나 192.168.0.254가 되겠죠.
Mask: 서브넷 마스크를 적어줍니다. 일반적으로 255.255.255.0이 되겠죠.

  그 후 아래 'Settings' 버튼을 클릭해서 설정 창을 띄웁니다. 가장 위에 Base Directory에 아까 다운로드 전에 만든 디렉토리를 세팅합니다.

  그리고 중요한 것이 하나 남았는데...자신이 사용하는 방화벽과 윈도우 방화벽에서 69번 UDP포트를 열어주거나 사용하는 TFTP 프로그램을 허용해주셔야 정상적으로 작동합니다. 전 윈도우 방화벽을 생각 못하고 삽질했습니다;

  여기까지 마치면 모든 준비가 끝난 것입니다. 이제 클라이언트가 될 컴퓨터를 키고 CMOS 셋업에서 각 보드에 알맞는 메뉴로 들어가 네트워크 부팅을 활성화시켜 줍니다. 그리고 다시 부팅하면 네트워크를 통해 부팅 이미지를 받은 후 친숙한 설치화면이 뜹니다.

  당연하지만 클라이언트는 PXE를 통해 이미지 파일만 받은 것이기 때문에 실제 설치를 시작하면 모두 네트워크를 통해 받아 설치하게 됩니다.


  윈도우가 아닌 우분투에서 (우분투 설치를 위한)PXE 서버를 돌리는 방법은 여기를 통해 보실 수 있습니다.

2010/04/02 23:31 2010/04/02 23:31