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

Posted
Filed under 프로그램과 명령어/기타 프로그램
원문 링크 : Advanced Copy – Modified cp Command That Shows Progress Bar
홈페이지 : http://beatex.org/web/advancedcopy.html

  cp 명령어를 개조하여 파일 복사 중 진행 상황과 초당 복사 속도를 보여주는 옵션(-g)을 추가한 프로그램입니다. 기본 cp에도 꼭 있었으면 하는 기능이지만 과연 그렇게 될 일이 있을런지...기능 자체는 마음에 드는데 당연하지만 제대로 사용하려면 기존의 cp를 대체하도록 복사해야 한다는 점이 좀 걸리네요.
2013/09/04 09:29 2013/09/04 09:29
Posted
Filed under 프로그램과 명령어/네트워크와 보안
참조 원문 : How to conduct security vulnerability assessment of a remote server with OpenVAS

  OpenVAS는 취약점 스캐닝 및 관리 도구로 이루어진 오픈 소스 프레임워크로서 GPL 라이선스로 다양한 플랫폼에서 자유롭게 사용할 수 있습니다.

출처: http://www.openvas.org/

  이 글에서는 OpenVAS로 원격 서버에 대한 보안 취약점 분석 방법을 알아보겠습니다. OpenVAS는 소스 코드나 리눅스 패키지로 설치할 수 있으며 원한다면 가상 어플라이언스로서 실행하는 것도 가능합니다. 이 글에서는 VirtualBox를 이용해 가상 어플라이언스로 돌리는 것을 기준으로 하겠습니다.


1. OpenVAS 가상 어플라이언스 설치
  먼저 OpenVAS OVA 이미지를 내려받습니다. 그 후 VirtualBox를 실행하고 "Import Appliance"를 선택하여 OVA 이미지를 추출합니다. "Bridge Adapter"를 선택하고 스캔 대상이 있는 네트워크에 연결합니다.

  OpenVAS 어플라이언스를 켭니다. 콘솔 스크린이 나타나면 root로 로그인합니다. 디폴트 root 패스워드는 "root"입니다.

  OpenVAS는 Debian Squeeze를 기반으로 합니다. 기본적으로 설치 직후에 기반 시스템을 업그레이드하여 최신 보안 업데이트를 설치하는 것이 좋습니다.
# apt-get dist-upgrade
# apt-get upgrade
  미리 설치된 암호키를 제거한 뒤, 새로운 키를 생성합니다. 이 키는 인증된 스캔 결과와 기타 인증 정보를 암호화할 때 사용합니다.
# gpg --homedir=/usr/local/etc/openvas/gnupg --delete-secret-keys 94094F5B
# gpg --homedir=/usr/local/etc/openvas/gnupg --delete-keys 94094F5B
# openvasmd --create-credentials-encryption-key
  참고로 위의 키 생성 작업은 많은 시간을 소요할 수 있습니다.(최대 60분) 키 생성이 끝나면 OpenVAS 매니저를 재시작합니다.
# /etc/init.d/openvas-manager restart
  OpenVAS에는 Greenbone Security Assistant라는 웹 클라이언트가 포함되어 있습니다. 이 웹 클라이언트는 OpenVAS의 모든 기능을 활용하기 위해 최적화된 웹 기반의 인터페이스를 제공합니다.

2. OpenVAS 관리 웹 인터페이스에 접속
  OpenVAS의 웹 인터페이스에 접속하려면 https://<OpenVAS 어플라이언스의 IP 주소>로 접속합니다. OpenVAS는 자체 서명한 SSL 인증서를 사용합니다. 그러므로 웹 브라우저로 처음 접속했을 때 예외 사이트로 등록해야 합니다. 미리 설정된 관리용 OpenVAS 계정(login: "admin", 패스워드: "admin")으로 로그인합니다. 그러면 아래와 같은 OpenVAS의 메인 윈도우를 볼 수 있습니다.

출처: 참조 원문 사이트


3. 스캔 대상 설정
  먼저 할 일은 스캔 대상(예: 스캔할 원격 호스트)을 설정하는 겁니다. "Configuration" -> "Targets" 메뉴에서 새로운 대상을 추가하기 위해 별 모양의 아이콘을 클릭합니다.

  "manual"을 선택하여 원격 호스트의 IP 주소를 입력합니다. 드랍 다운 리스트에서 포트 리스트를 선택합니다. 완료하면 "Create Target" 버튼을 클릭합니다.

출처: 참조 원문 사이트


4. 설정과 스캔 시작
  스캐닝 시작을 위해 새로운 작업을 생성합니다. "Scan Management" -> "New Task" 메뉴를 선택합니다. 새로운 스캔의 이름을 입력합니다. "Scan Config"에서 원하는 설정을 선택합니다. 이것은 어떤 취약점 테스트를 진행할지를 결정합니다. 밑에서도 설명하겠지만 원하는대로 직접 scan config를 만들 수도 있습니다. "Scan Target"에서 아까 만든 대상을 선택합니다. 모든 선택이 끝나면 "Create Task" 버튼을 클릭합니다.

출처: 참조 원문 사이트

  작업을 생성하면 "Actions" 필드에 있는 "Play" 버튼을 클릭하여 대상에 대한 스캐닝을 시작합니다. Task Details 페이지에서 스캔 진행률을 확인할 수 있습니다.

출처: 참조 원문 사이트


5. 취약점 스캔 보고서 확인
  스캔이 끝난 후 "Actions" 필드에 있는 돋보기 아이콘을 클릭하여 스캔 결과의 요약 내용을 확인할 수 있습니다.

  스캔 결과는 "High", "Medium", "Low" 위험도로 분류되며, 자세한 로그도 포함하고 있습니다. 밝혀진 보안 문제마다 요약된 취약점 내용, 영향도, 관계된 소프트웨어/OS, 보완 방법을 보고합니다. 아래는 샘플 스캔 보고서의 스크린샷입니다.

출처: 참조 원문 사이트

  원한다면 스캔 보고서를 다운로드가 가능한 문서로 출력할 수 있습니다. OpenVAS는 스캔 보고서를 PDF, TXT, HTML, XML을 포함한 다양한 포맷으로 출력하는 것을 지원합니다.

  또한 "Asset Management" -> "Hosts" 메뉴를 통해 각 스캔 대상에 대해 자세한 "prognostic(진단)" 보고서를 확인할 수 있습니다. 조사를 원하는 대상에 대해 "Prognostic Report" 아이콘을 클릭합니다. 위에서 이미 설명했던 스캔 보고서가 특정 스캔에 대한 결과를 제공했다면, 진단 보고서는 특정 호스트에 대한 모든 이전 스캔의 총체적인 결과를 자세히 제공합니다. 일반적인 진단 보고서는 아래와 같이 생겼습니다.

출처: 참조 원문 사이트


6. 취약점 스캔을 원하는대로 설정하기
  스캔 설정을 원하는대로 생성하거나 수정하는 것도 가능합니다. 이미 있는 스캔 설정을 보려면 "Configuration" -> "Scan Configs"로 갑니다. 아래는 스캔 설정이 네트워크 취약점 테스트(NVTs) 목록을 포함하고 있는 모습입니다. 현재 스캔 설정을 수정하기 위해 설정을 XML로 출력할 수 있으며, 그것을 수정한 후 다시 읽어들일 수 있습니다.

출처: 참조 원문 사이트

  또한 "Configuration" -> "Port Lists"에서 스캔할 포트의 목록도 수정할 수 있습니다.

출처: 참조 원문 사이트


7. 최신 취약점 테스트 도구 다운로드
  OpenVAS 프로젝트는 네트워크 취약점 테스트(NVTs), 보안 컨텐트 자동화 프로토콜(SCAP), CERT 자문의 공개 정보 공급을 유지하고 있습니다. 간단히 "Administration"에서 "Synchronizing with Feed now" 버튼을 클릭함으로써 최신 정보 공급을 반영할 수 있습니다.

출처: 참조 원문 사이트

2013/08/18 17:12 2013/08/18 17:12
Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : 20 Linux Tips Worth Trying

  GRUB에 이상이 발생한 경우 복구하는 방법을 소개합니다. 먼저 GRUB 2를 지원하는 라이브CD/DVD(우분투 9.10 이상)로 부팅 후 터미널을 열어 fdisk -l 명령어로 복구할 GRUB 2의 설정 파일이 있는 파티션(과 루트 파일시스템의 파티션)을 확인합니다. 디폴트의 경우 첫 번째 파티션이 /boot 파일시스템, 두 번째 파티션이 루트 파일시스템을 담고 있으므로 여기서는 각각 /dev/sda1과 /dev/sda2로 가정하고 설명하겠습니다. 아래의 절차에 따라 복구를 진행합니다.
$ sudo mkdir /media/sda
$ sudo mkdir /media/sda/boot
$ sudo mount /dev/sda2 /media/sda/
$ sudo mount /dev/sda1 /media/sda/boot
$ sudo mount --bind /dev /media/sda/dev
$ sudo mount --bind /proc /media/sda/proc
  루트 파일시스템을 마운트한 위치에 chroot를 걸어줍니다.
$ sudo chroot /media/sda
  GRUB을 재설치합니다.
# grub-install /dev/sda
Installation finished. No error reported.
  에러가 발생한다면 아래의 명령어를 실행합니다.
# grub-install --recheck /dev/sda
  설치 후 chroot를 종료하고 GRUB을 복구하기 위해 걸었던 마운트를 해제한 뒤에 리붓을 합니다.
# exit
$ sudo umount /media/sda/proc
$ sudo umount /media/sda/dev
$ sudo umount /media/sda/boot
$ sudo umount /media/sda
$ sudo reboot
  이런 번거러운 작업을 해야 하는 이유는 설치할 GRUB의 설정 파일이 필요하기 때문입니다.

2013/08/14 14:23 2013/08/14 14:23
Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : How to create a secure incremental offsite backup in Linux with Duplicity

  재해 복구를 위해 원격 지역에 백업을 하는 경우 보통은 공인망을 통해 데이터가 오가기 때문에 암호화를 염두해야 합니다. 또한 백업으로 인해 소모되는 대역폭, 디스크 스토리지, 시간을 아끼기 위해 풀 백업이 아닌 증강 백업의 지원여부도 중요합니다.

  Duplicity는 암호화가 가능한 증강 백업 툴로서 librsync를 사용하여 대역폭/공간에 있어 효율적인 증강 아카이브를 생성합니다. 또한 GnuPG를 사용해 백업 아카이브를 암호화와/나 사인을 할 수 있어 인증받지 않은 데이터 접근과 조작을 방지합니다.

  이 글에서는 Duplicity로 원격 지점에 보안이 적용된 증강 백업을 하는 방법을 설명합니다.

Duplicity 설치
  데비안 계열에 설치하는 방법은 아래와 같습니다.
$ sudo apt-get install duplicity python-paramiko
  레드햇 계열에 설치하는 방법은 아래와 같습니다. 단, CentOS나 RHEL은 먼저 EPEL 저장소를 사용해야 합니다.
$ sudo yum install duplicity python-paramiko

SCP를 통한 보안성 있는 원격 증강 백업
  로컬 디렉토리(예: ~/Downloads)의 증강 백업본을 만들어 SCP를 이용해 원격 SSH 서버에 전송하려면 아래의 명령어를 사용합니다. 참고로 그 전에 원격 SSH 서버에 대해 패스워드 없이 SSH 로그인을 할 수 있도록 설정해야 합니다.
$ duplicity ~/Downloads scp://user@remote_site.com//home/user/backup/
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
GnuPG passphrase:
Retype passphrase to confirm:
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1375918500.17 (Wed Aug  7 19:35:00 2013)
EndTime 1375918539.07 (Wed Aug  7 19:35:39 2013)
ElapsedTime 38.90 (38.90 seconds)
SourceFiles 3
SourceFileSize 65982804 (62.9 MB)
NewFiles 3
NewFileSize 65982804 (62.9 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 3
RawDeltaSize 65978708 (62.9 MB)
TotalDestinationSizeChange 66132356 (63.1 MB)
Errors 0
-------------------------------------------------
  처음 원격 백업을 실시하면 풀 백업을 하게 되며, 암호화를 위한 초기 GnuPG 패스프레이즈를 설정하게 됩니다. 그 다음부터는 증강 백업을 하게 되며, 처음에 설정한 GnuPG 패스프레이즈를 매번 입력해야 합니다.

비대화 모드를 통한 보안성 있는 원격 증강 백업
  패스프레이즈를 입력하는 것이 싫다면 아래처럼 Duplicity를 실행하기 전에 PASSPHRASE 환경변수를 설정할 수 있습니다.
$ PASSPHRASE=mypass duplicity ~/Downloads scp://user@remote_site.com//home/user/backup/
  커맨드라인에 평문 패스프레이즈를 넣기 싫다면 아래의 백업 스크립트를 사용하는 방법도 있습니다. 당연히 본인만 읽을 수 있도록 퍼미션을 설정해야 합니다.
export PASSPHRASE=yourpass
duplicity ~/Downloads scp://user@remote_site.com//home/user/backup/
unset PASSPHRASE

암호화 없이 원격 증강 백업
  암호화할 필요가 없다면 암호화를 비활성화할 수도 있습니다.
$ duplicity --no-encryption ~/Downloads scp://user@remote_site.com//home/user/backup/

원격 백업의 무결성 확인
  중요한 데이터의 경우 원격 백업이 성공적으로 됐는지 확인할 필요가 있습니다. 로컬과 원격 볼륨이 동일한지 확인하려면 아래의 명령어를 사용합니다.
$ duplicity verify scp://user@remote_site.com//home/user/backup/ ~/Downloads
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Wed Aug  7 19:34:52 2013
Verify complete: 8 files compared, 0 differences found.
  참고로 "verify" 옵션을 사용할 때는 로컬과 원격 디렉토리의 순서를 반대로 적어야 합니다. 즉, 원격 디렉토리를 먼저 적어야 합니다.

원격 백업을 사용하여 복구
  원격 백업본을 사용해 로컬에 적용하려면 아래와 같은 명령어를 실행합니다.
$ duplicity scp://user@remote_site.com//home/user/backup/ ~/Downloads_restored
  원격 백업을 사용하여 복구하려면 지정한 복구 대상 디렉토리(예: Downloads_restored)가 로컬에 존재하지 않아야 합니다.

FTP를 통한 보안성 있는 원격 증강 백업
  SCP와 더불어 FTP를 포함한 몇 가지 다른 프로토콜을 사용하는 것도 가능합니다. FTP를 사용하려면 아래와 같은 형식을 이용합니다.
$ duplicity ~/Downloads ftp://username@ftp_server.com/backup_directory
  비대화형으로 실행하려면 FTP_PASSWORD 환경변수에 FTP 패스워드를 설정합니다.
$ FTP_PASSWORD=mypass duplicity ~Downloads ftp://username@ftp_server.com/backup_directory

트러블슈팅 팁
  아래와 같은 에러가 발생한다면 python용 SSH2 프로토콜 라이브러리를 설치하지 않은 것입니다.
BackendException: Could not initialize backend: No module named paramiko
  문제를 해결하기 위해 데비안 계열의 경우 아래 명령어를 실행합니다.
$ sudo apt-get install python-paramiko
  레드햇 계열의 경우 아래 명령어를 실행합니다.
$ sudo yum install python-paramiko

  아래와 같은 에러가 발생한다면 원격 SSH 서버에 대해 패스워드 없이 SSH 로그인을 할 수 있도록 설정하지 않은 것입니다.
BackendException: ssh connection to xxx@xxxx failed: No authentication methods available
2013/08/12 15:39 2013/08/12 15:39
Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : How to back up hard drives for disaster recovery with Clonezilla

  Clonezilla는 GPL 라이선스의 디스크 복제 및 백업 소프트웨어입니다. 디스크/파티션을 다른 로컬 디바이스로 복제하거나 복제 이미지를 외부 SSH/Samba/NFS 서버로 보낼 수 있습니다. 또한 DRBL(Diskless Remote Boot in Linux)에서 실행하여 거대 규모의 네트워크로 묶인 컴퓨터들을 동시에 복제할 수 있습니다.

  이 글에서는 엔드 유저 환경에서 하드 드라이브를 복제/백업하고 복구하는 방법을 설명합니다.

  Clonezilla는 Clonezilla live의 ISO 이미지를 통해 사용할 수 있으며 데비안 기반 ISO 이미지와 우분투 기반 ISO 이미지가 있습니다. 후자는 좀 더 최신 커널을 사용하며 비자유(non-free) 컴포넌트도 사용합니다. Clonezilla로 하드 드라이브를 백업하려면 Clonezilla ISO 이미지로 라이브 CD/USB를 만들어야 합니다.

Clonezilla로 하드 드라이브 백업하기
  전체 하드 드라이브를 백업할 컴퓨터에 Clonezilla 라이브 CD/USB를 넣고 부팅하여 BIOS에서 부팅 우선 순위를 조절 후 부팅하여 초기 화면에 진입합니다. 거기서 Clonezilla live 옵션을 선택합니다.

출처 : http://xmodulo.com/2013/08/how-to-back-up-hard-drives-for-disaster-recovery-with-clonezilla.html

  그러면 이제부터 부팅 옵션을 정하기 위한 선택화면으로 들어가게 됩니다. 먼저 Clonezilla를 시작할 것인지, 아니면 로그인 쉘로 빠질 것인지 선택하는 화면이 나오는데 여기서 Clonezilla를 선택합니다. 물론 쉘로 빠지는 걸 선택하면 fsck 실행, 루트 패스워드 재설정 등 여러 긴급 작업을 할 수 있겠죠.

http://xmodulo.com/2013/08/how-to-back-up-hard-drives-for-disaster-recovery-with-clonezilla.html

  다음으로 "device-image" 모드와 "device-device" 모드 중 하나를 선택합니다. 전자는 디스크/파티션 이미지를 생성하고, 후자는 디스크를 직접 다른 디스크에 복제합니다. 지금은 "device-image" 모드를 선택했다고 가정하고 설명합니다.

  다음으로 이미지가 저장될 곳을 선택합니다. 지금은 "ssh_server"를 선택했다고 가정하겠습니다.

  그 다음에는 네트워크 인터페이스를 설정하는 화면이 나옵니다. IP와 기본 네트워크 정보를 입력한 후 SSH 서버에 접속할 때 사용할 계정명을 적습니다. 이때 이미지 파일을 저장할 SSH 서버의 절대 경로도 지정합니다. Clonezilla는 입력한 SSH 서버 정보를 기반으로 sshfs를 사용하여 원격 SSH 서버의 대상 디렉토리를 로컬에 마운트하는데 이 과정은 직접 화면으로 볼 수 있습니다. 확인이 끝나면 엔터를 눌러 계속 진행합니다.

  이제 복제 모드를 선택하는 화면이 나옵니다. "Beginner"와 "Expert"가 있는데 지금은 "Beginner"를 기준으로 설명합니다.

  다음 화면에서는 디스크 전체를 백업할 것인가, 아니면 디스크의 특정 파티션만 백업할 것인가를 선택합니다. 지금은 디스크 전체를 백업하기 위해 savedisk 옵션을 선택했다고 가정하겠습니다.

  그 다음에는 생성할 이미지 파일의 이름을 설정합니다. 그 후 스페이스 키로 백업할 디스크를 고릅니다.

  다음으로 이미지를 생성하기 전에 원본 파일 시스템에 대한 검사 및 교정을 실시할지를 정합니다. 검사 및 교정을 하려면 해당 파일 시스템이 fsck 명령어로 검사할 수 있는 파일 시스템이어야 합니다.

  다음으로 생성한 이미지에 대한 검사 여부를 정합니다.

  이제 모든 선택이 끝났으며 선택한 디스크 드라이브의 압축된 이미지 파일을 생성하여 원격 SSH 서버에 전송하게 됩니다.

http://xmodulo.com/2013/08/how-to-back-up-hard-drives-for-disaster-recovery-with-clonezilla.html

  이미지가 성공적으로 생성되고 확인까지 끝나면 아래와 같은 화면을 볼 수 있습니다.

http://xmodulo.com/2013/08/how-to-back-up-hard-drives-for-disaster-recovery-with-clonezilla.html

  엔터를 눌러 계속 진행합니다. 그러면 아래와 같은 화면을 통해 컴퓨터 종료, 리붓, 다른 디스크 드라이브/파티션을 대상으로 같은 백업 절차 진행 등을 할 수 있습니다.

http://xmodulo.com/2013/08/how-to-back-up-hard-drives-for-disaster-recovery-with-clonezilla.html


Clonezilla로 하드 드라이브 복구하기
  방법은 매우 쉽습니다. Clonezilla CD/USB로 부팅 후 아래 화면이 나올 때까지 위와 동일하게 진행합니다.

http://xmodulo.com/2013/08/how-to-back-up-hard-drives-for-disaster-recovery-with-clonezilla.html

  위 화면에서 "restoredisk"를 선택하면 복구에 사용할 이미지를 선택하는 화면이 나오며, 그 다음에는 대상 로컬 디스크를 선택하는 화면이 나옵니다. 선택이 끝나면 복구가 진행됩니다.

2013/08/09 09:25 2013/08/09 09:25
Posted
Filed under 프로그램과 명령어/기타 프로그램
참조 원문 : Meld : Graphical diff To Compare Files & Directories On Linux

  Meld는 파일이나 디렉토리를 비교할 수 있는 유틸리티입니다.
  • 2~3개의 파일/디렉토리 비교
  • 자동 병합(개발 버전)
  • 입력에 따른 비교 업데이트
  • 차이점이 있는 부분에 대한 쉬운 병합
  • Arch, Bazaar, Codeville, CVS, Darcs, Git, Mercurial, Mono-tone, RCS 등 버전 컨트롤 지원
  패키지 이름은 프로그램 이름과 일치하는 meld로 통상적인 배포판에서 yum이나 apt-get을 통해 설치할 수 있습니다.
2013/07/21 16:33 2013/07/21 16:33
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : phpvirtualbox - Running Virtual Machines With VirtualBox 4.2 and phpvirtualbox On A Headless Ubuntu 12.04 Server

  phpvirtualbox는 PHP로 만들어진 웹 기반의 VirtualBox 프론트엔드로 원격에서 VirtualBox 인스턴스에 접근 및 제어를 할 수 있게 해줍니다. VirtualBox의 GUI와 비슷하게 구현하여 사용하기가 쉽습니다. 원격에서 웹을 통해 접속하여 GUI로 인스턴스를 제어할 수 있다는 점 때문에 서버에서 설치하여 사용하기 매우 좋습니다. 이 글에서는 VirtualBox와 phpvirtualbox를 설치하여 원격에서 VirtualBox를 제어할 수 있게 연동하는 방법을 소개합니다. 기본적으로 우분투 12.04 서버 버전을 기준으로 설명하고 있지만 13.04 서버 버전 등 다른 버전에서도 가능하며, 몇몇 경로명이나 패키지 설치 명령어 정도만 바꾸면 레드햇 계열의 배포판에서도 충분히 따라 해볼 수 있습니다.

1. 선결조건
  호스트는 우분투 12.04 서버로 가정합니다. 거의 모든 명령어는 root 권한을 필요로 하므로 명령어를 사용할 때마다 sudo를 사용하거나 sudo su 명령어를 통해 root로 로그인해야 합니다.

2. VirtualBox 설치
  /etc/apt/sources.list 파일에 아래 내용을 추가합니다.
deb http://download.virtualbox.org/virtualbox/debian precise contrib
  VirtualBox 공개 키를 받습니다.
# wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | apt-key add -
  패키지 DB를 업데이트하고 VirtualBox 4.2를 설치합니다. dkms 패키지는 리눅스 커널 버전이 바뀔 때 VirtualBox 호스트 커널 모듈도 그에 맞춰 업데이트시키는 역할을 합니다.
# apt-get update
# apt-get install linux-headers-$(uname -r) build-essential virtualbox-4.2 dkms
  VirtualBox는 4.0부터 Remote Desktop Connection Support(VRDP) 등 일부 기능을 "확장팩(extension packs)"이란 이름의 별도 패키지로 제공하고 있습니다. 원격 제어를 하려면 VRDP가 필요하기 때문에 확장팩을 설치해야 합니다. http://www.virtualbox.org/wiki/Downloads에서 두 번째 항목에 있는 'All supported platforms' 링크의 주소를 파악하여 서버에서 다운로드를 합니다. 아래와 버전이 다를 확률이 높기 때문에 반드시 직접 확인하고 다운로드하시기 바랍니다.
# cd /tmp
# wget http://download.virtualbox.org/virtualbox/4.2.16/Oracle_VM_VirtualBox_Extension_Pack-4.2.16-86992.vbox-extpack
# VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.2.16-86992.vbox-extpack
  이제 VirtualBox를 실행할 계정을 만들어 패스워드를 설정하고 vboxusers라는 그룹에 넣습니다. 계정명은 vbox로 만들겠습니다.
# useradd –d /home/vbox –m vbox
# passwd vbox
# adduser vbox vboxusers
  위에서 만든 계정을 VirtualBox가 사용하도록 /etc/default/virtualbox 파일을 생성하여 아래 내용을 넣습니다.
VBOXWEB_USER=vbox
  부팅 시 서비스를 실행하도록 만들고 서비스를 실행합니다.
# update-rc.d vboxweb-service defaults
# /etc/init.d/vboxweb-service start

3. Apache, PHP, phpvirtualbox 설치
  아파치와 PHP를 설치합니다.
# apt-get install apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common apache2 apache2-doc apache2-suexec libapache2-mod-php5 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libapr1 php5-common php5-mysql php-pear
  phpvirtualbox를 다운로드하여 압축을 풀고 documentroot에 복사합니다. phpvirtualbox는 홈페이지에서 최신 버전을 확인하고 다운로드해야 합니다.
# cd /tmp
# wget https://phpvirtualbox.googlecode.com/files/phpvirtualbox-4.2-5.zip
# unzip phpvirtualbox-4.2-5.zip
# mv phpvirtualbox-4.2-5 /var/www/phpvirtualbox/
  템플릿 설정 파일을 일반 설정 파일명으로 복사한 후 계정명과 패스워드를 아까 생성한 계정의 것으로 수정합니다.
# cd /var/www/phpvirtualbox/
# cp config.php-example config.php
# vi config.php
...생략...
var $username = 'vbox';
var $password = '아까 설정한 패스워드';
...생략...
  이것으로 모든 설정이 끝났으며 네트워크상 해당 서버에 접근할 수 있는 컴퓨터의 웹 브라우저에서 http://IP주소/phpvirtualbox를 입력하여 설치했던 phpvirtualbox에 접근할 수 있습니다. 접근하면 로그인 화면이 나오는데 기본 계정명과 패스워드는 admin입니다.
2013/07/17 22:59 2013/07/17 22:59
Posted
Filed under 프로그램과 명령어/커맨드 라인 트릭
참조 원문 : Groping through big data with grep

1. 숫자 4개로 시작하는 줄 뽑아내기
grep ^[0-9][0-9][0-9][0-9] textfile
grep -E "^[0-9]{4}" textfile
  하지만 이 조건만으로는 4자리로 시작하기만 하면 무조건 걸려나옵니다. } 문자 뒤에 공백을 하나 넣어서 처리할 수 있지만 좀 더   좋은 방법은 "단어 단위" 기능(<와 >)을 사용하는 것입니다.
$ grep '\<[0-9]\{4\}\>' textfile
2010
2013 is turning out to be a better year
  다만 이 방법을 사용할 때 주의할 점이 있습니다. 아래를 보시죠.
$ grep '\<[0-9]\{3,5\}\>' textfile
2010
2013 is turning out to be a better year
12345 Taylor Avenue
127.0.0.1
  다른 건 괜찮았는데 마지막에 IP 주소가 걸려 나왔습니다. 숫자 뒤에 문자가 나오는 경우도 "단어의 끝"으로 취급하기 때문입니다. 단어 단위로 걸러낼 때는 이런 사항도 고려해야 합니다.

2. IP 주소 뽑아내기
  IP 주소를 검출하는 게 은근히 생각보다 까다롭습니다. 먼저 특정 IP를 찾는 것부터 시작하겠습니다. 생각없이 그냥 지르면 이런 모습이 나옵니다.
$ grep 12.45.78.0 text
1234567890
12.45.78.0
  정규 표현식에서 점(.)은 하나의 문자를 뜻하니까요. 이럴 땐 -F 옵션(fixed string)을 사용하거나, fgrep 명령어를 사용하거나, 이스케이프 문자를 사용해야 합니다. 처음 두 방법은 사실상 같은 거나 다름없습니다.
$ grep -F 12.45.78.0 text
12.45.78.0
$ fgrep 12.45.78.0 text
12.45.78.0
$ grep "10\.20\.30\.40" textfile
Don't use the 10.20.30.40 address unless you first talk to Pete.
  이제 IPv4 주소 형식을 띈 문자열을 잡아내는 패턴의 예를 보겠습니다.
$ grep -w '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' textfile
127.0.0.1
Don't use the 10.20.30.40 address unless you first talk to Pete.
Refer to Section 11.2.3.4.20 for the process guidelines.
  마지막에 엉뚱한 게 나왔듯이 위의 방법도 완벽하진 않습니다만 여기서 더 발전시켰다간 필요 이상으로 복잡해지기 때문에 이 정도로 끝내는 게 적절할 것 같습니다.

2013/07/17 16:33 2013/07/17 16:33
Posted
Filed under 프로그램과 명령어/커맨드 라인 트릭
참조 원문 : 20 interesting and extremely helpful Linux command line tricks

1. 두 디렉토리 사이를 효율적으로 반복해서 이동하는 방법
  A 디렉토리에서 B 디렉토리로 이동한 후 다시 A 디렉토리로 이동할 때 A 디렉토리의 경로를 쓰는 대신 'cd -'를 사용하여 같은 효과를 볼 수 있습니다.
/home$ cd /var/log
/var/log$ cd -
/home
/home$

2. 콤마(,) 연산자
  첫 번째 글자나 문자열 전체를 소문자로 변환 방법
$ string="Example of comma OPERATOR"

$ echo ${string,}
example of comma OPERATOR

$ echo ${string,,}
example of comma operator
  파일명 확장(extension)에 사용
$ touch new_file{1,2,3}
$ ls new_file*
new_file1  new_file2  new_file3

파일명을 my_filename.old에서 my_filename.new로 변경
$ mv my_filename.{old,new}

3. 파일명에 공백이 있을 때 제어하는 방법
  파일명 전체를 큰 따옴표로 감싸거나 공백 앞에 역슬래쉬(\)를 넣습니다.
$ rm "temp File"
$ rm temp\ File

4. 하이픈(-)으로 시작하는 파일명 삭제 또는 생성 방법
$ rm -1mpFile.out
rm: invalid option -- '1'
Try `rm ./-1mpFile.out' to remove the file `-1mpFile.out'.
Try `rm --help' for more information.

$ rm -- -1mpFile.out
$ touch -- -1mpFile.out

5. 디렉토리 안에 있는 파일 중 특정 확장자가 아닌 모든 파일 삭제 방법
$ rm !(*.c|*.py)

6. touch와 find를 이용해 특정 시간 사이에 생성되거나 수정된 파일 복사
  어떤 디렉토리 안에 있고 09~17시 사이에 생성되거나 수정된 파일만 골라 복사하고 싶다고 가정했을 때 먼저 원하는 두 시간에 맞춰 타임스탬프 값을 가진 두 파일을 생성합니다.
$ touch -d "9am" temp1
$ touch -d "5pm" temp2
  이제 대상 파일이 있는 디렉토리로 이동해서 아래 명령어를 사용합니다.(또는 find에서 대상 디렉토리를 지정)
$ find . -newer ../temp1 ! -newer ../temp2 -exec cp '{}' ./target/ ';'
  실행하면 대상 파일이 target이라는 하위 디렉토리 안에 복사됩니다. 물론 target 디렉토리를 먼저 만들어야 합니다.

7. 대상 파일이 너무 많아서 삭제가 안 될 때
  디렉토리 안에 파일이 너무 많을 때 삭제를 시도하면 아래의 에러 메시지와 함께 삭제가 안 될 수 있습니다.
-bash: /bin/rm: Argument list too long
  이럴 땐 아래의 방법을 사용합니다. 사용하기 전에 현재 디렉토리를 다시 한 번 확인하는 것이 좋습니다.
find * -xdev -exec rm -f '{}' ';'

8. 특정 문자열을 포함한 파일 찾는 방법
$ grep -l "printf" *.c
  하위 디렉토리에 있는 파일들까지 포함하여 문자열이 포함된 파일과 그 문자열이 있는 줄을 보고 싶다면 find, xargs, grep 명령어를 활용합니다.
$ find . -name "*.c" | xargs grep -H "buff"
./bfrovrflw.c:    char buff[15];
./bfrovrflw.c:    gets(buff);
./bfrovrflw.c:    if(strcmp(buff, "MyLinuxBook"))

9. 파일 안의 내용을 모두 지우는 방법
$ > ./logfile

10. man 페이지에서 특정 문자열 검색 방법
$ man -k login
access.conf (5)      - the login access control table file
add-shell (8)        - add shells to the list of valid login shells
chsh (1)             - change login shell
faillog (5)          - login failure logging file
faillog (8)          - display faillog records or set login failure limits
getlogin (3)         - get username
getlogin_r (3)       - get username
gnome-session-properties (1) - Configure applications to start on login
hotot (7)            - lightweight & opensource microbloging client
issue (5)            - prelogin message and identification file
lastlog (8)          - reports the most recent login of all users or of a given user
login (1)            - begin session on the system
login (3)            - write utmp and wtmp entries
login.defs (5)       - shadow password suite configuration
login_tty (3)        - tty utility functions
logname (1)          - print user's login name
...
...
...

11. 표준 에러 출력 메시지를 파일로 리다이렉트시키는 방법
  일반 리다이렉트로는 표준 에러로 출력되는 메시지를 담을 수 없습니다.
$ touch new > /home/himanshu/practice/logfile
touch: cannot touch `new': Permission denied
$ cat /home/himanshu/practice/logfile
$
$ touch new > /home/himanshu/practice/logfile 2>&1
$ cat /home/himanshu/practice/logfile
touch: cannot touch `new': Permission denied
  2>&1은 표준 에러도 표준 출력으로 보내라는 뜻입니다.

12. history에 남기지 않고 명령어 사용
  앞에 공백을 넣고 명령어를 사용합니다.
$ a
a: command not found
$  vi
$ b
b: command not found
$ history | tail -3
 1055  a
 1056  b
 1057  history | tail -3

13. 영화처럼 같은 속도로 텍스트 출력
$ echo "You can simulate on-screen typing just like in the movies" | pv -qL 10

14. alias와 같은 이름을 가진 명령어가 있을 때 alias가 아닌 그 명령어 실행
  앞에 역슬래쉬(\)를 넣고 명령어를 사용합니다.
mirashi@mirashi-virtual-machine:~/test$ alias ls='ls -al'

mirashi@mirashi-virtual-machine:~/test$ ls
합계 8
drwxrwxr-x  2 mirashi mirashi 4096  7월 17 14:33 .
drwxr-xr-x 34 mirashi mirashi 4096  7월 17 14:33 ..
-rw-rw-r--  1 mirashi mirashi    0  7월 17 14:33 test

mirashi@mirashi-virtual-machine:~/test$ \ls
test

15. 특정 파일을 사용하고 있는 프로세스 찾아내기
  파일을 지우려고 하는데 어떤 프로세스가 그 파일을 사용 중이라 지울 수 없을 때가 있습니다. 이럴 땐 fuser 명령어로 그 파일을 사용하고 있는 프로세스들의 PID를 알아낼 수 있습니다.
# fuser /var/log/httpd/access_log
/var/log/httpd/access_log: 24273 24277 24278 24279 24280 24281 24282 24283 24284 24305 24306 24307 34994 35370 35371 35372 35373 35374 35375 35376
  또한 -k 옵션을 사용하면 해당 프로세스들을 죽일 수 있습니다.

16. 복사와 붙여넣기 단축키
  먼저 복사하고 싶은 부분을 마우스로 드래그해서 선택한 후 Ctrl+Shift+C를 누르면 복사가 되고 Ctrl+Shift+V를 누르면 붙여넣기가 됩니다.





2013/07/17 14:47 2013/07/17 14:47
Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : CentOS system administration using text-based user interfaces

  Curses 라이브러리를 사용하는 dialog를 통해 스크립트에서 나름 GUI 느낌이 나게 스크립트를 짜는 예제입니다. CentOS라면 보통은 dialog가 설치되어 있지 않으므로 yum을 사용해서 설치해야 합니다.

  아래 예제에서는 메뉴, 진행률 막대의 기본 사용법을 볼 수 있습니다.
#!/bin/bash

#The dialog part. By default, the chosen menu item goes to STDERR (2). From there it's redirected to a temp file (/tmp/temp_file) in the script.

/usr/bin/dialog --title "Delete /tmp content" --menu "Delete /tmp content older than:" 10 30 0 1 "1 day" 2 "2 days" 2> /tmp/temp_file

#Get the choice by reading the /tmp/temp_file
option=`cat /tmp/temp_file`

#Remove the temp file
rm -f /tmp/temp_file

#Clear the screen for better readibility
/usr/bin/clear

#Create a function to delete the temp content. It accepts as an argument a number of days. Any content older than this number will be deleted.
function delete_tmp {
    /bin/echo "Deleting files and directories older than $1 day(s) in /tmp"
    /bin/find /tmp/ -type f -mtime +$1 -exec rm {} -rf \;
    #Show a dialog gauge with the progress
    /bin/echo "50" | /usr/bin/dialog --gauge "Deleting files" 10 30 0
    #For better visual effect wait 1 second before continuing
    /bin/sleep 1
    /bin/find /tmp/ -type d -mtime +$1 -exec rm {} -rf \;
    #Show a dialog gauge with the progress again
    /bin/echo "100" | /usr/bin/dialog --gauge "Deleting directories" 10 30 50
    /bin/sleep 1
    #Clear the screen
    /usr/bin/clear
}

#Go through a conditional statement
#First check if $option is not null. Option is null usually when the cancel button from the menu is pressed.
if [ -z $option ]; then
    /bin/echo 'Cancel pressed. Exiting.'
#Check if the first option is chosen
elif [ $option -eq 1 ]; then
    delete_tmp 1
#Check the second option
elif [ $option -eq 2 ]; then
    delete_tmp 2
fi
  실행하면 두 가지 선택사항이 나오는데 첫 번째는 /tmp 디렉토리 내에 있는 파일들 중 최종 수정 시간이 하루 이상 지난 파일들을 삭제하는 것이고, 두 번째는 이틀 이상 지난 파일을 삭제하는 것입니다. 선택하면 진행률 막대도 나오는 것을 볼 수 있습니다. 메뉴와 게이지의 인자로 있는 10과 30은 각각 텍스트 박스의 높이와 너비를 텍스트 문자로 쟨 값입니다. 메뉴에 있는 세 번째 인자는 내부 선택 공간의 높이고 네 번째 인자는 처음에 선택되어 있는 항목의 번호입니다. 게이지의 세 번째 인자는 진행률 막대의 시작지점을 비율 값으로 나타낸 것입니다.

  배포판에 따라 명령어의 경로명이 다를 수 있습니다. 가령 데비안 계열의 경우 find의 기본 위치가 /usr/bin/find 입니다. 이런 문제 때문에 스크립트 윗 부분에서 OS 및 배포판을 감지하여 그에 맞는 경로명을 변수에 보관하거나 which 같은 명령어로 즉석에서 알아내서 변수로 보관한 뒤 명령어를 사용할 때 그 변수를 활용하는 것이 더 좋습니다.

2013/07/16 13:18 2013/07/16 13:18