태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

운영체제 (94)



오늘. 누군가가 "데몬(daemon) 프로세스"가 도대체 뭔가요?"라는 질문 던진 것을 인터넷의 한 게시판에서 봤다. 


많은 개발자나 엔지니어들이 IT 바닥에서  일을 하면서도 쉽게 접하기 어려운 분야가 바로 서버의 운영체제다. 서버 운영체제는 일부 서버 엔지니어나 시스템 소프트웨어 엔지니어들의 전유물처럼 되어 있다. 그렇다보니 운영체제를 직접 다룰 일이 없는 개발자나 학생들은 운영체제에 대한 개념이 부족한게 사실이다. 사실 데몬 프로세스가 뭔지 몰라도 일하는데 전혀 지장이 없다. 


데몬(daemon) 프로세스란?

구글에서 daemon process 를 검색하면 첫 번째로 뜨는 컨텐츠는 인디아나 주립대학교의 날리지베이스에 정의된 daemon in Unix 라는 정의다.



그렇다. 데몬(daemon) 이란 서비스의 요청에 대해 응답하는 오랫동안 실행중인 백그라운드(background) 프로세스다. 유닉스(리눅스 포함) 운영체제에서 이름이 "d"로 끝나는 프로세스들이 대표적인데 inetd, httpd, nfsd, sshd, named와 lpd 등이 있다.


여기서 핵심은 "백그라운드(background) 프로세스"라는 것이다. 백그라운드란 무엇인가를 이해하면 데몬 프로세스가 무엇인지 쉽게 이해할 수 있다.



백그라운드 프로세스란?

사실 실제 화면을 보지 않고 백그라운드 프로세스를 이해하는 것은 매우 어렵다. 이는 눈을 가린채 코끼리 다리를 만지게 하면서 코끼리의 생김새를 이해하라는 것과 같다.


백그라운드 프로세스가 있다면 그 반대의 개념인 포그라운드(Foreground) 프로세스가 있다는 것도 유추가능하다. 이 두 프로세스의 차이를 이해하면 데몬 프로세스가 무엇인지 아주 쉽게 이해할 수 있다.


포그라운드 프로세스는 사용자와의 대화창구인 표준입출력장치 즉 터미널과 키보드(tty 혹은 pts로 표현되는)을 통해 대화한다. 하지만 백그라운드 프로세스는 적어도 입력장치에 대해 터미널과의 관계를 끊은 모든 프로세스를 의미한다. 즉 사용자에게 무언가를 키보드를 통해 전달받지 않고 스스로 동작하는 프로세스가 바로 백그라운드 프로세스이다. 


예를 들어 유닉스(리눅스) 운영체제가 설치되어 있는 서버에 전원을 넣고 웹서버인 아파치 서버를 설치했다고 치고 아파치 웹서버를 실행하는 시나리오를 기반으로 설명하도록 하겠다.


처음으로 아파치 서버를 구동하기 위해서는 아파치가 설치된 서버에 로그인을 해야한다. 이때는 서버에 ssh 혹은 telnet으로 접속해야 한다. 그것도 아니라면 서버 앞으로 가 물리적 콘솔에 로그인해야 한다. 


개인이 사용하는 Windows PC에서 SSH 접속을 한다고 가정하자. 이런 화면이 보일 것이다.



서버에 SSH 접속하는 화면이다. 



여기서 부터 프로세스에 대한 개념을 잡아야 한다.


ssh 192.168.100.100 까지는 PC의 Windows에서 실행된 cmd의 화면이다. 윈도의 cmd는 유닉스(리눅스)와는 다르지만 화면에 C:\>와 같이 표현되는 프롬프트를 표시하고 키보드로 입력을 받는다. 즉 키보드 입력과 화면 출력을 통해 사용자와 대화한다. 따라서 cmd는 포그라운드 프로세스다.


그리고 다음 라인의 taeho@192.168.100.100 's password : 은 앞 라인에서 cmd가 사용자가 입력한 ssh 명령을 해석해 PC에 있는 ssh 명령을 실행하고 아규먼트로 전달받은 192.168.100.100 IP로 ssh 접속을 시도하여 서버에서 실행중인 ssh 데몬과 세션을 맺은 다음 ssh 데몬이 사용자에게 보여주기를 원하는 내용을 ssh 명령이 전달받아 화면에 출력한 내용이다.


즉 ssh 명령도 화면에 sshd로 부터 전달받은 내용을 표시하고 키보드를 통해 사용자가 입력한 비밀번호를 서버의 sshd에 전달하므로 포그라운드 프로세스다.


그리고 비밀번호를 입력한 뒤 화면에는 $로 표현되는 리눅스의 쉘이 표시되었다. 여기서부터 유닉스(리눅스) 운영체제에 대한 이해가 필요하다.


sshd가 $ 를 보여주고 사용자가 명령을 입력하기를 기다리므로 sshd가 포그라운드 프로세스가 아니냐고 반문할 수 있다. 결론은 sshd는 포그라운드 프로세스가 아니다.


왜냐하면 sshd의 역할은 비밀번호를 입력받아 비밀번호가 맞는지를 확인하고 passwd 파일에서 해당 계정에게 할당된 bash 를 실행시키고 뒤로 물러나 있기 때문이다. 즉 화면에 표시된 $ 는 sshd가 보여준 것이 아니라 sshd가 실행시킨 bash가 보여주는 것이기 때문이다. 즉 sshd는 사용자에게 키보드로 부터 직접 입력을 받지 않으며 직접 무언가를 지시할 수 없다.


이 단계에서 프로세스의 관계를 살펴보면...



먼저 ps -ef 로 프로세스 목록을 보면 위 화면과 같다. 여기서 중요한 것은 PID와 PPID 항목이다.


맨 위에 보면 root 계정에서 실행된 sshd -D 프로세스가 보인다. (PID 6884) 그리고 아래쪽에 보면 PPID가 6884 인 sshd(PID 8111)이 보이고 바로 아래에 그 sshd(PID 8111)을 PPID로 하는 bash(8112)가 보인다. 


이 관계는 root에서 실행된 sshd(6884)가  taeho에서 실행되는 sshd(8111)을 실행(또는 fork)하고  그 sshd(8111)가 bash(8112)를 실행했음을 알 수 있다. 그리고 마지막으로 실행된 bash가 앞 cmd 화면에서 보이는 $ 프롬프트를 표시해준 것이다.


즉 sshd 프로세스는 사용자와 직접 대화하지 않는 백그라운드 프로세스임을 알 수 있다. 그리고 마지막에 실행된 bash는 사용자와 대화하기 위해 $ 프롬프트를 보여주고 키보드로부터 입력을 기다리고 있으므로 포그라운드 프로세스이다.


그렇다면 데몬 프로세스란 ?

지금까지는 포그라운드 프로세스와 백그라운드 프로세스에 대해 설명했다. 그렇다면 데몬프로세스란 무엇일까?


결론부터 이야기하자면 데몬 프로세스란 백그라운드 프로세스 중에서 부모프로세스(PPID)가 1 혹은 다른 데몬프로세스인 프로세스를 말한다.


여기서 또 하나의 궁금증이 생긴다. 그렇다면 데몬 프로세스도 백그라운드 프로세스 중 하나인데 일반적인 백그라운드 프로세스와 부모프로세스가 1이거나 다른 데몬프로세스인 백그라운드 프로세스와 무엇이 다른가 하는 것이다.


그 차이는 바로 프로세스를 실행한 bash가 종료되었을 때 bash를 통해 실행한 다른 백그라운드 프로세스가 함께 종료되는가 아닌가이다.


역시 화면을 보자.



이 화면은 포그라운드 프로세스의 대명사인 vi 라는 문서편집기를 강제로 백그라운드로 실행시킨 화면이다. 명령어를 실행할 때 맨 뒤에 & (앰퍼샌드) 기로를 붙이면 해당 명령어는 백그라운드로 실행된다. 즉 표준입력인 pts와 tty가 vi 프로세스와 끊겨 vi를 통해 편집이 불가능해진다.


어쨌든 vi는 화면에서 사라지고 백그라운드에 실행중이다. 이 것은 다른 ssh 접속 후 ps 명령을 통해 확인할 수 있다.



ps 명령으로 해당 프로세스를 찾아보면 bash(8290)을 부모프로세스로 갖는 vi(8314)가 실행중임을 알 수 있다. 하지만 실제 작업은 할 수 없으며 q! 와 같은 명령을 입력해 vi를 종료할 수도 없다. 


여기서 ssh 접속을 끊으면 고아가 되어버린 vi 는 어떻게 될까? 앞에서 설명했듯 비록 백그라운드로 실행중이지만 exit 명령을 통해 ssh 접속을 끊으면 bash(8290)과 bash(8290)을 ppid 로 갖는 8314는 자동으로 종료된다.


exit로 ssh 접속을 끊는다.




vim이 죽으라는 HUP 시그널을 받았음을 화면에 표시한다. 즉 bash가 "너 죽어!!"라고 시그널을 보낸 것이다. 그리고 Connection이 종료되었음을 알린다. 


그렇다면 실제로 vi 프로세스가 종료되었는지 ps 명령으로 확인해 본다.




원래 있던 자리에 taeho 계정으로 실행중이던 vi 프로세스가 없음을 알 수 있다. ssh에서 exit 명령으로 로그아웃 하자 taeho 계정으로 실행되던 sshd, bash, vi가 자동으로 종료된 것이다.


즉 이 sshd, bash, vi는 백그라운드 프로세스로 실행되었지만 데몬(daemon)이 된 것은 아니다. 데몬이 되기 위해서는 백그라운드 프로세스가 부모프로세스로 1 혹은 다른 데몬 프로세스를 가져야 한다.


대표적인 데몬 프로세스 (웹서버)

가장 대표적인 데몬 프로세스는 웹서버 데몬이다. 웹서버 데몬 프로세스는 서버에서 터미널을 통해 사용자와 대화할 수 없도록 백그라운드 프로세스로 생성된다. 


즉 프로그램의 소스 안에서 fork() 함수를 통해 자식을 생성하고 부모는 죽는다. 그리고 생성된 자식은 부모프로세스를 1 (init) 로 변경한 뒤 실제로 서비스를 수행할 자식(손자에 해당)프로세스를 여러개 fork() 한다. 그리고 그 자식(손자) 프로세스들은 계정을 setuid() 함수를 이용해 웹서버가 실행되도록 설정된 계정으로 바꾼다. (실제로는 과정이 조금 다를 수도 있음)


그 결과 다음과 같이 프로세스가 생성된다.



httpd(8064)는 PPID(부모프로세스ID)가 1 이다. 그리고 실행된 계정은 root 이다. 이는 최초 웹서버를 root 계정에서 실행시키기 때문이다. 그 이유는 TCP 1024 포트 이하는 root 에서만 Binding이 가능하기 때문이다. 


그리고 PPID를 8064로 갖는 httpd 프로세스가 5개가 있고 그 계정은 실행계정이 apache 임을 알 수 있다. root가 아니고 apache로 변경한 이유는 보안상의 이유다. PPID가 1 인 httpd는 실제로 웹브라우저의 요청을 처리하는 웹서버 데몬이 아니다. 실제로 웹브라우저의 요청을 처리하는 웹서버 데몬은 apache 계정이 실행계정으로 되어 있는 나머지 5개의 웹서버 데몬이다.


이는 만약 root 계정으로 실행중인 웹서버가 해킹을 당하는 상황을 가정하면 해커는 곧바로 서버의 관리자 권한인 root 권한을 획득하는 것이 된다. 이런 상황은 매우 치명적인 상황을 유발할 수 있기 때문에 실제 서비스를 수행하는 웹서버 데몬은 apache 계정으로 실행하도록 기본 설정이 되어 있는 것이다.


이렇게 PPID가 1 인 httpd 프로세스와 PPID가 1인 프로세스를 PPID로 갖는 5개의 httpd 프로세스가 바로 데몬(daemon) 프로세스다. 


이 데몬프로세스들은 로그인한 ssh 세션에서 exit로 로그아웃 하더라도 종료되지 않고 웹 서비스를 제공하게 된다.


#데몬프로세스 #daemon #fork #ppid #부모프로세스ID





엊그제 사용하고 있는 노트북의 Windows 10 pro를 1903 버전으로 업그레이드 했다. 그런데 예전엔 탐색기에만 있던 작업기록이 상태표시줄에도 생겨버렸다. 

탐색기에 생기는 작업기록 (탐색기에서 열었던 파일 목록)은 탐색기의 "보기" - "옵션" - "폴터 및 검색 옵션 변경"으로 들어가 더 이상 기록되지 않도록 설정할 수 있다.

탐색기의 최근 작업파일 기록 설정 옵션탐색기의 최근 작업파일 기록 설정 옵션

그런데 Windows 10 1903 버전에는 아래 화면처럼 상태표시줄의 검색 창을 클릭하면 대놓고 이전의 작업기록을 보여준다. 누가 이걸 보고 싶댔냐?????

이런 작업기록은 개인적으로 남기고 싶지 않다. 누군가 내 PC에 접근했을 때 내가 최근에 무슨 일을 했는지 알 수 있게 되기 때문이고 중요한 개인정보를 편집하거나 했을 때 유출의 빌미가 되기 때문이다.

이 최근 활동 기록이 남지 않도록 하는 방법을 포스팅한다.

먼저 제어판을 열고 "개인 정보" 를 클릭한다.

왼쪽에서 "작업 기록"을 선택한다. 오른쪽 창에 "이 장치에 내 활동 기록 저장"이 체크되어 있다. 이 체크를 해제한다.

그리고 아래쪽에 "다음 계정의 활동 표시"가 "켬"으로 되어 있다면 끈다.....

하지만 이게 끝이 아니다.

아래쪽으로 스크롤하면... 

"활동 기록 지우기" 버튼이 보인다. 이 버튼을 누르면 현재 기록되어 있는 활동 기록을 지울 수 있다.

여기까지 해주면 상태표시줄의 최근 활동 기록이 더 이상 기록되지도 보이지도 않게 된다.

뭔가 자꾸 컴퓨터와 스마트폰에 기록을 남기고 빼내갈 생각만 하는 마이크로소프트, 구글, 애플... 징글징글하다.


  • [찌쏘]'s Magazine 2019.09.09 17:19 신고

    블로그 세계에 다시 입성하신겁니까? ^^ 이런 기능이 있었군요
    윈도우 10생기고 나서 메뉴 모양도 적응안되고 있었는데 좋은 정보 감사합니다.

    • taeho Tae-Ho 2019.09.10 20:49 신고

      MS는 뭘 그리도 자꾸만 기록을 남기게 하는지 모르겠습니다.
      그냥 윈도와 오피스나 잘 만들면 좋을 듯 한데 말입니다.



스마트폰의 무궁무진한 활용도 중에서 가장 골치아픈 것은 바로 스마트폰으로 찍은 사진의 관리다. 스마트폰에서 찍은 사진을 곧바로 인스타그램이나 페이스북에 올리기도 하지만 사진을 PC로 옮겨 블로그나 문서 등에 첨부하는 경우도 많다. 그리고 스마트폰에 정리되지 않은 채 방치되는 사진파일들은 정리도 쉽지 않을 뿐더러 스마트폰을 교체하거나 분실했을 때 유실될 가능성도 항상 존재한다.

때문에 많은 스마트폰 유저들은 구글클라우드, 원드라이브, 네이버클라우드 등으로 동기화 설정을 하기도 한다. 하지만 동기화에 대해 세세한 설정과 원본 그대로의 업로드는 여러 제약이 있기도 하다. 한마디로 자유롭지 못하다는 것...

그렇다보니 그냥 수동으로 파일 업로드를 통해 구글의 클라우드에 업로드 한 뒤 PC로 다운로드를 하거나 USB 케이블을 통해 수동으로 저장소간 복사와 붙여넣기를 하곤 했다.


하지만 그 불편함을 견디다 못해... 최근에 스마트폰과 클라우드에 너저분하게 방치되어 있던 사진들을 정리하면서 새로운 동기화 앱을 찾아 설치하고 관리를 시작했다.

새로운 동기화 앱의 조건은 다음과 같았다.


1. 스마트폰의 특정 폴더와 클라우드의 특정 폴더간 일방향 혹은 양방향 동기화 지원

2. 내가 원하는 시간에 동기화 스케줄링을 지원 (지 맘대로 아무때나 동기화하면 안됨)

3. WIFI에서만 동기화를 수행하되 특정 WIFI에서는 동기화를 하지 않도록 설정 가능할 것 (에그의 데이터를 아껴야 하므로)

4. 언제,어디서든 원할 때 수동으로 동기화를 수행할 수 있을 것



과연 이런 까다로운 조건을 충족하는 스마트폰과 클라우드의 동기화 앱이 있을까 싶었는데... 있었다. 야호~~~!!

바로 Folder Sync (폴더싱크)라는 앱이 있었다. 

폴더싱크는 유료앱과 무료앱이 있는데 차이는 지원하는 클라우드의 계정 수 제한이었다. 무료버전은 클라우드 계정을 2개 까지 등록가능하며 광고가 좀 떴다. 광고 몇개 쯤이야...

구글플레이에서 "폴더싱크"를 검색하면 바로 나온다.


플레이스토어에서 폴더싱크플레이스토어에서 폴더싱크


설치 한 뒤 바로 실행시켰다. 하늘색 창이 반겨준다.



4개의 메뉴가 보인다. 먼저 동기화에 사용할 클라우드의 계정을 등록해줘야 한다. 아래 화면에서 "계정"을 선택한다.


파일동기화  FolderSync파일동기화 앱 - FolderSync


처음엔 아무런 계정도 등록되어 있지 않다. 가능하다면 안드로이드의 "설정" - "계정"에 클라우드의 계정을 미리 등록해두면 편하다.



+ 버튼을 눌러 계정등록 화면으로 넘어간다. 여러 계정 유형이 나온다. 심지어 FTP도 지원한다. 집에 있는 NAS에도 동기화할 수 있다.



난 미리 등록해둔 구글계정을 등록한다. 편입해서 다녔던 사이버대학교에서 만들어준 G-Suite의 계정인데 졸업후에도 계속 사용할 수 있으며 용량도 커서 학교계정을 사용하기로 했다.



클라우드의 계정을 등록하고 "계정인증" 버튼을 누르면 사용자 인증과정을 수행한다. 아마도 업체로 관련계정 정보가 넘어가고 광고메일이 좀 오지 않을까 생각된다.



아니나 다를까... 로그인 창이 조금 다르다. 의심스런 대목이지만 이메일 아이디 쯤이야..

구글로그인을 해야 하므로 구글 비밀번호를 입력해준다.



폴더싱크 앱이 내 구글계정에 접근할 수 있는 권한을 부여한다.



인증에 성공하면 아래 화면처럼 구글클라우드에 전체 용량과 현재 사용중인 용량이 표시된다.



저장 버튼을 누르면 아래 화면처럼 폴더싱크를 위한 구글클라우드의 계정이 등록된다. 무료버전은 2개까지 등록할 수 있다고 한다.



클라우드 계정을 등록하고 나면 이제 동기화할 스마트폰의 폴더와 클라우드의 폴더를 지정하여 동기화 정책을 만들어줘야 한다. "Folderpairs" 메뉴를 선택한다.



"+" 버튼을 누르면 동기화 정책의 이름과 동기화할 폴더 및 스케줄링 시간, 기타 옵션을 설정할 수 있는 화면이 보인다.

위 화면의 각 항목은 다음과 같다.

 ● 고유 이름 : 동기화 정책의 이름

 ● 계정 : 앞에서 인증받은 동기화할 원격의 클라우드 계정

 ● 동기화 방식 : 스마트폰의 로컬폴더와 클라우드에서 지정할 원격폴더 간 동기화 방식, 일방향 및 양방향이 모두 가능하다.

 ● 원격폴더 : 클라우드의 동기화할 폴더. 이 항목을 선택하면 다른 창이 실행되며 클라우드의 최상위 폴더부터 브라우징할 수 있다. 클라우드에서 동기화할 폴더를 선택한다. 구글클라우드의 경우 이 원격폴더 선택 창에서 클라우드에 폴더를 만들 수도 있었다.

 ● 로컬폴더 : 동기화할 스마트폰의 폴더

 ● 예약동기화 사용 : 스케줄에 의해 동기화를 예약하려면 오른쪽으로 밀어 켠다.

 ● 동기화 주기 : 여러가지가 있는데 위에서는 Advanced를 선택하고 월~일까지 매일 새벽3시에 동기화 수행하도록 예약한 화면이다.


다음화면은 아래에 이어진다.



위 화면은 기본옵션으로 설정했다. 다만 하단에 있는 WIFI 사용에만 체크를 하고 blogger.pe.kr 의 WIFI SSID에서는 동기화를 하지 않도록 했다. 내가 사용하는 글로벌원에그의 SSID다. 데이터 절약을 위해 이 SSID에서는 동기화를 하지 않도록 설정했다. 

가장 아래에 있는 3G/4G에서는 동기화를 하지 않도록 옵션을 꺼 두었다.

모든 옵션을 선택하고 "저장" 버튼을 누르면 아래 화면처럼 폴더 동기화 정책 하나가 추가된다.



나는 스마트폰의 두개의 로컬폴더를 클라우드의 각각의 대응하는 폴더에 동기화하도록 정책을 두개 등록했다. 아래처럼 두개가 보인다. 하나는 DCIM이라는 스마트폰 카메라 폴더고 나머지 하나는 스마트폰에서 웹서핑 도중 다운로드 받은 이미지가 저장되는 Download 폴더다.



만약 수동으로 동기화를 하고자 한다면 위 화면의 각 동기화 정책에 보이는 "동기화" 버튼을 선택하면 동기화가 아래 처럼 즉시 수행된다. 그리고 초록색 버튼이 동기화가 진행중임을 표시해준다.

단, 속도는 조금 느린편이다.



메뉴에서 "동기화 상태" 메뉴로 이동해보면 동기화가 진행중인 상태를 볼 수 있다. 어떤 파일이 업로드 중인지, 전송 중인 파일의 전송속도는 얼마인지도 함께 표시된다.



동기화가 완료된 뒤 클라우드에서 동기화가 잘 되었는지를 확인했다. 아래 화면처럼 동기화된 파일들이 주욱~~보인다. 완벽하게 동기화가 되었다.




클라우드 서비스의 양대산맥은 Google의 구글드라이브(Google Drive)와 Microsoft의 원드라이브(OneDrive)다. 

두 클라우드 서비스는 스마트폰에서 찍은 사진을 클라우드에 동기화(업로드)하고 노트북(PC)에서 다운로드하거나 PC에서 작성한 문서나 웹서핑 도중 다운로드 받은 파일들을 클라우드에 동기화(업로드)하고 스마트폰에서 다운로드하는 등 다양한 형식으로 활용할 수 있다.

이런 작업을 위해서는 구글드라이브나 원드라이브에 클라우드 서비스에 가입하고 스마트폰과 PC에 앱을 설치한 뒤 가입된 계정을 이용해 로그인해야 한다.

로그인을 마치면 동기화 설정을 해줘야 한다. 동기화 설정을 하지 않고 수동으로 동기화를 할 수도 있지만 이 과정은 매우 번거롭고 마지막 동기화 이후 한쪽에서 업로드 한 파일이나 새로 업로드할 파일의 용량이 클 경우 동기화에 꽤 오랜 시간이 걸릴 수 있기 때문이다. 

자동동기화를 설정할 경우 스마트폰의 클라우드로 지정된 폴더와 PC의 클라우드로 지정된 폴더가 클라우드 서비스에 자동으로 동기화가 된다. 즉 세 곳 중 하나에 새로운 파일이 저장되면 자동으로 나머지 두 폴더에 동기화가 되는 것이다.



그런데... 구글드라이브와 원드라이브 모두 마찬가지지만 PC의 클라우드 동기화 폴더를 변경하는 것이 꽤나 까다롭다. 구글드라이브의 경우 이전에 작성한 포스트(구글드라이브 동기화 폴더 변경하기)의 방법을 사용하면 되며 이 포스트에서는 원드라이브의 동기화 폴더를 변경하는 방법을 설명한다.

Windows 운영체제는 Microsoft의 운영체제 답게 자사의 원드라이브 폴더를 아래 화면처럼 탐색기의 최상위 위치에 자동으로 노출시켜 준다.

문제라고 볼 수는 없지만 이 폴더는 자동으로 C:\Users or 사용자\사용자이름 경로에 기본적으로 생성된다. 그래서 노트북에 기본적으로 제공되는 MicroSD 슬롯에 대용량 MicroSD를 꼽고 HDD처럼 사용하는 내겐 꽤나 귀찮은 작업을 통해 동기화 폴더 경로를 바꿔주는 수고를 하게 만든다.

이미 한번이상 동기화가 되었거나 이미 설정이 완료된 동기화 폴더를 바꾸기 위해서는 아래 화면처럼 OneDrive의 "설정" 메뉴로 진입한다.

"계정" 탭으로 이동해 "이 PC 연결 해제"를 누른다.

걱정도 팔자다. 다시 한번 묻는다. "계정 연결 해제"를 누른다.

연결이 해제되면 C: 드라이브에서 기존의 OneDrive 폴더를 찾아 "이동 위치"메뉴를 찾아가야 한다. 아래 화면의 순서대로 탐색기에서 찾아간 뒤 오른쪽 창에서 OneDrive 폴더를 선택하고 상단바의 "이동 위치" 버튼을 누른다.

아래로 뚝~떨어지는 드롭다운 메뉴에서 "위치 선택..."을 선택한다.

이동하고자 하는 경로를 선택한다. 선택된 경로에 OneDrive 라는 폴더가 자동으로 생성되므로 OneDrive 폴더를 이동하고자 하는 드라이브나 상위 폴더를 선택하면 된다. 아래의 경우 G:\ 를 선택한다. 그러면 G:\OneDrive 라는 폴더가 생성된다.

C: 드라이브에 있던 OneDrive 폴더의 파일들이 G:\의 OneDrive 폴더로 이동된다.

모두 이동이 완료되면 G:\OneDrive 폴더가 아래 화면처럼 파란색 구름으로 표시된다. OneDrive 폴더의 아이콘이 자동으로 붙는다. 

이 폴더를 클릭하면 자동으로 OneDrive 설치 창이 실행된다.

OneDrive 가입 시 생성한 전자메일 주소를 입력한다. 그러면 비밀번호를 묻는다. 입력한다.

로그인이 되면 원드라이브 동기화 폴더를 선택하는 창이 뜨는데... 

G:\로 이동한 G:\OneDrive를 클릭해 설치를 시작했음에도 기본 위치인 C:\Users 아래를 동기화 폴더로 쓰겠다고 쓸데없는 고집을 부린다. 별것 아닌것 같지만 이런 사소한 것이 제품의 완성도를 결정짓는 중요한 요소가 된다.

"위치 변경"을 선택한다. 

이동시킨 폴더를 선택한다. 이동시킨 파일들이 있으므로 아래 처럼 이미 파일이 있다고 경고창이 뜬다. 그냥 "이 위치 사용" 버튼을 누르고 "다음" 버튼을 누른다.

변경된 폴더가 그제서야 표시된다.

OneDrive 동기화 폴더 변경이 완료되었다. 유료 서비스 안내 창이 빠지지 않고 뜬다. "나중에" 버튼을 누른다.

끝이다.


  • simon 2019.09.03 09:45

    좋은 정보네요. 거기다 매우 친절한 그림까지 .. 감사합니다.

    • taeho Tae-Ho 2019.09.04 08:20 신고

      도움이 되셨다니 보람이 있네요~ ^^ 감사합니다~

  • 민들레11 2019.10.30 15:58 신고

    잘 정리하셨네요, 정보 감사합니다.



앞의 포스트에서 Hyper-V를 활성화하고 가상머신에서 인터넷 연결을 위해 가상 스위치를 생성하는 방법을 설명했습니다. (보러가기) 

이 가상 스위치는 Hyper-V 기능을 이용해 Windows 운영체제 내에 가상의 머신(Virtual Machine)을 만들고 운영체제를 설치 했을 때 그 가상머신(이 가상머신을 Guest OS라고도 함)이 호스트(가상머신이 만들어지기 전의 운영체제를 Host라고 함)의 네트워크를 함께 사용하기 위한 가상의 네트워크 장비입니다. 



이제 Windows 7 가상머신을 생성하고 인터넷에 연결하기 위한 작업을 진행합니다.

먼저 Hyper-V 관리자를 실행합니다.

아래 화면처럼 "새로 만들기" 메뉴에서 "가상 컴퓨터(M)"을 선택하여 실행합니다.

가상 컴퓨터 만들기 마법사가 실행됩니다. 마법사가 시키는 대로 진행하면 됩니다. 참...편합니다.

가상 컴퓨터 이름으로 CUK를 지정했습니다. 그리고 가상 컴퓨터가 사용할 경로를 지정합니다. 공간이 충분한 위치를 지정하라고 친절하게 경고하고 있죠. 최소 10G 이상 여유가 있는 곳을 지정하는 것이 좋습니다. 설치할 운영체제의 종류와 가상 컴퓨터에 어떤 프로그램을 설치하느냐에 따라 공간의 최소 필요량은 다릅니다.

가상 컴퓨터 기술이 발전하면서 가상머신의 유형이 1세대와 2세대로 나뉩니다. 노트북이 UEFI 펌웨어이고 설치하려는 가상머신이 모두 64bit 라면 2세대를 선택하는 것이 좋습니다. 여기서는 그냥....1세대를 선택했습니다. 32bit 윈도를 설치할 거거든요.

가상머신이 사용할 메모리(RAM)의 양을 지정합니다. 제 노트북은 8G 램이므로 2G 정도를 가상머신에게 할당합니다.

다음에서는 연결...즉 어떤 가상 스위치를 지정할지를 정합니다. 나중에 변경도 가능합니다. 앞의 포스트에서 CUK라는 가상 스위치를 만들었습니다. 그 스위치를 선택합니다.

가상머신이 저장될 가상 하드디스크의 크기를 선택합니다.  

다음은 가상머신을 설치할 운영체제 미디어를 선택합니다. CD드라이브에 설치할 운영체제 CD나 DVD를 넣었다면 실제 CD/DVD 드라이브를 선택하고 ISO파일을 갖고 있다면 아래와 같이 해당 ISO 파일을 선택해줍니다.

현재까지 선택한 가상머신 설정을 확인합니다. 마침을 누르면 가상머신이 만들어집니다.

아래와 같이 CUK라는 가상 컴퓨터가 만들어졌습니다. 가상스위치 이름도 CUK고 가상 머신이름도 CUK입니다. 이름은 같아도 관계 없습니다. 여기까지 진행된 이 가상머신은 부팅되지 않고 꺼져있는 상태입니다.  그 가상머신을 켜기 위해서는 CUK 가상 컴퓨터를 선택하고 오른쪽 아래에 보이는 "시작"을 선택해야 합니다.



"시작"을 누르면 아래 화면처럼 검은 화면이 작게 표시됩니다. 그리고 가상 컴퓨터 CUK의 상태가 "실행 중"으로 바뀌고 CPU 사용율과 사용중인 메모리의 용량 그리고 작동 시간이 표시됩니다. 화면은 어디 있냐구요??? 

화면을 보기 위해서는 "종료" 버튼 위에 보이는 "연결..." 버튼을 눌러야 합니다.

"연결..." 버튼을 누르면 아래 화면처럼 가상 머신의 실제 실행화면이 보입니다. Windows 7 설치 화면이 떠있죠? 위에서 설치용 ISO 파일을 선택해 두었기 때문에 해당 ISO 이미지로 부팅되어 설치 화면이 표시된 것입니다. 여기서부터는 Windows 7 설치 과정과 동일합니다.

다음과 같이 설치를 진행합니다.

설치가 완료되면 리부팅이 되고 설치된 Windows 7으로 부팅됩니다.

그 다음에 할일은 네트워크 설정입니다.

다음과 같이 가상머신에서 이더넷 설정으로 들어가 앞에서 지정한 가상 스위치의 이더넷인 vEthernet (CUK)와 동일한 대역의 사설 고정 IP를 지정하면 됩니다.

앞에서 가상 스위치의 vEthernet (CUK)에 192.168.200.1 을 부여했습니다. 이 IP와 동일한 대역의 IP인 192.168.200.10 을 가상머신인 Windows 7에 부여한 화면입니다. 그리고 DNS도 설정해주어야 합니다. 여기서는 KT의 DNS 주소를 입력하였습니다.

위와 같이 설정을 완료하면 Hyper-V에 설치한 Windows 7 가상머신에서 인터넷이 가능해집니다.


  • ㅇㅇㅇ 2019.06.18 14:45

    가상 컴퓨터 연결을 누르니까 부팅은 되는데 화면이 저렇게 안뜨고 검은색 화면만 뜨는데 무슨 문제가 있는걸까요?

    • taeho Tae-Ho 2019.06.19 18:43 신고

      Windows 설치를 위한 설치파일 즉 iso 파일을 선택한 뒤 연결을 해야 설치파일(iso)로 부팅되어 설치가 진행됩니다.



앞의 포스트에서 Windows 8/10의 Hyper-V를 활성화 시키는 방법에 대해 포스팅했습니다. (보러가기)

하이퍼V를 이용해 만든 가상머신에서 인터넷을 사용하기 위해서는 Hyper-V 관리자에서 최초의 가상머신을 만들기 전에 가상 스위치 라는 것을 만들어주어야 합니다. 그리고 가상 스위치에 생성된 이더넷에 IP도 부여해주어야 합니다. 

 먼저 아래와 같이 Hyper-V 관리자를 실행합니다. 그리고 화면의 왼쪽에 보이는 "작업" 화면에서 "가상 스위치 관리자..."을 실행합니다.

가상 스위치 관리자에서 아래 화면처럼 "내부"를 선택하고 "가상 스위치 만들기"를 실행합니다.

가상 스위치는 외부, 내부, 개인 세개의 유형으로 만들 수 있습니다. 간단히 설명하면 다음과 같습니다.

  • 외부 : 브릿지 방식입니다. 노트북이나 컴퓨터에 물리적인 이더넷 포트와 대등한 가상 이더넷을 만듭니다. 따라서 노트북이나 컴퓨터의 이더넷 포트가 공유기에서 IP를 부여받을 때 여기서 만들 가상 스위치의 이더넷에도 IP를 추가로 부여받습니다. 이동이 잦거나 외부에서 가상머신을 통해 인터넷을 사용해야 한다면... 절대 외부를 선택하지 않아야 합니다. 
  • 내부 : 노트북 내부에 고유의 가상네트워크를 만듭니다. 내부를 선택하면 여기서 만들어진 가상 스위치는 노트북 외부에서 보이지 않습니다. 집에 공유기를 설치하면 외부에서 공유기 안쪽에 존재하는 PC들을 스캔할 수 없듯이 노트북 내부의 가상 머신을 외부에서 인식할 수 없습니다. 내부를 선택하면 노트북이 공유기 역할을 수행하여 노트북에 생성한 가상머신의 IP를 변경할 필요없이 외부에서 인터넷을 사용할 수 있습니다.
  • 개인 : 내부와 마찬가지로 노트북 내부에 고유의 가상머신을 만들지만 외부로 나갈 수 없는 완전하게 폐쇄된 네트워크를 만듭니다. 따라서 노트북의 가상머신에서 노트북에 연결된 인터넷을 통해 인터넷에 접속할 수 없습니다.

확인을 누르고 다음과 같이 가상 스위치의 이름을 지정합니다.



여기에서는 CUK 라고 이름을 붙였습니다. 그리고 "내부 네트워크"를 선택합니다. 그리고 확인을 누릅니다.

위와 같은 작업을 통해 가상 스위치를 만들면 아래 화면처럼 노트북의 네트워크 연결 설정에 vEthernet (CUK) 라는 Hyper-V Virtual Ethernet Adapter가 생성됩니다.

이제 노트북의 Wi-Fi가 인터넷에 연결되면 vEthernet(CUK)가 Wifi를 통해 인터넷에 접속할 수 있도록 다음과 같이 공유 설정을 해줍니다.

다시한번 설명하면 Wifi 어댑터가 인터넷에 연결되면 그 연결을 vEthernet (CUK)가 이용하여 다음 포스트에서 생성할 가상머신이 인터넷에 접속할 수 있도록 설정해주는 것입니다.

공유설정이 끝나면 vEthernet (CUK)에 사설 IP를 아래와 같이 부여합니다. 여기에서는 192.168.200.1 을 부여했습니다만 편한대로 부여하면 됩니다. 단, 다음에서 만들 가상머신에게도 같은 대역의 IP를 부여해주어야 합니다. (네 자리 중 끝자리만 다른 IP)

 여기까지 설정하면 Hyper-V의 가상 스위치 설정작업도 완료됩니다.

다음은 Windows 7 ISO 파일을 이용해 Windows 7 가상머신을 만들고 인터넷에 접속하는 단계를 진행합니다.




Windows 8/10의 Pro 버전 운영체제는 Hyper-V를 지원합니다. (Home 버전은 아쉽게도 Hyper-V를 사용할 수 없습니다.)


Hyper-V는 Microsoft의 Windows 운영체제에서 사용할 수 있는 가상화(Vitualization) 기술을 일컫는 용어입니다. 전산 전공자나 컴퓨터에 능통한 사용자가 아니라면 참 이해하기 어려운 말이죠. 이 용어를 쉽게 설명하자면...


전통적인 컴퓨터 기술에서는 하나의 컴퓨터에 하나의 윈도가 설치되고 실행되는것이 일반적인데 반해 하나의 컴퓨터에 두 개 이상의 윈도를 설치하여 동시에 실행할 수 있도록 해주는 기술이 바로 Hyper-V 입니다.


Hyper-V와 같은 기술을 가상화(Virtualization) 기술이라고 하는데 가상화 기술은 운영체제 벤더에 따라 여러가지 이름으로 부르고 기술적으로도 구현방식이 조금씩은 다릅니다. 가장 대표적으로 가상화 기술을 사용할 수 있도록 해주는 소프트웨어가 바로 VMWare 입니다.


윈도에서 지원하는 Hyper-V는 Windows 8의 경우 Pro 버전 이상에서 사용할 수 있는데 최초 설치시에는 비활성화 되어 있습니다. 이 비활성화되어 있는 Hyper-V는 다음과 같이 간단하게 활성화할 수 있습니다.


Hyper-V 활성화 방법

먼저 제어판에서 "프로그램 및 기능"을 실행한 뒤 "Windows 기능 켜기/끄기"를 선택합니다. Windows 10의 경우 상태바의 돋보기 표시에서 control.exe를 실행한 뒤 "프로그램 제거" - "Windows 기능 켜기/끄기"를 찾아가면 됩니다.



위 화면처럼 Hyper-V를 찾아 V 표시를 합니다. 그리고 확인 버튼을 클릭하면 Windows는 Hyper-V 기능을 활성화 시킵니다. 활성화 작업이 완료되면 다음과 같이 완료 메시지와 "리부팅"이 필요함을 알려줍니다. 꼭 리부팅을 해야합니다.




리부팅이 완료되면 다음과 같이 검색을 통해 hyper 를 입력하여 "Hyper-V 관리자"와 "Hyper-V 가상 컴퓨터 연결" 메뉴가 보임을 확인합니다.



두개의 아이콘을 자주 사용하는 앱에 등록해 주면 편리하게 실행할 수 있습니다.


Hyper-V 관리자를 실행한 화면입니다.



"가상 컴퓨터"가 하나도 없음을 알 수 있습니다. 


Host 컴퓨터와 Guest 컴퓨터(가상컴퓨터)

Hyper-V와 친해지기 위해서는 몇가지를 이해하고 넘어가야 합니다. 위 화면에서 Hyper-V 관리자가 실행된 컴퓨터는 Host 컴퓨터라고 부릅니다. Windows의 가상화 기술이 적용된 컴퓨터엔 최초에 반드시 1개의 Host 운영체제가 설치되어야 합니다. Host 운영체제가 설치된 컴퓨터를 Host 컴퓨터라고 부르는 것이죠. (운영체제 없이 사용할 수 있는 컴퓨터는 없습니다.) 그리고 Host 컴퓨터에 추가로 설치된 운영체제를 Guest 운영체제라고 부르고Guest 컴퓨터라고도 부릅니다.


어떤 가상화 기술이든 가상화 기술이 적용된 컴퓨터에서 실행되는 두개의 운영체제는 하나의 컴퓨터의 자원 즉, CPU, RAM, DISK, Network 등의 자원을 공유(Share)하게 됩니다. 그런데 Windows와 같은 데스크탑 운영체제에서 지원되는 가상화의 경우 Guest 컴퓨터를 사용하기 위해서는 반드시 Host 컴퓨터를 켜야 합니다.


어쨌든 Hyper-V 관리자가 설치된 컴퓨터를 Host 컴퓨터라 부른다는 것과 Guest 컴퓨터를 사용하기 위해서는 Host 컴퓨터를 반드시 켜야한다는 것을 이해해야 합니다.


이 제약사항 때문에 Windows를 사용하는 일반 사용자들은 Hyper-V를 잘 사용하지 않습니다. 실제로 가상화를 많이 사용하는 곳은 "기업"이나 "공공기관"의 서버입니다. IBM, HP 등의 서버 제조업체들은 가상화를 운영체제 수준이 아닌 하드웨어 수준에서 지원합니다. 그래서 하나의 물리적으로 구성된 서버에 여러 서버 운영체제를 설치하여 각각 따로 따로 켜고 끄고를 할 수 있도록 지원합니다. 이때는 Host 컴퓨터와 Guest 컴퓨터라는 구분을 적용하지 않습니다.이 경우에는 Node(노드)라는 용어로 서버를 구분합니다. A Node, B Node 하는 식이죠.


게다가 기업용, 흔히 Enterprise Solution(기업용 솔루션)으로 출시되는 기업용 서버들은 CPU나 메모리를 마음대로 가상화 머신에 할당할 수 있습니다. 즉, 총 CPU 32개가 장착된 서버가 있다면 노드를 3개(서버를 3개 운영)로 나누고 1번 노드에는 CPU를 16개, 2번 노드와 3번 노드에는 각각 8개씩 할당할 수 있습니다. (게다가 CPU도 가상화하여 실제 물리적인 CPU개수보다 많은 개수의 CPU를 설정하고 가상 CPU를 각 노드에 할당할 수 있습니다.) 램도 마찬가지로 마음대로 할당할 수 있습니다. 당연히 서버를 운영하다 2번 노드의 CPU 부하가 너무 높다면 추가로 CPU를 장착해 할당하거나 1번 노드에 할당된 CPU 2개를 2번 노드에 재할당 할 수 있습니다.


이렇게 자원(Resource)을 재할당 할 때 케이스를 열어 CPU를 옯겨 꼽는다거나 하는 작업은 필요 없습니다. 모든 자원의 할당(Allocation)은 프로그램을 통해 수행할 수 있습니다.




  • 지후대디 2015.09.14 07:44 신고

    가상화 가상화 했었는데 그 명칭이 hyper-v 였군요 vmware만 떠올렸는데 윈도우 자체에 가상화가 있다는 사실도 처음 알았습니다 ^^

    • taeho Tae-Ho 2015.09.14 08:57 신고

      hyper-v는 원래 Virtual PC라는 가상화 솔루션을 인수해서 윈도에 포함시킨건데... 망가뜨렸다는 사람도 있고.. 좋아하는 사람도 있고 그렇더라구요..



어쩌다 보니 우분투 리눅스를 설치해야 했다. 근...2년 만에 우분투를 설치하는 듯 하다. 18.04 버전을 다운로드 하고 설치를 모두 마쳤다. 우분투를 최소 설치 옵션으로 설치하면 자동으로 설치가 진행되면서 DHCP가 가능할 경우 IP를 지멋대로 설정해버린다. 


나름 엔지니어인데.. 그래서야 쓰겠나.. 고정IP로 설정해주기 위해 기억을 더듬어 이더넷의 IP를 설정하는 파일이 있는 /etc/network 디렉토리로 들어갔다. 그리고 음... 내용이 어떻게 되어 있더라 하며 자신있게 interfaces 파일을 cat로 열었는데... 


어랏...뭔가 기억과 다르다..??

우분투 18.04 - interfaces 파일우분투 18.04 - interfaces 파일



이전 버전까지만 해도 /etc/network 디렉토리에 있는 interfaces 파일에서 설정을 변경/추가해주면 되었던 것으로 기억되는데 내용이 예전과 다르게 썰렁하다. 
우분투의 버전이 업그레이드 되면서 또 뭔가 바뀐 듯 하다. OS가 업그레이드 될 때마다 이런 기본적인 네트워크를 설정하는 방식이 바뀐다. 리눅스는 이래서 좀 짜증이 날 때가 많다. 툭하면...바뀐다. 그리고 그 변경된 방법이 더 효율적인가 하면 그렇지도 않은 경우가 대부분이다.

어쨌든 OS를 새로 만들 능력은 안되니...군소리 없이 방법을 찾아 고정IP로 변경했다.

먼저 이더넷의 이름을 알아야 한다. ifconfig -a 명령을 실행해 이더넷의 이름을 확인한다.

ifconfig -a 명령으로 이더넷 이름 확인하기ifconfig -a 명령으로 이더넷 이름 확인하기


ens160... 이놈이 이더넷의 이름이다. 기억하자.

그리고 /etc/netplan 디렉토리로 들어가면 다음과 같이 .yaml 파일이 보인다. 이놈이 IP를 설정하는 파일이다.

01-network-manager-all.yaml01-network-manager-all.yaml


내용은 딱 세줄이 있다. 이렇게 설정되어 있으면 DHCP인가보다.


다음과 같이 내용을 추가한다.

우분투 18.04 고정IP 설정우분투 18.04 고정IP 설정



웃긴건... 각 라인의 : 뒤에 공백이 있는데... 공백이 없으면 에러가 난다. 예를 들면 gateway4:192.168.219.1 처럼 타이핑하면 에러가 난다. ~way: 와 1 사이에 공백이 있어야 한다. 없으면 에러가 난다. 이렇게 대충 만들거면 뭐하러 방식을 변경했나 모르겠다. 무언가 네트워크 관련 새로운 스펙을 넣으면서 변경한것 같은데 이렇게 완성도가 떨어지면 나중에 문제가 꼭...생긴다.

어쨌든 이렇게 설정하고 저장한 뒤 (당연히 root 권한에서 해야 한다.) 다음의 명령을 실행해 적용한다.

# netplan apply

만약 root 계정이 아니라면...

$ sudo netplan apply 

를 실행하면 된다.





안드로이드 스마트폰을 사용하는 사람들이라면 1개의 구글 계정은 필수다. 그리고 웹서핑 중 등록한 즐겨찾기가 스마트폰과 PC에 동기화는 기능 때문에...또는 보안 때문에 구글의 크롬 브라우저를 사용하는 경우도 많다.

그런데 구글 계정을 두개 이상 사용하는 사람들도 많다. 스마트폰에서 사용하기 위해 만든 구글계정과 회사나 학교에서 사용하는 구글계정.. 그리고 사적인 영역을 커버하는 구글계정 등 여러개의 구글 계정을 사용하는 것이 이제는 낯설지 않다.

그러나 크롬브라우저를 사용하다 보니 여러개의 구글 계정을 이동해야 할 경우가 생기고, 혹은 두 계정을 동시에 크롬 브라우저에서 로그인 해 놓아야 하는 경우가 생긴다.

그 때를 대비해 구글 크롬에서는 "사용자 관리" 기능을 통해  여러 사용자 별로 "프로파일"을 만들어 브라우저의 저장공간에 저장하고 관리하도록 되어 있다. 그리고 이 사용자 프로파일은 이 포스트의 핵심 기능인 두 개 이상의 크롬 브라우저를 실행하고 각각의 구글계정(ID)로 로그인하는 기능도 지원하고 있다.

따라서 크롬 브라우저는 저장하고 있는 여러 구글 계정의 프로파일을 지정하여 실행할 수 있는 옵션을 제공한다. 즉 바탕화면에 다음과 같이 두 개의 구글 계정으로 각각 로그인할 수 있는 단축아이콘을 생성할 수 있다. 

위의 두 크롬 아이콘에는 각각 서로 다른 구글계정의 프로파일을 읽어 실행되도록 설정되어 있다.  그리고 각각의 구글 계정 프로파일에서 지정한 아이콘을 통해 어떤 구글계정과 연결된 것인지 알 수 있도록 크롬 브라우저의 아이콘 구석에 계정의 프로필 사진을 함께 보여준다.

이런 크롬브라우저 단축아이콘을 생성하는 과정을 기록해 둔다.

먼저 계정이 연결되지 않은 상태에서 시작한다. 크롬 브라우저에 연결된 구글 계정이 없으면 아래와 같이 왼쪽 구석에 구글 계정 접속정보가 설정되어 있지 않은 상태로 실행된다.

오른쪽 구석의 사람표시를 클릭하면 팝업메뉴창이 실행되는데 아래쪽에 있는 사용자 관리 메뉴를 선택한다.

구글 계정이 등록되어 있지 않으므로 하단의 사용자 추가를 누른다.

사용자 추가를 시작하면 사용자를 지정할 이름과 아이콘을 선택하게 한다. 기본적으로 구글 계정 사용자의 프로필에 사진이 없으면 여기서 선택한 아이콘을 바탕화면에 생성하는 크롬 아이콘에 함께 표시해주는 것으로 보인다. 

그리고 화면 하단에 "이 사용자에 대한 바로가기를 바탕화면에 표시합니다."를 반드시 클릭해야 바탕화면에 지금 추가하는 구글 계정으로 자동로그인하는 크롬 바로가기가 생성된다.


이미 구글 계정이 있으면 로그인하세요를 클릭한다.


구글 계정 로그인 창이 보인다.

구글 계정을 입력하고 로그인 한다.

동기화를 사용하겠느냐고 물어본다. 필요한 대로 선택한다.  이 단계를 마치면 바탕화면에 크롬 바로가기가 생성되는데.. 아래 화면처럼 구글 계정에서 지정한 프로필 사진이 크롬 브라우저의 바로가기에 작게 추가로 표시된다.

이 크롬 브라우저의 아이콘을 실행하면 어떤 구글계정으로 로그인하게 되는지를 바로 알 수 있다.


지금까지의 과정을 두 번째 계정에 대해 한번 더 실행하면 크롬 바로가기 아이콘이 하나 더 생성된다. 즉 맨 앞의 화면에서 봤던 두개의 구글 계정과 연결된 두 개의 크롬 브라우저 바로가기가 생성되는 것이다.



  • 베짱이 2019.05.04 16:20 신고

    괜찮은 기능이네요. 기존에 사용하던 구글 계정과 유튜브나 목적성이 명확한 구글 게정을 추가로 만들어서 사용하는 경우가 많은데 이러면 편할 거 같아요.

    • taeho Tae-Ho 2019.05.04 16:25 신고

      저도 세개의 구글계정을 사용하는데.. 매번 브라우저에서 사용자 전환해서 사용하다가 바탕화면에 서로 구별되는 아이콘을 만들어서 사용하는게 가능하지 않을까 싶어 테스트 했는데....잘 됩니다.. ^^

  • J's_Identity 2019.05.04 16:30 신고

    꿀팁 감사합니다!!



Windows서버나 Linux서버.. 혹은 HPUX, AIX, Solaris 등 서버 시스템을 운영하다 보면 이런 저런 쉘 스크립트나 배치파일을 작성해야 할 일이 종종 생기게 마련이다. 

그렇다보니 쉘 스크립트나 배치파일을 코딩(스크립트를 코딩이라 해야 할진 모르겠지만..)을 할 줄 모르는 엔지니어는 수명이 연봉협상이나 이직 시 손해를 볼 각오를 해야한다. 

그 중에서 이 서버에서 저 서버로 파일의 전송을 자동화해야 하는 경우에는 스크립트 안에 FTP 명령어를 사용하도록 해야 한다.

아래의 예제는 DOS의 배치스크립트를 이용해 특정 폴더에 생성된 파일들을 실행되는 날짜를 파일명에 포함하는 압축파일로 묶어 다른 서버로 FTP를 이용하여 전송하는 스크립트다.

다른 부분은 배치파일을 작성하는 방법을 알고 있었지만 다음의 두가지는 방법을 찾아야 했다.

 1. 폴더내의 파일들을 하나의 파일로 묶는 방법

 2. 생성할 압축파일의 파일명에 오늘 날짜를 포함하도록 하는 방법

파일을 하나로 묶는 법은 유로 압축파일 프로그램을 이용하면 되지만 압축프로그램을 정품으로 구매하여야 하기에 비용부담이 있고 명색이 공공기관에서 불법S/W를 사용할 수는 없었다.  방법을 찾아보니 마이크로소프트에서 제공하는 CAB 파일포맷으로 파일들을 압축해주는 공개소프트웨어를 구할 수 있었다. 당연히 설치는 필요없는 단일 파일로 된 명령행 프로그램이다.

파일명에 날짜를 포함시키는 것은 DOS BATCH 파일을 거의 작성해본적이 없어 쉽지 않았다. 하지만 도스에서 사용해본적이 있는 date 명령과 time 명령에 에 /t 옵션을 주면 오늘날짜와 시간을 출력해주는 것을 이용해 해결할 수 있었다.

결국 다음과 같은 BATCH 파일을 작성하였고 Windows의 작업 스케줄러에 등록하여 주기적으로 생성된 파일들을 하나의 CAB 파일로 압축하여 다른 서버로 백업할 수 있었다.

-------------------------------------------------------------------------------

 for /F "tokens=1" %%a in ('date /t') do set DATE_TODAY=%%a
for /F "tokens=1" %%a in ('hostname') do set HOSTNAME=%%a

set yy=%DATE_TODAY:~0,4%
set mm=%DATE_TODAY:~5,2%
set dd=%DATE_TODAY:~8,2%

 SET FILENAME=%HOSTNAME%-%yy%%mm%%dd%.cab

 echo %FILENAME%
echo %HOSTNAME%

 d:

cd files

 cabarc -r -p N %FILENAME% *.*

echo open 192.168.2.136 > upload.txt
echo user account 123456>> upload.txt
echo bin >> upload.txt
echo prompt off >> upload.txt
echo cd %HOSTNAME% >> upload.txt
echo put %FILENAME%  >> upload.txt
echo quit >> upload.txt


c:\windows\system32\ftp -v -n -s:upload.txt

 del /F /S /Q /A .

rmdir /S /Q .


  • 늘품아빠 2019.04.24 09:17 신고

    복직하면 활용해봐야겠네요 감사합니다



개인의 노트북이나 PC는 물론이고 기업이나 공공기관에서의 USB 저장장치 무단 사용은 (개인)정보유출의 주요 수단으로 악용된다. 때문에 기업이나 공공기관은 내부에서 업무용으로 사용되는 PC나 노트북(서버도 마찬가지)에서의 USB 저장장치 사용을 금지하기도 한다. 


하지만 정보보호 관련 내부 지침으로 금지하고 Endpoint DLP 보안솔루션을 적용해도 이런 저런~방법으로 우회해 USB 저장장치를 사용할 수 있는 경우가 꽤 된다. 어떤 경우는 Endpoint DLP를 모든 PC에 설치하고 중앙의 관리서버에서 차단 정책을 적용해도 오류 혹은 오작동으로 USB 저장장치를 사용할 수 있는 경우도 있다.  


보통은 정보보와 관련된 내부 IT 감사 혹은 ISMS인증심사 과정에서 감사자나 심사원이 주요 IT 운영인력 및 개발자 혹은 개인정보취급자와 인터뷰 과정에서 USB 저장장치의 사용 이력을 확인하게 되는 경우가 있다. 하지만 정보보호전문가들 조차도 PC에서 USB 저장장치의 사용이력을 확인하는 방법을 모르는 경우가 있다.


알고 있더라도 레지스트리를 어렵게~어렵게~ 뒤져야 한다고 알고 있는 경우도 있다. 하지만 의외로 쉽게 Windows PC에서 USB 저장매체의 사용 이력을 확인하는 방법이 있다.


바로 장치관리자에서 그 이력을 확인할 수 있다.


먼저 명령프롬프트(CMD.EXE)를 실행하고 장치관리자를 아래 화면의 명령을 입력해 실행한다. (devmgmt.msc)



이 명령은 Windows의 관리도구들 중에서 장치관리자를 실행하는 명령이다.


장치관리자가 실행되면 다음과 같이 PC내에서 인식된 물리적, 논리적 장치들을 표시해 주는데 "보기" 메뉴로 들어가 "숨겨진 장치 표시"를 선택해 체크(v)가 표시되도록 한다. 



 USB에 꼽았던 장치중에서 저장장치로 인식된 USB 장치는 드스크드라이브와 드라이브로 인식되는데 먼저 디스크드라이브 항목을 펼쳐보면 다음과 같이 한번이라도 USB포트에 꼽히고 디스크드라이브로 인식되었던 장치명이 주루룩~~표시된다.



진하게 표시된 장치들은 현재 인식되어 사용중인 장치이고 회색으로 흐릿하게 표시된 장치는 현재는 인식되지 않는..즉 이전에 인식되었던 장치들이다. (음...참 다양한 USB 메모리를 사용했었나 보다....)


그 중 하나에서 마우스 우클릭을 통해 "속성" 메뉴를 선택하면 실행되는 속성창에서 "자세히" 탭을 선택한다.



"자세히" 탭을 선택하면 중간에 "속성"이 보이는데.. 참 많은 정보를 보여준다. 그 중에서 "마지막 제거 날짜"를 보면 이 USB 디바이스가 마지막으로 디스크드라이브로 사용되었다가 제거된 날짜를 보여준다.


또하나의 USB 저장장치 사용이력을 확인하는 방법은 "휴대용 저장장치"로 확인하는 방법니다. 휴대용 저장장치는 디스크드라이브로 인식된 USB 저장장치에 할당된 볼륨(흔히 드라이브라 부름)이 마운트 된 드라이브명(볼륨명)으로 표시된다.



그리고 여기에서도 "속성" 메뉴를 통해 마지막 제거 날짜를 확인할 수 있다.



두가지 중 어떤 항목을 기준으로 하든 관계없다. USB 포트를 통해 이동식 저장장치를 사용 금지했다면 이 기록이 남아 있으면 안된다.


다만 여기에서 보이지 않는다해서 USB 저장장치를 사용하지 않았다고 단언할 수는 없다. 레지스트리에서 삭제하든, 이 장치관리자에서 삭제하든 흔적을 지울 수 있기 때문이다.


만약 이 흔적들을 삭제했다면 그 땐 Windows에서 기록해주는 로그파일을 뒤져봐야 한다. 레지스트리에서 지울 수는 있지만 로그에는 그 흔적이 남아있기 때문이다.


  • 2019.03.07 11:27

    비밀댓글입니다

    • taeho Tae-Ho 2019.03.07 12:43 신고

      C:\Windows\INF\setup.dev.log 파일에 기록됩니다.



웹서핑을 과도하게 즐기거나(?) 불법SW 다운로드 등을 하다보면 PC가 갑자기 느려질 때가 있다. 백신도 설치되어 있고 Windows 방화벽도 실행중이고 나름 악성코드 감염에도 주의를 한다고 자부하지만 보안과 관련된 일을 하다보니 가끔은 해커(?)들이 드나드는 웹사이트를 방문하거나 출처가 불분명한 다양한 프로그램들을 설치하고 테스트하다 보면 악성코드에 감염된 것이 아닌가 하는 직감이 들 때가 있다.

그럴때 가장 쉽게 악성코드 감염여부를 확인하는 방법을 소개한다. 아마도 컴알못이거나 초보자들에게는 도움이 될 것이라고 생각된다.

먼저 윈도의 시작버튼(Windows 10 기준 창모양)을 클릭한다. 

윈도 창모양의 버튼(시작)을 누르면 나오는 돋보기가 있는 입력창에 cmd 를 입력한다. cmd를 입력하면 윗쪽에 "명령 프롬프트"가 표시된다. 이 명령 프롬프트를 클릭한다. 궂이 관리자 권한으로 실행하지 않아도 된다.

명령 프롬프트가 실행되면 "netstat -ano | more"를 입력하고 실행(Enter)한다.  큰 따옴표는 입력하지 않는다. ^^

그러면 위 화면처럼 컴알못에게는 "이게 뭐지"하는 텍스트가 주루룩 출력된다. 최대한 쉽게 위의 내용을 설명해보면...

TCP는 통신 프로토콜(통신 규약)을 의미한다. 대부분의 프로그램들은 UDP와 TCP라는 두개의 통신 프로토콜을 이용해 서버와 통신을 하게 된다. 예를 들면 PC에 카카오톡 프로그램을 설치하면 카카오톡은 카카오의 IDC(인터넷 데이터 센터)에 있는 카카오톡 서버들과 통신을 한다. 이때 사용되는 프로토콜이 바로 TCP다. (이정도만 이해하자..)

그 다음에 있는 192.168.219.111:14177 은 통신의 출발지인 PC의 IP주소와 통신포트다. 192.168.219.111이 PC의 IP주소이고 뒤의 14177은 통신포트다. IP는 컴의 주소라고 생각하면 되고 통신포트는 집에 있는 외부와 연결된 문의 번호라고 보면된다. (문이 여러개라 가정하고) 이 두번째 항목의 IP가 모두 동일한 것은 바로 PC가 출발지이기 때문이다.

세번째 항목이 바로 이 PC와 통신하고 있는 외부의 서버 IP와 통신포트다. 즉 64.233.189.188:5228에서 64.233.189.188이 서버의 IP주소이고 5228이 통신포트다. (뒤에서 이 IP주소가 어디의 IP주소인지 확인하는 법을 설명한다.) 이 IP는 바로 PC와 통신하고 있는 목적지 IP이다.

네번째 항목인 ESTABLISHED(이스태블리쉬드)라고 읽는다. 이 항목은 두 IP가 지금도 통신을 위해 연결상태를 유지하고 있는지 연결을 시도하고 있는 상태인지 아니면 연결을 종료하고 있는 중인지를 의미한다.

ESTABLISHED 상태는 연결을 유지하고 있다는 의미다. 즉 지금도 PC에서 실행중인 프로그램과 목적지 IP의 서버(클라이언트 일 수도 있다)가 데이터를 주고 받고 있는 중 일 수도 있다는 것을 의미한다.

마지막에 있는 12460은 PC에서 실행하고 있는 프로그램의 ID다. 

이 모든 것을 조합해 빨간색으로 박스가 쳐져있는 부분을 풀이하면 "192.168.219.111 IP에서 실행중인 12460 번 프로그램이 외부의 64.233.189.188 IP 등 여러대의 컴퓨터(서버 혹은 클라이언트)와 여러개의 통신포트를 이용해 연결을 유지한 채 지금 이 순간도 통신을 하고 있는 중이다" 쯤 되겠다.

그렇다면 이 PC에서 실행중인 PID(Process ID) 12460 프로그램이 통신하는 외부의 IP는 도대체 어디일까? 이 IP가 혹시 해커들이 사용하는 IP는 아닌지 확인해야 한다. IP주소를 알고 있으면 이 IP가 어디인지 확인하는 여러 방법들이 있다.

일단 whois 라고 하는 공식적인 IP 조회 방법이 있다. 한국인터넷진흥원에서도 서비스하고 있는데 IP가 할당된(사용하고 있는) 곳을 알 수 있다.

https://krnic.or.kr 에 접속한다.

WHOIS 정보검색 창에 IP 주소를 입력하고 검색 버튼을 누른다. 그러면 입력한 IP를 할당받아 사용하고 있는 조직(회사, 기관, 대학 등)을 알려준다.

입력한 64.233.189.188은 Google이 할당받아 사용중인 IP임을 알 수 있다. 혹시 정체를 제대로 파악하기 힘든 ISP(인터넷 회선 사업자)라면 해킹에 악용되는 IP들을 모아두고 조회 서비스를 제공해주는 사이트에서 한번 더 확인할 수 있다. 

IP트래커(https://www.ip-tracker.org/)와 같은 사이트에서 IP를 입력하고 조회하면 해킹에 악용되는 IP인지를 확인해 주는데 100% 확신할 수는 없으니 참고만 하자.

이제 구글이라는 것을 확인했으니 조금 안심이 되긴 한다. 그렇다면 도대체 PID 12460이 어떤 프로그램이기에 Google과 통신을 하고 있는지 확인해야 한다.

만약 IP가 Google, Microsoft, Ahnlab 등 PC에서 사용하고 있는 프로그램을 개발해 판매하는 회사나 기관이 아니고 정체를 알 수 없는 곳이라면 긴장이 되기 시작한다. 그렇다면 이 프로그램의 정체를 확인해야 한다. 

프로그램의 정체를 확인하기 위해 Windows의 작업관리자를 실행한다. 

PID 를 클릭해 정렬을 시켜보면 PID 12460은 웹브라우저인 Chrome 인 것을 알 수 있다. Chrome이라면 Google에서 만든 웹 브라우저이기 때문에 Google과 통신할 수 있다. 그리고 Chrome은 Naver, Daum 등 Chrome을 이용해 접속한 웹사이트 모두와 통신할 수 있고 Chrome에 추가로 설치한 익스텐션 프로그램들을 만든 곳과도 통신할 수 있다.

하지만 PID 12460이 Chrome이 아니고 처음 보는 프로그램이라면 점점 악성코드일 가능성이 높아진다. 그렇다면 이 프로그램이 내 PC의 어디에 설치된 프로그램인지 설치 경로를 추가로 확인해볼 필요가 있다. 그리고 정상적인 프로그램으로 보인다 해도 다음단계까지 진행해보길 바란다. 해커들도 바보가 아닌 이상 정상적인 프로그램으로 보이도록 위장시키는 경우가 많다.

프로그램을 선택하고 마우스 우클릭을 통해 팝업메뉴를 호출하고 "파일 위치 열기"를 클릭한다. 아래 화면처럼...

그러면 PID 12460이 설치된 폴더가 열린다. 이 화면에서는 PID 12460은 Chrome 브라우저이기 때문에 Chrome이 설치된 C:\Program Files (x86)\Google\Chrome\Application 폴더가 열렸다.

그리고 chrome.exe 선택된 상태로 창이 열린다. PID 12460이 Windows 운영체제의 프로그램이라면 C:\Windows 나 C:\Windows\system32 와 같은 폴더가 열릴 것이다. 만약 이 경로가 C:\Temp, C:\Tmp, C:\User\, 휴지통 등의 아래를 가리킨다면... 악성프로그램일 가능성은 80% 이상으로 높아진다. 

만약 이 단계에서 마저도 모르는 파일이라면 이 프로그램을 개발해 배포한 회사의 정체를 확인해보자.

이 파일에서 마우스 우클릭을 통해 팝업 메뉴를 실행하고 "속성" 메뉴를 클릭한다. 그러면 이 파일의 속성 창이 열린다. 그리고 디지털 서명 창으로 간다.

구글, 마이크로소프트, 한컴, 안랩 등과 같이 상용 프로그램을 개발해 판매하는 제조사들은 "전자서명 인증서"라는 인증기관에서 돈을주고 구매한 전자서명 인증서로 프로그램에 전자서명을 한다. 전자서명을 한 프로그램을 설치하게 되면 Windows는 인증기관을 통해 이 프로그램이 해당 제조사에서 개발해 배포한 프로그램과 동일한지를 확인할 수 있다. 즉 악성코드에 감염되었거나 정상적인 프로그램으로 위장된 악성코드가 담긴 가짜 프로그램인지를 확인할 수 있는 것이다. 기술적으로 어떻게 확인하는지를 설명하자면 전자서명에 대한 긴~이야기가 되므로 생략한다.

자세히 버튼을 누르면 이 프로그램의 전자서명이 올바른지를 확인해 올바르다면 아래와 같이 전자서명(디지털 서명)이 유효하다고 출력한다.

이 디지털 서명(전자서명과 동일한 의미)은 유효합니다. 라는 메시지가 보이면 정상 프로그램이라고 보면 된다. 다만 해커가 자신의 정체를 일부 노출하면서 전자서명 인증서를 인증기관으로 부터 구매하고 악성프로그램에 전자서명해 배포하고 감염시킨다면 유효한 전자서명으로 보일 것이다.

하지만 정체를 노출해가며 전자서명 인증서를 구매하고 악성 프로그램에 전자서명을 해서 배포할 해커는 없을 것이다.

아래 화면은 Windows 인증크랙으로 배포되는 KMS AutoNet 이라는 프로그램의 전자서명 정보화면이다.

WZTeam 이라는 곳에서 전자서명 인증서를 발급받은 것으로 나오지만 "자세히" 보게 되면 신뢰되지 않는다고 나온다. 이런 프로그램들은 가능하면 PC에서 실행시키지 않는 것이 좋으며 실행시키는 순간 PC의 안전은 보장되지 않는다.

심지어 실행파일임에도 불구하고 "디지털 서명" 탭이 아예 나오지 않는 프로그램들도 이따금씩 보인다. 악성 프로그램들은 100% 전자서명이 신뢰되지 않거나 전자서명(디지털 서명) 탭이 아예 보이지 않는다고 보면 된다.

그런 프로그램들이 PC에서 실행중이고 의심스런 IP와 통신하고 있다면 빨리 강제종료 시키고 PC에서 삭제할 것을 권한다.



  • yyy 2019.02.25 16:38

    위의 암호를 입력하니 이렇게 표기되는데 다시 해도 똑같은데 뭐가 문제일까요?
    제 노트북이 해킹 의심되어 찾지못하고 있는 상황이거든요
    빠른 답변 부탁드릴께요

    C:\Users\User>netstat-ano│more
    'netstat-ano│more'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
    배치 파일이 아닙니다.

    • taeho Tae-Ho 2019.02.25 17:42 신고

      netstat 와 -ano 사이에 한칸 띄어 주셔야(공백) 합니다.

    • 2019.02.27 14:48

      비밀댓글입니다

    • taeho Tae-Ho 2019.02.27 15:17 신고

      netstat -ano 뒷 부분의 | more 에서 오타가 있으면 에러가 나면서 명령어 사용법이 출력됩니다.

      그냥 netstat -ano 만 입력해보세요. o는 알파벳 소문자 o 입니다.

  • 2019.06.18 06:19

    비밀댓글입니다

    • taeho Tae-Ho 2019.06.18 20:51 신고

      PC를 이전에 누가 사용했는지를 확인하려면 이벤트뷰어를 이용해 PC에서 발생한 이벤트를 확인하거나... 파일들의 날짜를 확인해 특정일자 이전에 생성된 파일을 검사하는 등의 매우 복잡한 과정이 필요합니다.
      그 과정을 댓글에서 짧게 설명하는 것도 불가능하고요. 구글링을 통해 여러 가지 방법들 하나 하나를 직접 해보시는 방법밖에 없습니다.
      그렇지 않다면 돈을 주고 의뢰하는 방법도 있겠죠.
      그리고 윈도의 로그인 비밀번호를 쉽게 해제 가능하다고 하셨는데... 누가 그런 이야기를 하는지... -.-
      노트북의 경우 노트북의 HDD나 SSD에 접근하려면 물리적으로 분리해 다른 PC에 외장하드로 연결하거나 CD등으로 부팅한 뒤 HDD나 SSD에 접근해야 합니다.

  • Seo 2019.06.18 22:57

    답변해주셔서 감사합니다. 제가 삼성 노트북인데 f4를 계속 눌러.. 제가 pc에 문외한이라 자세히 설명드리기 어렵지만 삼성 복원 솔루션 들어가서 어드민 계정? 으로 접속하면 된다고 하더라고요. 아! 비밀번호 해제가 아니라 어드민 계정이요. 어드민 계정으로 들어가면 비밀번호 안누르고 접속 가능하다고 하더라고요. 그렇게 된다면 굳이 비밀번호를 걸어둬도 ㅠㅠ

    • taeho Tae-Ho 2019.06.19 18:50 신고

      그런 우려라면 Windows의 cmd창에서 lusrmgr.msc 를 입력하고 엔터치시면 "로컬 사용자 및 그룹" 창이 나옵니다. "사용자"를 선택하시면 오른쪽 창에 사용자 계정 목록이 나오는데.. 아마 모르는 계정이 여러개 나올겁니다.
      거기서 현재 로그인할 때 사용하시는 계정을 제외하고 나머지 계정을 모두 "속성" 창에 가셔서 "사용 안함"에 체크를 하세요.
      그러면 복원솔루션에서 비밀번호 없이 로그인하지 못할 겁니다.

  • 2019.06.19 23:05

    비밀댓글입니다

    • taeho Tae-Ho 2019.06.20 18:18 신고

      윈도10홈버전이셨군요. 홈버전에서는 lusrmgr.msc 실행은 안되는 것이 맞구요. 제어판 사용자 계정에 가셔서 보시면 지금 로그인하는 계정 이외의 계정이 보이실 겁니다. 거기서 "사용안함"으로 바꾸시면 되구요.
      이벤트 뷰어는 일정용량만큼만 로그가 남고 오래된 것 부터 지워지는 것이 맞습니다. 3개월치가 보인다면 적어도3개월 안에는 누가 지운것은 아닙니다.

  • 2019.06.20 00:05

    비밀댓글입니다

    • taeho Tae-Ho 2019.06.20 18:19 신고

      복구는 전문업체 이용하시면 가능하실 수도 있는데 윈도 이벤트 로그는 파일크기가 정해져 있고 덮어쓰는 방식이기 때문에 복구가 불가능할 가능성이 매우 높습니다.
      그리고 누군가 어드민계정으로 로그인했다면 이벤트로그의 보안 영역에 기록됩니다. 윈도에 로그인한 모든 이력이 다 기록됩니다.

  • 2019.06.20 02:11

    비밀댓글입니다

    • taeho Tae-Ho 2019.06.20 18:20 신고

      앞에서 말씀드렸듯이 이벤트 뷰어의 보안탭에서 로그인 이력을 보시면 복원솔루션으로 로그인해도 남습니다.

  • 2019.06.20 22:25

    비밀댓글입니다

    • taeho Tae-Ho 2019.06.20 23:02 신고

      복원솔루션을 통해 로그인하는 건 전 경험이 없어서 모르고요...
      Windows 로그온 시 발생하는 이벤트 ID는 4624네요. 작업 범주는 Logon 이구요..
      방금 Windows 10에서 로그온한 뒤 확인한 결과 입니다.

  • 2019.06.21 21:44

    비밀댓글입니다

  • 2019.07.18 11:32

    비밀댓글입니다

    • taeho Tae-Ho 2019.07.18 11:42 신고

      EXIF와 XMP 메타데이터는 사진을 찍을 때 카메라(스마트폰 포함)에서 파일에 덧붙여주는 부가적인 데이터를 의미합니다.
      이 부가적인 데이터는 다음과 같은 데이터가 포함됩니다.
      - 날짜와 시간 정보
      - 카메라 정보(카메라 제조사, 모델명)
      - 카메라 설정(초점 거리, 플래시, ISO 감도, 조리개, 셔터 속도, 회전 방향, 색 공간 등)
      - 저작권 정보(카메라 소유자 정보가 들어갈 수도 있음, 폰 이름 등)
      - 위치 정보(지원하는 기종에 한해서)

      그런데 "메타데이터를 삭제하였는데 이미지에 있는 메타데이터를 그대로 보존한다"는 문구는 앞뒤가 맞지 않는 문장이라 이해가 잘 안되구요.
      재인코딩이라는 것은 인코딩을 다시(또는 한번 더)한다는 의미로 보이구요. 인코딩이라는 것은 데이터를 네트워크를 통해 전송하기 적합한 형태로 변형한다는 정도로 이해하시면 됩니다.

  • 2019.07.20 19:21

    비밀댓글입니다

    • taeho Tae-Ho 2019.07.20 20:58 신고

      전 인스타는 하지 않습니다.
      다만 JSON은 HTTP프로토콜을 통해 통신을 할 때 데이터를 속성과 속성의 값으로 구성하여 전송하는 데이터 구성 방식을 의미합니다.
      즉 사진파일에 함께 저장되어 있는 값을 추출해 JSON 형식으로 사진과 분리하여 전송한 뒤 인스타에서 저장하고 있을 수는 있습니다만.. 첨부된 JSON 파일에 이미지에 포함되어 있던 EXIF 관련 정보가 없다면 알수는 없을 것 같습니다. 말씀하신 path는 사진파일이 인스타에 저장될 때 저장경로로 보입니다. 인스타 입장에서는 이 path도 메타데이터에 해당할 수 있습니다.



앞의 포스트에서 Windows 2012 Server 운영체제가 설치된 서버에 Active Direcotry 서비스를 구성하는 과정을 포스팅했다. 이번엔 1대의 PC를 AD의 멤버로 조인(Join)하고 Active Directory에 사용자 계정을 생성한 뒤 이 계정으로 PC에 로그인하는 과정을 포스팅하고자 한다.

Active Directory 사용자 계정 생성하기

앞의 포스트에서도 언급했듯 AD서비스는 Windows PC 기반의 네트워크에서 PC를 사용하는 사용자들의 계정을 통합관리하는 것이 주 기능이다. (PC 환경의 보안 관리는 덤이다.)

AD서비스에서 사용자 계정을 생성하기 위해서는 "Active Directory 사용자 및 컴퓨터"라는 관리도구를 실행해야 한다. 아래 화면처럼 서버 관리자에서 "도구" 메뉴를 통해 실행할 수 있다.

흔히 도메인 사용자 관리라고 부르기도 하는 "Active Directory 사용자 및 컴퓨터"라는 관리도구다.

먼저 왼쪽 트리에서 AD 서비스 구성 시 입력했던 "blogger.pe.kr" 이라는 도메인이 보인다. 사용자 계정을 생성하기 전에 "조직구성단위"라고 부르기도 하는 "Organization Unit : OU"를 먼저 만들어야 한다.

이 조직 구성 단위라 불리는 OU는 말그대로 기업이나 기관의 조직(부서)단위를 의미한다고 보면 된다. 이후에 OU는 조직(부서)에 따라 PC의 보안정책을 달리 적용하고 싶을 때 유용하게 사용할 수 있다. 예를 들면 고객의 개인정보를 취급하는 개인정보취급자와 개인정보를 취급하지 않는 일반 부서 사용자의 PC에 각각 서로 다른 보안정책(Policy)을 배포할 때 유용하게 사용될 수 있다. 일반 사용자 보다 개인정보를 취급하는 사용자에게는 더욱 강력한 보안정책(Policy)을 적용해야 하지 않겠는가?

조직 이름에 일단 "staff"를 입력했다.

Users 하위에 staff 라는 OU가 생성되었다.

staff OU를 선택하면 오른쪽에 아무것도 없는 빈 창이 표시된다. 여기서 마우스 우클릭하고 "새로 만들기" 메뉴에서 "사용자"를 클릭한다.

새 개체 - 사용자 추가 창이 보이는데 아래와 같이 입력했다.

성과 이름은 실제 성과 이름을 입력한다. 전체 이름에는 자동으로 성과, 이름이 조합된 전체 이름이 표시된다. 그리고 "사용자 로그온 이름"에 사용할 ID를 입력한다. 여기서는 성을 제외한 이름만 입력했다. @blogger.pe.kr은 자동으로 도메인 구성 시 입력한 도메인 주소가 표시된다. Windows 2000 이전 버전 사용자 로그온 이름도 자동으로 표시된다.

다음 버튼을 눌러 비밀번호를 입력한다.

"다음 로그온 시 사용자가 반드시 암호를 변경해야 함"을 체크해두면 생성하는 ID로 최초 로그인 시 비밀번호를 변경하도록 해준다. 실 환경에서는 체크한 뒤 초기 비밀번호를 알려주고 초기 비밀번호로 로그인 시 의무적으로 비밀번호를 변경하도록 하는 것이 좋다.

다음 버튼을 눌러 마침 창으로 이동한다.

마침 버튼을 누르면 사용자 계정의 생성이 완료된다. 

아래 창처럼 kim taeho 라는 사용자의 taeho라는 ID가 생성된 것이다. 목록에 ID는 보이지 않는다.

사용자 계정을 생성한 뒤 이름에서 마우스 우클릭한 뒤 속성창으로 간 뒤 "소속 그룹"을 보면 Domain Users라는 그룹에 소속된 것을 볼 수 있다.

이 그룹은 OU와는 다른 것이다. OU는 조직(부서라고 생각하면 편함)이고 "소속 그룹"은 Windows 운영체제의 그룹으로서 어느 그룹에 속하느야에 따라 각기 다른 권한을 부여 받게 된다.

사용자 계정의 속성에서 계정 탭으로 이동하면 계정 생성 시 입력한 사용자 로그온 이름을 확인할 수 있다. 그리고 "계정 옵션"에 비밀번호 생성 시 선택한 옵션이 표시되어 있다. 여기서 옵션을 변경할 수 있다.

맨 아래에서는 계정의 만료일을 지정할 수 있다. 만료일을 지정하면 해당일 이후에는 해당 도메인에 Join된 멤버 PC들과 서버에 로그온 할 수 없다.

여기까지 작업하면 하나의 사용자 계정 생성이 완료된다.


PC를 AD에 Member로 Join 시키기

다음은 앞에서 생성한 계정(taeho)으로 로그인할 PC를 AD도메인의 Member로 합류(Join)시켜야 한다.

아래처럼 AD 도메인의 멤버로 합류(Join)시킬 PC의 시스템 정보 화면을 실행시킨뒤 컴퓨터 이름 옆의 "설정 변경"을 선택한다.

시스템 속상 창이 실행되면 하단의 "변경"을 클릭한다. 컴퓨터 이름/도메인 변경 창이 실행되는데 작업그룹이 선택되어 있을텐데 "도메인"으로 변경하고 도메인을 입력한다. 

여기서는 앞의 포스트에서 AD 서비스 구성 시 입력한 blogger.pe.kr을 입력했다. 당연히 blogger.pe.kr 도메인에 Join 시켜야 하므로...

그런데 여기서 다음과 같은 에러메시지 창이 나타날 수 있다. 왜냐하면 이 PC는 인터넷이 가능하기 때문에 PC에 설정된 DNS서버(KT DNS)에다가 blogger.pe.kr의 IP 주소를 묻고 KT DNS가 응답한 IP주소에 AD가 있다고 믿고 "나 너네 AD에 멤버로 들어갈께..."라고 ... 대화(?)를 시도할 것이다. 하지만 KT DNS는 이 블로그가 있는 IP 주소를 응답할 것이고 당연히 그 IP주소에는 AD 서비스가 없으므로 아래 처럼 에러가 나는 것이다.

따라서 아래 화면처럼 DNS 주소를 앞에서 AD 서비스를 구성했던 서버로 변경해주어야 한다.  앞의 포스트를 보면 AD 서비스를 구성한 Windows 서버는 192.168.219.54 였다. 기본설정 DNS 서버 주소를 아래와 같이 변경한다.

기본 설정 DNS 서버를 변경한 뒤 다시 소속그룹을 도메인으로 변경하고 도메인을 입력하면 "도메인에 가입할 권한이 있는 계정"의 이름 및 암호를 입력하라고 창이 뜬다.

taeho 라는 ID의 사용자 계정을 만들었으므로 그 이름과 비밀번호를 입력한다.

정상적으로 blogger.pe.kr 도메인의 멤버로 가입되었음을 알 수 있다.

PC를 리부팅한다.

리부팅 한 뒤 보이는 창에서 "사용자 전환" 버튼을 클릭한다.

"다른 사용자"를 클릭한다.

blogger.pe.kr의 AD서버에서 생성한 ID와 비밀번호를 입력한다.

정상적으로 AD 사용자 계정으로 PC에 로그인한 것을 볼 수 있다.

이로서 AD에 사용자 계정을 만들고, PC 1대를 Member로 도메인에 가입시키고 PC에서 AD 사용자 계정으로 로그인하는 과정을 봤다.

사실 이것 만으로도 매우 강력한 보안효과를 기할 수 있다. 자세한 것은 다음에 포스팅할 Policy 관련 포스트를 참조하기 바란다. 언제가 될지는 모르지만~~~





기업이나 조직은 본연의 사업목적을 위해 다양한 정보시스템을 운용하고 있다. 대부분의 조직에서 필수적으로 사용되는 그룹웨어나 이메일은 물론 사업목적에 따라 ERP, 영업관리, 생산관리, 회원관리 등 매우 다양한 정보시스템을 운용한다. 임직원이 해당 정보시스템에 접속하기 위해서는 ID(Identity)라 불리는 사용자 계정을 각각의 정보시스템에 생성해 접속하며 보안을 비밀번호를 입력하도록 하고 있다. 때문에 한명의 임직원이 이들 정보시스템을 사용하기 위해서는 각각의 정보시스템에 별도로 ID를 만들고 비밀번호를 설정해야만 한다.

모든 정보시스템을 하나로 통합하여 만들고 사용한다면 하나의 ID와 비밀번호만 관리하면 되겠지만 각각의 정보시스템들은 만들어진 시기도 개발업체도 제각각이다. 그래서 해당 정보시스템들을 하나로 통합하는 것은 거의 불가능하다. 그렇다 보니 임직원의 입/퇴사, 부서이동 등에 따라 정보시스템들에 사용자 계정을 생성하고 삭제하는 작업이 빈번하게 일어나고 권한부여에 대한 관리가 매우 어려워진다. 

때로는 퇴사자 계정이 삭제되지 않고 남아 있기도 하고 부서이동으로 인해 권한을 회수해야 하는데 회수가 되지 않고 방치되기도 하는 등 계정관리가 부실해지고 이로인해 내부자에 의해 기업의 기밀이나 고객정보, 개인정보가 유출되기도 한다. 그래서 등장한 솔루션이 통합계정관리(Identity Management)솔루션이다.

하지만 통합계정관리솔루션은 매우 고가의 솔루션인데 반해 도입한다해서 이미 운용중인 정보시스템에 그리 유연하게 연동되지 않으며 관리도 쉽지도 않다. 조직의 사용자 계정 관리 스타일을 최대한 솔루션의 컨셉에 맞춰줘야 하는데 형상이 고정되어 있는 솔루션을 조직 스타일에 어거지로 맞추려다 보니 과도한 커스터마이징을 공급사에 요구한다.

하지만 솔루션을 판매하고 기술지원하는 공급사들은 전문 개발사가 아니며 형상이 이미 고정된 솔루션이기 때문에 커스터마이징에 한계가 있는 경우가 많다. 이로인해 제대로 커스터마이징이 이루어지지 않는 경우가 많기 때문에 큰맘먹고 비싼 돈 들여 구축한 통합계정관리시스템이 제 역할을 다하지 못하기도 한다.

대부분의 통합계정관리솔루션은 사용자의 계정정보를 타 정보시스템과 연동하기 위해 위해 자체적으로 국제 표준 LDAP(Lightweight Directory Access Protocol)을 지원하는 계정DB를 갖고 있거나 다른 LDAP을 지원하는 솔루션을 계정DB로 사용할 수 있도록 지원한다.

이때 사용할 수 있는 LDAP서비스가 바로 마이크로소프트의 액티브 디렉터리(Active Directory) 서비스다. 액티브 디렉터리 서비스는 마이크로소프트의 Windows 기반 사용자 컴퓨터들에게 LDAP기반의 통합인증서비스를 제공하기 위해 개발한 서비스로서 거의 국제 표준 LDAP으로 사용된다고 봐도 무방하다.

ISO27001, PIMS, ISMS 인증 등 다양한 보안인증심사나 기업의 IT 내부감사 과정에서 사용자 계정에 대한 라이프사이클 관리 실태, 운용중인 Windows 기반의 PC에 대한 보호정책 적용 실태를 파악할 때 필수적으로 들여다봐야 하는 정보시스템이 바로 통합계정관리를 위해 사용되는 Windows Active Directory다.

기본적으로 AD의 역할과 정책적용 등에 대해 알고있긴 하지만 많은 기업의 AD를 살펴보면서 여러가지 테스트하고 싶은 케이스들이 있기 때문에 테스트 환경을 구축하게 되었다. 그 과정에서 Active Directory 구성 과정을 기억해두기 위해 이번 포스팅을 올린다.


Windows 2012 Server의 Active Directory 구성하기


액티브디렉터리를 구성하기 위해서는 먼저 Windows 2012 서버를 설치해야 한다. 그리고 다른 AD서버를 바라보지 않는 최상위 액티브디렉터리 서버 혹은 폐쇄망에서 외부 인터넷과 연동되지 않는 도메인을 구성하기 위해서는 아래와 같이 IPV4의 TCP/IP 설정에서 "기본 설정 DNS 서버"를 잠시 자기 자신으로 설정해두어야 한다. 



외부 DNS로 설정해 둘 경우 인터넷에 실제로 존재하지 않는 도메인 주소를 외부 DNS서버에서 찾으려하기 때문에 오류가 발생한다.

DNS 서버 주소를 자기 자신으로 변경하고 서버 관리자를 실행한 뒤 로컬서버의 설정을 변경해야 한다.



로컬서버를 선택한 뒤 컴퓨터 이름을 클릭해 서버의 이름(hostname)을 적당한 이름으로 변경한다. 



컴퓨터 설명과 컴퓨터 이름만 변경하고 소속그룹은 그대로 둔다. Active Directory 설정 과정에서 작업 그룹이 도메인으로 자동으로 변경된다. 

컴퓨터 이름을 변경하면 리부팅해야 한다는 메시지가 뜬다. 서버를 리부팅하고 관리자로 로그인 한 뒤 다시 서버관리자를 실행한다.



서버 관리자에서 2번. 역할 및 기능 추가를 클릭한다.

마법사가 시작되며 역할 및 기능 추가 전에 읽어야할 내용을 보여준다. 가능하다면 꼼꼼히 정독하기 바란다. 엔지니어로서 가져야 할 중요한 습관이다.



모두 읽었다면 "다음"을 클릭한다.

"역할 기반 또는 기능 기반 설치"를 체크하고 "다음"을 클릭한다.



역할 및 기능을 설치할 서버를 선택한다. 기본적으로 "서버 풀에서 서버 선택"이 체크되어 있으며 서버 목록이 나온다. 자기 자신을 선택한다.



"다음"을 클릭하면 서버의 역할을 선택하는 창이 실행된다. 역할 목록에서 "Active Directory 도메인 서비스"를 선택하면 추가적으로 반드시 설치해야 하는 종속 기능 및 역할이 표시되며 동의를 구한다.



"기능 추가" 버튼을 클릭한다.

"Active Directory 도메인 서비스"에 체크(v)가 되어 있다.



"다음"을 클릭하면 .Net Framework 4.5 등 추가할 기능 목록을 보여준다.



"다음"을 클릭한다.

AD DS(Active Directory Domain Service)에 대해 설명해 준다. 내용을 정독하길 권한다.



"다음"을 클릭한다.

마지막으로 확인 창을 보여주고 설치할 것인지 묻는다.



"설치" 버튼을 선택한다.

설치 진행률을 보여준다. 꽤나 오래 걸릴 수도 있다.



설치가 완료되면 서버 관리자로 돌아간다.

서버 관리자 상단에 보면 아래 화면과 같이 주황색 느낌표가 있는 삼각형 표시가 보인다. 그 주의 표시를 클릭하면 "배포 후 구성"에 필요한 작업이 보인다.



바로 "이 서버를 도메인 컨트롤러로 승격"하는 작업이 필요하다. 해당 문구를 클릭한다.

AD 도메인 서비스 구성 마법사가 실행된다.



이 서버는 다른 AD 도메인 서비스와 연동되지 않는 조직의 최상위 도메인 컨트롤러 역할을 하게 되므로 아래 화면과 같이 "새 포리스트를 추가합니다."를 선택한다.



그리고 도메인 이름을 원하는 도메인 이름으로 지정한다. 나는 내 이 블로그의 도메인인 "blogger.pe.kr"를 입력했다. 집에서 외부와는 연동없이 사용할 것이므로 인터넷에 존재하는 실제 도메인 주소를 넣어도 문제는 없으나 썩~권장되지는 않는다.

"다음"을 선택하면 DNS 옵션 창이 보인다. 역시 상단의 메시지가 모두 보이지 않는다. 가능하면 전체 내용을 읽는 습관을 들여야 한다.



"더 많이 표시"를 클릭하면 전체 경고 메시지가 보인다.



내용을 이해했다면 "확인"을 선택하고 "다음"을 선택한다.



입력한 도메인에서 자동으로 NetBIOS 이름을 추출해 준다. 조금 오래 걸릴 수도 있다.

AD DS의 DB, 로그 파일 경로와 SYSVOL 공유폴더의 경로를 묻는다. 기본값으로 그냥 설정한다.



"다음"을 선택한다. 

지금까지 입력한 내용을 검토하도록 내요을 보여준다.



"다음"을 선택한다.



마지막으로 앞에서 보여줬던 몇개의 경고 메시지를 보여준다. 단순 경고 이므로 "설치"를 선택하여 DNS 서비스를 설치한다.



모든 설치와 구성이 완료되면 자동으로 리부팅 메시지가 보여진다.

"확인"을 선택히 리부팅하면 된다.



리부팅이 되고 나면 이제 원격에서 원격 데스크톱으로 접속을 해본다. AD의 도메인 계정으로 접속이 되는지 확인할 수 있다.



사용자 자격증명을 입력한다.



원격 컴퓨터의 인증서가 서버의 호스트네임인 AD01과 입력했던 도메인주소 (blogger.pe.kr)(로 보인다.



AD 계정으로 원격접속 후 IP의 TCP/IP IPV4 속성을 보면 "기본 설정 DNS 서버 주소"가 로컬호스트를 의미하는 127.0.0.1로 변경되어 있었다.



원래 DNS 서버 주소였던 KT DNS서버로 다시 변경했다.



여기까지가 AD서버를 설치하고 AD 서비스 구성을 설정하는 과정을 알아보았다.


다음으로 해야할 일은 AD에 OU를 생성하고 계정을 생성한 뒤 내부 사용자 PC에 AD의 일반 사용자 계정으로 접속이 가능한지를 확인하는 일이다.  다음 포스팅도 조만간 올리자.


  • 2019.04.15 16:18

    비밀댓글입니다

    • taeho Tae-Ho 2019.04.15 16:23 신고

      도움이 못돼서 죄송합니다만 어댑터의 설정변경에 대한 권한이 없는 계정으로 로그인하신 건 아닌지요? AD 구성과는 별개로 AD서버 내의 리소스 설정 권한 문제 인 듯한데요... 저도 AD구성을 자주하는 것은 아니라서 다양한 오류의 경험은 없네요. 원격접속으로 들어갔을 때 설정 변경 권한이 없으면 콘솔에서 접속해보시는 것은 어떨까 싶습니다.



vSphere (구 VMWare ESXi)는 하나의 물리 서버에 여러개의 가상서버를 설치하고 운영하는데 최적화 된 가상화 솔루션이다. 요즘에는 도커(Docker)와 같이 보다 효율적으로 하나의 서버에서 응용프로그램(컨테이너)+파일시스템을 가상화하는 방법도 있는데 두 가상화 기법은 서로 배타적인 것이 아니라 상호 보완적인 것으로써 서버 가상화가 필요한 경우와 응용프로그램 가상화가 필요한 경우를 구분하여 적절히 사용하면 보다 효율적으로 가상화를 구현할 수 있다.


회사에 재직하지 않다보니 때때로 서버 기반의 테스트가 필요할 때 테스트 환경이 무척 아쉬울 때가 많다. 그래서 이번에 가상서버 환경을 구축하려고 마음먹고 60만원 정도의 조립 PC 하나를 구입했다.

  • CPU : Intel 8세대 i3
  • RAM : DDR4 16G
  • SSD : 256G
  • HDD : 놀고 있던 330G HDD (SATA)
  • CASE : Slim PC (MicroATX)
  • LAN : 내장 RealTek RTL8111H Gigabit Ethernet

문제는 어떤 가상화 솔루션을 설치하느냐다. 그냥 CentOS를 설치하고 VirtualBox나 VMWare를 설치하는 일반적인 방법도 있고 가상서버 전용 서버인 Microsoft의 Hyper-V Server나 VMWare의 vSphere를 설치하는 방법도 있다.


가장 좋은 방법..그리고 가장 선호하는 것은 vSphere를 설치하는 것이다. 하지만 일반 조립PC에 vSphere를 설치할 때는 한가지 고려할 점이 있다. 바로 조립PC의 부품 중 하나인 랜카드를 조금 좋은 것으로 장만해야 한다는 것이다. 조립PC 견적을 낼 때 메인보드에 일체형으로 제공되는 리얼텍(RealTek) 랜카드는 vSphere에서 지원하지 않아 설치 도중에 에러가 나면서 설치가 중단된다. 이 문제를 회피하는 가장 쉬운 방법은 3Com 등 vSphere에서 기본적으로 지원하는 랜카드를 하나 더 구입해 장착하는 것이다. 하지만 쓸데없는 엔지니어의 도전정신(?)이 발동해 SW적으로 문제를 해결해 보기로 했다.


vSphere 설치 용 iso 파일에 RealTek 랜카드 드라이버를 통합하여 리패키징(?)하는 방법을 써보기로 했다.


역시나 기본적으로 제공되는 vSphere 6.5의 iso 파일을 다운받고 부팅 USB를 만들어 설치를 시도하니 다음과 같은 에러가 발생하며 설치가 중단되었다. 몇 년 전 재직중일 때 서버를 한 대 조립하여 교육환경을 만들면서 처음 경험했던 바로 그 에러다. 그때나 지금이나 마찬가지라니.... (그 땐 시간이 없어 그냥 3Com 랜카드를 추가로 구입하여 설치했었다.)



vSphere 6.5를 설치하는 중에 No Network Adapters 에러 메시지. 이 에러 메시지가 발생하지 않게 하려면 다운로드 받은 iso 파일에 리얼텍 랜카드 드라이버를 포함시켜 다시 iso 파일을 리패키징해야 한다.


vSphere 6.5 iso 파일과 함께 다음 URL에서 다운로드 한 RealTek 랜카드 드라이버 파일을 함께 위치 시킨다.



다운로드는 맨 아래의 "VIB File of version 8.0.45a" 라는 다운로드 링크를 클릭하면 다운로드 된다. 사이즈는 1M 남짓으로 매우 작은 사이즈다. 파일명은 net55-r8168-8.045a-napi.x86_64.vib 이다.


이 드라이버와 호환되는 RealTek 랜카드는 다음과 같다.


(Realtek RTL8111B / RTL8168B / RTL8111/RTL8168 / RTL8111C / RTL8111CP / RTL8111D(L) / RTL8168C / RTL8111DP / RTL8111E / RTL8168E / RTL8111F / RTL8411 / RTL8111G / RTL8111GUS / RTL8411B(N) / RTL8118AS / D-Link DGE-528T)



만약 설치하고자 하는 PC에 장착된 랜카드 종류와 모델명을 모른다면 위의 에러 화면에서 [Alt]+[F1] 키를 동시에 누르면 콘솔 로그인 화면으로 전환되고 ID에 root, 비밀번호는 입력하지 않고 엔터키를 누른다. 

정상적으로 수행되면 쉘 프롬프트가 실행되며 다음의 명령어를 실행하여 랜카드의 모델명을 확인할 수 있다.



뒤의 화면이 잘렸는데 그 잘린 부분에 모델명이 출력되었다. 


내장 랜카드의 드라이버 파일(.vib)과 vSphere 설치 iso파일(6.5)이 준비되었다면 이제 두 파일을 병합해 새로운 vSphere 6.5 설치 iso 파일을 만들 수 있게 해주는 파워쉘(PowerShell) 스크립트를 다운로드 받아야 한다. 이 스크립트의 이름은 "ESXi-Customizer-PS" 이다.


다음의 주소에서 다운로드 받을 수 있다.



이 ESXi-Customizer-PS 스크립트를 다운로드 받아 vSphere 6.5 설치파일과 앞에서 다운받은 RealTek 랜카드 드라이버 .vib 파일을 같은 디렉토리에 저장한다. 참고로 이 세개 파일 이외의 파일은 없도록 한다. 


ESXi-Customizer-PS 스크립트는 Microsoft의 PowerShell로 작성된 스크립트다. 파워쉘은 Windows 8, 10 등과 Server 운영체제에 기본으로 탑재되어 있는데 보안 문제로 인해 ESXi-Customizer-PS와 같은 스크립트는 실행이 차단되어 있다. 스크립트 실행을 허용하기 위해서는 다음과 같은 과정을 거쳐야 한다.


먼저 파워쉘을 관리자 권한으로 실행한다.



하지만 파워쉘에서  ESXi-Customizer-PS 스크립트를 실행하면 다음과 같이 에러가 발생한다. 


"이 시스템에서 스크립트를 실행할 수 없으므로 .... 파일을 로드할 수 없습니다." 라는 에러가 발생하는데 에러 메시지의 하단부를 보면 "보안 오류"라고 되어 있다. 파워쉘은 기본적으로 PS> 프롬프트에서 명령어만 실행할 수 있고 스크립트를 통한 일괄 실행은 차단되어 있다. 보안성이 검증되지 않은 악성 스크립트의 실행을 차단하기 위해서다. 하지만 강력한 스크립팅을 지원하면서 스크립트 실행을 차단하는 모순은 보안을 고려하지 않고 설계된 Windows 운영체제의 숙명이다.



스크립트의 허용을 위해서는 다음과 같은 절차를 거친다.


"executionpolicy" 명령은 현재 스크립트의 실행이 가능한지 여부를 확인할 수 있는 명령어다. "Restricted" 라는 응답이 오는 것은 실행이 차단되어 있기 때문이다.



"set-executionpolicy unrestricted" 명령을 실행하여 스크립트의 실행을 허용하도록 변경한다. 다시 "executionpolicy"를 실행하면 "Unrestricted"라고 출력되는 것을 볼 수 있다. 이제 ESXi-Customizer-PS 스크립트를 실행할 수 있다.


하지만 이 상태에서 ESXi-Customizer-PS 스크립트를 실행하면 다음과 같은 에러메시지가 출력된다. 




"FATAL ERROR: VMware. ... is not available as a module or snapin! ...." 에러메시자가 출력되며 실행이 되지 않는다. 즉 ESXi-Customizer-PS 스크립트는 VMWare에서 제공하는 별도의 파워쉘 모듈이나 스냅인의 설치를 필요로 하는 것이다. 이 모듈을 설치하면 다음모듈에서 또 에러가 나고...를 반복한다. 모두 설치가 완료되어야 한다. 관련 모듈을 한번에 모두 설치하면 편하겠지만 그런 정보는 찾지 못했다. 귀찮지만 그냥 하나 하나 설치하면 된다.


이런 파워쉘의 추가 모듈 또는 스냅인은 인터넷에서 간단한 명령으로 설치할 수 있다.  파워쉘에서 사용가능한 모듈은 다음의 웹페이지에서 확인할 수 있다. (http://www.powershellgallery.com)



각각의 모듈에 대한 정보를 들여다 보면 어떤 명령으로 설치할 수 있는지가 친절하게 설명되어 있다. 파워쉘 프롬프트에서 다음과 같이 설치되는 것을 확인할 수 있다. 원격의 리포지토리에서 VMWare 관련 파워쉘 모듈을 다운로드 받고 설치가 진행된다.



"Save-Module -Name VMWare.[모듈명] -Path [다운로드경로]" 명령과 "Install-Module -Name VMWare.[모듈명]" 명령으로 설치한다. 이 두 명령은 파워쉘의 리포지토리에서 필요한 모듈을 검색, 설치하는 명령어 같은데... 처음 사용해보는 명령어 였다. -.- 하나 하나 꼼꼼히 공부하고 사용하면 좋겠지만 지금은 vSphere 6.5를 설치하는 것이 목적이므로 자세한 공부는 나중에 하기로... ^^


하여튼 이 두 명령어를 이용하면 VMWare에서 제공하는 파워쉘 모듈을 설치할 수 있다. 하나를 설치하면 또 하나의 모듈이 없어 에러가 나고... 에러난 모듈을 또 설치하고 나면 다른 모듈이 없다고 징징거리고... 서너번?? 반복 작업을 하니 드디어 ESXi-Customizer-PS 스크립트가 정상 실행된다.



위에서는 D:\vmware에 vSphere 6.5 iso 원본파일과 RealTek 랜카드 드라이버 .vib 파일 그리고 ESXi-Customizer-PS 스크립트(버전2.6.0)을 함께 저장한 뒤 실행한 화면이다.  작업이 완료되면 아래 처럼 새로운 iso 파일이 생성되어 있다. 파일명은 ESXi-6.5.0-20180804001-standard-customized.iso 이다.



이 파일(ESXi-6.5.0-20180804001-standard-customized.iso)을 이용해 설치 부팅 USB를 만들고 설치를 진행하니 RealTek 랜카드를 인식하고 오류없이 설치단계로 진행이 되었다. 그리고 설치가 완료된 뒤 브라우저를 통해 접속하니 다음과 같이 잘 접속되고 로그인 가상머신의 생성과 실행이 잘 되었다.





  • student 2019.08.09 00:41

    리얼텍 커스터마이징으로 합본으로 만드신 iso 파일 공유받을수없을까요ㅕ ㅠㅠ

    • taeho Tae-Ho 2019.08.09 08:08 신고

      에구... 지금은 인텔 랜카드 하나 더 장착해서 사용하고 있습니다. 그래서 그 합본 파일은 삭제하고 없네요. 죄송합니다~
      웬만하면 그냥 랜카드 하나 더 장착하시는게 정신건강에 이롭습니다. ^^
      저도 쓸데없이 도전해본거라서요.

  • 제라드 2019.10.29 13:11

    파워쉘모듈 일괄설치 방법 아래 URL 참고하면 되겠네요.

    https://thesysadminchannel.com/install-vmware-powercli-module-powershell/

    많은 도움 되었습니다.

    • taeho Tae-Ho 2019.10.29 21:07 신고

      작년에 썼던 포스트인데... 좋은 정보를 댓글로 주시시 감사합니다~



예전 포스트에서 칼리 리눅스(Kali Linux)를 최신으로 업데이트 하기 위해 apt-get update 명령을 실행했더니 리포지토리가 변경되어 업데이트 패키지를 다운로드 받지 못하는 문제에 대해 언급했다. 그리고 리포지토리 오류를 해결하기 위해 새로운 리포지토리의 URL을 찾아 변경하는 방법을 포스팅 했었다. (보러가기 - http://blogger.pe.kr/614)


그런데 오늘은 apt-get update 명령을 실행했더니 다음과 같은 에러 메시지가 출력되면서 update가 실패했다.


 root@kali:~# apt-get update

받기:1 http://ftp.harukasan.org/kali kali-rolling InRelease [30.5 kB]

오류:1 http://ftp.harukasan.org/kali kali-rolling InRelease

  다음 서명이 올바르지 않습니다: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <devel@kali.org>

내려받기 30.5 k바이트, 소요시간 1초 (22.4 k바이트/초)

패키지 목록을 읽는 중입니다... 완료

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://ftp.harukasan.org/kali kali-rolling InRelease: 다음 서명이 올바르지 않습니다: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <devel@kali.org>

W: http://http.kali.org/kali/dists/kali-rolling/InRelease 파일을 받는데 실패했습니다  다음 서명이 올바르지 않습니다: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <devel@kali.org>

W: Some index files failed to download. They have been ignored, or old ones used instead.

root@kali:~#


이번엔 인증키 오류다.


이 인증키는 사용 중인 칼리리눅스가 정상적인 패키지인지를 검증하는 인증키 인데 apt-get update를 주기적으로 실행하여 인증키를 업데이트 해주지 않으면 Expired(만료) 되어 위와 같은 오류가 발생한다고 한다.


이 문제는 명령 줄 하나를 실행하여 인증키를 업데이트 하면 해결된다.


wget -q -O - https://archive.kali.org/archive-key.asc  | apt-key add


아주 간단하다.


이 명령을 실행하고 나면 다음과 같이 정상적으로 apt-get update가 실행된다.


root@kali:~# apt-get update

받기:1 http://ftp.harukasan.org/kali kali-rolling InRelease [30.5 kB]

받기:2 http://ftp.harukasan.org/kali kali-rolling/main amd64 Packages [16.0 MB]

받기:3 http://ftp.harukasan.org/kali kali-rolling/non-free amd64 Packages [166 kB]

받기:4 http://ftp.harukasan.org/kali kali-rolling/contrib amd64 Packages [101 kB]

내려받기 16.3 M바이트, 소요시간 18초 (857 k바이트/초)                          

패키지 목록을 읽는 중입니다... 완료

root@kali:~#


이제 apt-get upgrade 명령을 실행해 칼리리눅스를 최신버전으로 업그레이드 할 수 있다.


만약 리포지토리를 찾을 수 없다거나 개별 패키지의 다운로드에 실패한다면 리포지토리를 변경해야 하는 것은 아닌지 앞에 언급한 포스트의 내용을 확인해보아야 한다.



  • 혼자보실꺼면 비공개로 2019.04.25 19:39

    요세 보기 힘든 복사금지 블로그네요ㅋㅋ

    • taeho Tae-Ho 2019.04.26 08:34 신고

      ㅎㅎ 플러그인이 활성화되어 있는지도 몰랐네요.. 미안합니다~~ ^^ 비활성화 시켰습니다~ 이제 복사 잘~될꺼에요~.
      근데..명령어는 직접 타이핑하시는게 기억에 오래남게 하는데 도움이 될거에요~ ^^



플로피디스크 여러장을 바꿔가면서 Windows 3.1을 처음 설치해본게 엊그제 같은데 셀 수 없이 많은 Windows 버전을 거쳐 Windows 10까지 왔다. 하지만 MS Windows의 새버전이 나올 때 마다 문제는 계속 생겨난다.


운영체제라는 것이 엄청나게 복잡한 구조의 CPU와 RAM 그리고 HDD와 여러 반도체 부품들로 이루어진 하드웨어 위에서 실행되는 프로그램이다 보니 버그가 없을 수는 없겠지만 Windows는 특히나 버그가 많이 발생한다. 그리고 그 이유가 MS와 인텔의 합작으로 인해 생겨나는 것이라는 점을 알 사람들은 안다.


아니나 다를까 최신 Windows 10 버전 1803으로 업데이트 하면 컴이 다운되고 화면이 먹통이 되고 없던 드라이브가 생겨난다(?)는 소문이 떠돌기에 업데이트를 하지 않고 버텼었다. 사실 업데이트를 중지하는 것도 예전에 비해서 까다롭다. 특히나 구글링을 해보면 삼성 놋북에서 문제가 발생했다는 글이 많다. 다행스럽게도 난 인텔 Core i5 7세대 CPU가 달린 LG의 그램이라 안심했다. 


Windows 10의 자동 업데이트를 끄기 위해서는 예전 처럼 제어판에서 윈도업데이트 끄기만 하면 안된다. 어느샌가 자동업데이트가 살아나 버리기 때문이다. 이는 어떤 방식으로든 MS가 사용자가 인지하기 어려운 방법으로 무심코 자동 업데이트를 살리는 조작을 하도록 유도하기 때문이다. 이런 유도에 넘어가지 않기 위해서는 서비스관리자에서 아래 처럼 두개의 업데이트와 관련된 서비스를 "사용 안함"으로 바꿔야 한다.


그렇지 않으면 언제 어떻게 다시 Windows update가 자동으로 실행될지 알 수 없다.


서비스 관라자 화면서비스 관라자 화면


나도 분명 두개의 서비스를 사용안함으로 해 두었던 기억이 있는데 어느샌가 windows 10의 1803 버전 패치를 다운받고 설치 대기 상태가 되어 있었다. 내가 무슨짓을 했기에 말도 많고 탈도 많은 1803 버전 패치를 다운받았는지 모르겠다.


어쨋든 그 문제가 발생한다는 소문이 돈지 두어달이 지났기에 이제는 해결되지 않았을까 싶어 1803 버전 업데이트 패치를 설치했다. 


약 20여분... 서너번 컴의 화면이 껌뻑이고 리부팅하는가 싶더니 업데이트가 완료되었다.


그런데.. 역시나 아직까지 소문으로 떠돌던 문제점이 해결되지 않았다. 내게 발생한 문제는 바로 F: 드라이브가 생기는 문제였다.


디스크관리자디스크관리자


디스크 0번...그러니까 노트북에 기본으로 탑재되어 있던 SSD의 맨 앞에 있는 OEM파티션에 드라이브 문자 F:가 멋대로 할당되어 탐색기에서 보였다. Windows 10이 부팅되고 동작하는데 문제는 없지만 앞으로 어떤 문제가 발생할지는 알 수 없다.  그리고 웃긴건... 원래 SDXC (G:) 의 드라이브 문자가 F: 였다. 그런데 드라이브 문자가 G: 로 바뀌고 OEM 파티션에 F:가 할당된다는 것이다.


이 문제는 mountvol.exe 명령으로 잘못 할당된 F: 드라이브 문자를 삭제하고 SDXC에 임의로 부여된 G: 드라이브문자를 원래대로 F: 로 변경해주면 된다. 


먼저 cmd를 관리자 권한으로 실행한다.


cmd를 관리자 권한으로 실행cmd를 관리자 권한으로 실행


그리고 mountvol.exe 명령을 아래와 같이 실행한다. 


mountvol.exe 명령 실행mountvol.exe 명령 실행


아래와 같이 디스크 0의 가장 앞에 있는 OEM 파티션에 F: 드라이브 문자가 삭제되어 있다. 그리고 SDXC (G:)에서 "드라이브 문자 및 경로 변경..." 을 실행한다. OEM 파티션에 부여된 F: 드라이브문자를 삭제할 때도 이 방법을 쓰려 했지만 OEM 파티션에 대해서는 이 메뉴가 실행되지 않는다. 그래서 mountvol.exe 명령을 사용했다.


디스크 관리자디스크 관리자


아래 화면처럼 드라이브 문자 할당을 클릭하면 앞에서 삭제했던 F: 드라이브 문자가 보인다. 만약 F: 드라이브 문자를 삭제하지 않고 이 메뉴로 들어오면 F: 드라이브 문자가 사용중이기 때문에 리스트에 보이지 않는다.



그리고 깔끔하게 리부팅 한번 해주면 작업은 완료된다.


문제가 있는 Windows 10 의 버전 1803 이다. 도스창에서 Winver.exe 명령을 실행하면 이 화면이 보인다.



Windows 10 버전 1803 업데이트를 설치하고자 한다면...

행운을 빈다.






종종 칼리리눅스를 설치할 일이 생기는데 그 때마다 한글 환경 설정과 VMWareTools 설치 방법을 검색하기 귀찮아 정리해 둔다.

영문 환경도 그닥 문제는 없지만 이따금 한글이 아쉬울 때... 참 깝깝해진다.


● Kali Linux 설치 시 언어와 키보드를 한국어와 "한국어(101/104키 호환)" 키보드 혹은 모두 English(US)로 해도 된다. 여기서는 한국어로 설치했을 경우의 순서다. 

● 이 설치 과정은 Kali Linux 2 (2017.03) 버전 기준이다.

1. 한글이 깨지는 상태에서 일단 root 계정으로 로그인 한다.

2. Shell(명령어)창을 열고 언어를 영어(C)로 맞춘다.

    # LANG=C; export LANG

3. 설치패키지 정보를 업데이트 한다.

   # ap-get update

   - 여기서 제대로 업데이트 안될 때는 http://blogger.pe.kr/621 를 참조한다.

4. 한글로 설치했을 경우 설정 과정의 한글 메시지가 깨지는 것을 방지하기 위해 한글 폰트를 설치한다.

   # apt-get install fonts-nanum*

만약 이 단계에서 에러가 발생하는 경우가 있는데 lock 파일 때문에 오류가 난다면 에러메시지 상에서 지정하는 경로에 들어가 lock 파일을 삭제한다. 어떤 경우에는 하나만 지워도 되고 어떤 경우에는 하나를 지우고 나면 다른 경로에 또 다른 lock 파일이 있다면서 에러가 나는데 그 파일도 지우고 다시 실행한다.

5. 이때부터 한글메뉴가 제대로 보이기 시작하는데 가급적이면 로그아웃하고 다시 로그인한다.

6. VMWareTool 설치를 위해 VMWare의 VM메뉴에서 "Install VMWar Tools" 메뉴를 선택한다. (바탕화면에 마운트된 CDROM드라이브가 보인다.)

7. Shell(명령어)창에서 다음 명령을 실행하여 VMWareTools 설치에 필요한 환경을 만든다.

   # cd ~

   # apt-get install git gcc make

   # apt-get install linux-headers-*

8. github에서 VMWareTools의 패치를 가져온다.

   # git clone https://github.com/rasa/vmware-tools-patches.git

9. git에서 가져온 패치디렉토리에 사용중인 VMWareTools 파일들을 복사한다.

   # cd vmware-tools-patches/

   # cp /media/cdrom/VMwareTools-9.9.3-2759765.tar.gz downloads

10. VMWareTools를 설치한다.

   # ./untar-and-patch-and-compile.sh

11. 리부팅한 뒤 다시 로그온 한다.

   # reboot

12. Shell(명령창)을 실행하고 한글입력기 설정을 위해 fcitx와 관련 라이브러리를 설치한다.

  # apt-get install fcitx-hangul

  # apt-get install fcitx-lib*

13. 입력기를 설정한다.

  # im-config

  -> 이후 GUI에서 "확인"과 "YES"를 누른다. (2단계를 거친다.)

  -> 입력기 목록이 나오면 "fcitx"를 선택하고 "OK(확인)"을 누른다.

14. 지역 및 언어설정

  -> "설정" 창을 열고 "지역 및 언어" 설정창을 연다.

  -> 언어(Language) 및 형식(Format)을 "한국어", "대한민국"으로 설정한다. 

      : English(United States), United States(English)도 관계 없다.

  -> 입력소스(Input Source)에 "한국어(101/104)키 호환"이 없으면 추가하고 맨 위로 이동시킨다.

      아래에 Hangul, 영어(미국) 혹은 English(US) 등이 함께 있어도 관계 없다. (주의! 그냥 Hangul 이라는게 보이면 무시하자, 잘못 건드리면 OS자체가 먹통된다.)

15. 이제 fcitx를 설정한다.

  # fcitx-configtool

  -> 이후 GUI에서 "Input Method" 탭에 "키보드-한국어-한국어(101/104키 호환)"을 추가하고 맨 위로 보낸다.

      (맨 아래에 + 를 누른 뒤 "Search input Method" 입력창에서 "한국어"를 입력하면 키보드 목록을 보여준다. 그 목록에서 선택하면 된다.)

16. (필요하다면)Firefox 한글 환경을 위해 다음의 패키지를 설치한다.

   -> apt-get install iceweasel-l10n-ko


-- 끝 --



Windows 운영체제를 사용하다 보면 이따금씩 파일이 삭제되지 않고 오류가 발생하곤 한다. 웬만하면 리부팅하거나 탐색기에서 드라이브를 선택하고 속성 메뉴를 실행하고 도구 탭에서 오류 검사를 하면 해결되지만.... 이번엔 오류 검사에서는 아무런 문제가 없다고 나오는 황당한 경우를 경험했다.

하지만 파일을 삭제하려고 시도하면 다음과 같은 에러가 뜬다.



원래 폴더였던 것들이 모두 크기 0 인 파일로 인식되고 삭제하려 시도하면 0x80070570 에러가 발생하면서 삭제되지 않는 문제다. 드라이브의 오류검사를 해도 안되고 리부팅을 한 뒤에도 삭제되지 않는다.



MSDN을 뒤져도 만족할만한 답이 보이질 않는다. 하지만 우여곡절 끝에 도스창에서 실행할 수 있는 CHKDSK.EXE 명령에 특정 옵션을 주어 실행해야만 문제를 해결할 수 있었다.



위 화면 처럼 CHKDSK. 드라이브명 /F 명령을 실행하면 시간이 조금 걸릴 수도 있지만 오류가 발생했던 폴더가 모두 다시 보이고 그 안의 파일들로 모두 정상적으로 복구 되었다. 아마도 폴더 이름과 실제 파일이 위치한 디스크의 논리적 위치를 연결시키던 고리 중 특정 부분의 연결이 끊어진 듯 하다.


어쨌든 CHKDSK.EXE 명령을 통해 오류가 수정이 되었고 정상적으로 사용이 가능했다. 사실 다시 삭제하긴 했지만~


  • *저녁노을* 2017.10.02 05:25 신고

    잘 보고가요

    즐거운 추석 되세요

  • 지후대디 2017.10.09 13:06 신고

    저도 그런 경우가 가끔은 있었는데 아직은 대부분 재 부팅 하면 해결되어서 그런지 이런 오류는 처음 보는 군요.
    이방법도 잘 기억해 두어야 겠군요.

    • taeho Tae-Ho 2017.10.10 11:04 신고

      이 문제 해결을 위해 서칭을 하다 보니 Windows에서는 fat16, fat32, ntfs, exFAT 파일시스템만 알고 있었는데 요즘은 ReFS라는 파일시스템이 새로 생긴것 같더라구요. IT는 정말 끊임없이 공부해야 하는 듯 합니다.


2015년에 칼리리눅스 2.0이 처음 나왔을 때 설치해서 이따금씩 사용하던 칼리리눅스...  취약점 진단도구인 네서스도 함께 설치해서 사용하고 2017년 1월에 2.0 새버전이 릴리즈 돼서 업데이트도 하고 잘 사용했었다. 하지만 몇달 전 노트북을 바꾸면서 가상머신을 이전했는데 무슨 문제인지 칼리리눅스가 부팅도 잘 안되고 부팅이 돼도 알 수 없는 오류가 나서 그냥 재설치 하기로 했다.

하지만... 모두(?)가 알고 있듯 칼리리눅스는 미쿡~에서 만든 배포본이다. 당연히 한글은 잘 지원되지 않는다. 

칼리리눅스 2.0의 2017.01 버전 설치 시 언어를 한글로 설정하고 설치하면 다음 화면처럼 한글이 깨진다. 

당연히 로그인 전에도 깨지고... 그리고 터미널을 실행해도 한글은 깨진다.  서양인들이 한글의 위대함을 안다면 이렇게 방치하지는 않을텐데...



이 칼리리눅스의 한글이 깨지지 않게 하려면 한글폰트 패키지를 (fonts-nanum)를 설치해야 한다. 이 한글깨짐 관련해서는 많은 블로거들이 방법을 올리는데 그 방법은 매우 간단하다. 아래 화면처럼 apt-get update 명령을 실행하고 apt-get install fonts-nanum* 명령으로 한글폰트를 설치하라는 것이다. 

하지만 최근엔 인터넷을 통해 패키지나 업데이트를 배포하는 리포지토리의 소스 URL이 변경되어 아래 처럼 fonts-nanum 패키지를 설치하기 위한 작업에 오류가 발생하면서 실패하게 된다.

위 화면에서는 LANG=C 명령을 실행하여 에러메시지가 한글이 아닌 영문으로 출력하도록 했다. 언어를 변경하지 않으면 메시지 중 일부가 한글로 출력되면서 어떤 에러인지 파악이 어렵게 된다.

이처럼 칼리리눅스 2.0 2017.01 버전을 설치한 뒤 apt-get 명령이 제대로 실행되지 않에러는 /etc/apt/sources.list 파일에 변경된 리포지토리의 URL을 넣어주면 해결된다. 이전에 포스팅한 http://blogger.pe.kr/614 를 참고하여 수정하면 된다. sources.list를 수정한 뒤 다시 apt-get update를 실행하면 아래 화면처럼 제대로 실행되는 것을 확인할 수 있다. 만약 이상한 에러가 다시 발생한다면... 오타가 없는지 확인하라..!! (아래 화면은 기존 터미널을 종료하고 다시 실행했기 때문에 메시지가 한글로 출력되고... 당연히 깨져보인다. apt-get update 명령이 정상적으로 수행되었지만 이 화면을 자주 접하지 않은 사람은 정상수행 여부를 확인하기 힘들다. 명령 실행 중 출력되는 메시지는 그만 큼 주의를 기울여 봐야한다. 

apt-get update 명령이 정상적으로 실행되었기 때문에 apt-get install fonts-nanum * -y 명령을 실행하면 아래 처럼 패키지를 다운로드 받는다.

다운로드 받은 패키지파일을 언팩~하고 설치한다.

그리고 reboot 명령으로 리부팅한다.

리부팅 후에는 한글이 제대로 출력되는 것을 확인할 수 있다.

하지만 한글입력은 여전히 안된다. 한글 입력과 한글 출력은 엄연히 전혀 다른 문제라는 것을 명심하자. 폰트는 출력할 때 사용하고 입력은 별도의 한글입력기를 설치하고 설정을 해줘야만 한글 입력 문제를 해결할 수 있다.



꽤 오래 전 부터 IT 업계에는 서버 운영체제에 대한 가상화 열풍이 불고 있다. 그리고 그 열풍을 주도하는 기업은 바로 서버 가상화 솔루션을 공급하고 있는 VMWare다.  IT 업종에서 일하는 사람치고 VMWare를 모르는 사람은 없을 것이다. 개발자나 엔지니어의 노트북, PC에는 의례... VMWare Player 혹은 VMWareWorkstation이 설치되어 있는 경우가 많다. 물론 나도 노트북에 Windows를 설치하면 가장 먼저 설치하는 SW가 바로 VMWare Player다. 그리고 뒤 늦게 Microsoft에서도 Hyper-V라는 운영체제 가상화 솔루션을 Windows Pro 버전부터 사용할 수 있도록 기본 탑재하여 판매하고 있다.


그리고 2012년 즈음부터 Windows 서버에서 가상화 기능을 제외한 대부분의 GUI와 가상화에 불필요한 대부분의 서비스를 제거한 Hyper-V Server를 지원하고 있다. Hyper-V 서버를 설치하면 GUI가 없고 CMD 창만 덜렁~있는 것을 알 수 있다. 당연히 대부분의 제어판과 관리도구 또한 지원하지 않는다. 


이번 포스트에서는 Hyper-V Server 2016을 설치하고 Windows 10 pro부터 지원하는 Hyper-V Manager를 통해 Hyper-V Server 2016에 접속하는 단계까지를 포스팅한다. 과정은 꽤나 길다.


Hyper-V Server 2016 설치

Hyper-V 서버의 설치는 Windows Server의 설치와 비슷하다. 다만 조금 간단하다. 이 과정은 몇몇 화면으로 대체한다.



설치할 디스크를 선택하고 파티셔닝하는 과정 또한 동일하다.



설치 준비 및 파일 복사 과정 등을 거쳐 Hyper-V Server를 설치하는 과정은 Windows 서버를 설치하고 Windows 로고가 뜨는 것 까지는 동일하다.




Hyper-V Server 2016 기본 설정


여기서부터 Windows Server 설치와는 완전....다르다. 설치가 모두 완료되고 리부팅이 되면 화려한(?) Windows 로그인 창 대신 난데없이 도스창이 뜬다. 그리고 관리자 계정(Administrator)의 비밀번호를 설정하란다.



비밀번호를 변경하고 나면 파란색의 새로운 도스창이 실행된다. 이후에도 config.cmd를 실행하면 이 창을 볼 수 있다. 이 창에서는 도메인설정, 관리자 계정의 추가, 원격접속 허용 여부, IP등 네트워크 설정 등 Hyper-V Server의 기본 설정을 할 수 있는 창이다. 



몇몇 설정(예:컴퓨터 이름)을 하다보면 다음과 같이 리부팅해야 한다는 메시지가 나오는데 나중에 해도 된다.



Hyper-V 서버의 네트워크를 설정하는 화면이다. 나중에 원격PC에서 Hyper-V Manager를 통해 접속한 뒤 Internal Switch를 생성하고 Hyper-V Server 내부망을 구성할 때 이 창에서 Hyper-V Internal Switch의 IP를 추가로 설정할 때 이 창을 이용할 수 있다. 




Hyper-V Server 2016에 외부에서 원격데스크톱(MSTSC)으로 접속하기 위한 설정이다.



위의 화면에서 원격 데스크톱으로 접속을 가능하게 한 뒤 원격접속을 시도해봤다. 


여기서부터는 원격 데스크톱으로 접속한 화면이다. 설정을 모두 마치고 나서도 원격데스크톱으로 접속하면 config.cmd가 자동으로 실행된다.



Hyper-V Server 2016에 Windows 10 pro의 Hyper-V Mnager 연결 설정하기


일반적인 Windows Server 운영체제만 다뤄보았기에 여기서부터는 매우 생소했다. Hyper-V Server는 GUI가 제공되지 않기에 어떤 설정을 변경하기 위해서는 모두 PowerShell이나 명령어를 이용해 설정을 변경해야 했다. 



다음은 파워쉘을 리모트에서 사용할 수 있도록 설정하고 CredSSP 인증을 통해 원격 연결이 가능하도록 설정해주어야 한다.



기본적으로 여기까지는 구글링을 통해 설정방법을 비교적 쉽게 찾을 수 있다. 하지만 "Hyper-V Manager"를 통해 "Hyper-V 서버에 연결"하려하면 원격 관리에 대한 온갖 인증 오류가 나면서 접속이 안되는 경우가 있다. 그리고 이 경우 하나 하나 원인을 찾고 해결해가는 과정이 힘겹다. Hyper-V 관리자를 통해 Hyper-V Server 2016에 접속하기 위해서는 Windows RM에 대한 설정과 CredSSP라는 인증에 대한 구성을 설정해야하는데 그에 대한 설명이 MSDN에 조차 쉽게 설명되어 있지를 않다.


그리고 나서 Windows 10 pro가 설치된 PC(Hyper-V Manager 실행되는 PC)와 Hyper-V 서버의 hosts 파일에 서로를 등록해주면 서로간에 신뢰할 수 있는 컴퓨터로 인식되어 비교적 쉽게 Hyper-V Manager를 통해 원격관리가 가능한 듯 하다. (단, Windows 10 pro와 Hyper-V Server가 동일 네트워크(워크그룹 및 도메인)인 경우로 한정한다.


Hyper-V Manager를 통해 Hyper-V Server에 연결하기

hosts 파일에 서로의 IP와 컴퓨터이름을 등록하였다면 Hyper-V Manager를 실행하고 다음과 같이 Hyper-V Server에 연결을 시도한다. 컴퓨터의 이름은 hosts 파일에 등록한 이름이고 사용자는 아래와 같이 "컴퓨터이름\계정명" 의 형태로 입력한다. (이렇게 하지 않으면 오류가 발생했다.)



정상적으로 설정이 되었다면 아래 화면처럼 Hyper-V Server가 연결되고 로컬에서와 동일하게 가상머신을 생성하고 구동할 수 있다. 



다만 CentOS 6.6의 경우 2세대 가상머신으로 생성하면 키보드 인식오류로 인해 설치가 불가능하다. (CentOS7 부터는 이상없이 2세대로 생성이 된다.) 그래서 위의 화면에 보이는 CentOS 6.6은 1세대 가상머신으로 생성하였다.






예전에 Kali-Linux 설치 후 원격접속(mstsc)도구를 이용해 X 환경을 사용할 수 있도록 도와주는 xrdp / xfce4 에 대한 포스팅을 한적이 있다. (보러가기)


xrdp / xfce4xrdp와 xfce를 이용해 mstsc로 x-window 접속하기


그런데 최근 CentOS를 설치 한 뒤 mstsc 접속을 위해 똑같이 작업을 했지만 connect error가 발생하는 현상을 접하게 됐다. 


sesman connect ok

sending login info to session manager, please wait...

xrdp_mm_process_login_response: login successful for display...

started connecting

connecting to 127.0.0.1 5910

error – problem connecting


확인 결과 이 문제는 Kali와는 달리 CentOS에 특정 패키지가 설치되어 있지 않아 발생하는 것 같다.

이 에러 발생시에는 다음과 같은 절차에 의해 tightvncserver를 설치해주면 해결된다.




$ sudo apt-get remove xrdp

$ sudo apt-get install tightvncserver

$ sudo apt-get install xrdp


물론 앞의 포스트에서 설정한 xrdp 관련 설정은 그대로 두면 된다. 추가로 설정을 변경해줄 필요는 없다.



구글 드라이브는 기본적으로 사용자 계정의 홈디렉토리에 생성됩니다. 하지만 이 기본경로는 C:드라이브여서 꽤나 많은 공간을 낭비하게 되죠. 그래서 MicroSD를 노트북에 꼽고 이 MicroSD에 구글드라이브를 생성하고 싶었습니다. 하지만 구글드라이브는 최초 설치시와 설치되고 구글계정과 연결이 되어 있는 상태에서는 동기화 경로를 바꿀 수 있는 환경설정 옵션을 제공해주지 않기 때문에 일단 한번 구글계정과 연결한 이후 계정 연결 해제와 재 연결 과정을 거쳐 드라이브 동기화 폴더를 변경해야 합니다.

그 과정을 지금부터 설명합니다.

먼저 구글드라이브의 동기화를 중지합니다. 다음과 같이 구글드라이브 앱에서 마우스 우클릭을 하면 다음과 같이 팝업메뉴가 실행되죠. 오른쪽 위의 점세개를 클릭합니다.

아래 화면처럼 환경설정 창이 실행되면 가운데 탭인 "계정" 탭을 선택합니다. "계정" 탭에는 "계정 연결 해제..." 버튼이 보입니다. 클릭하면 연결을 해제하겠냐는 창이 보입니다. "연결 해제" 버튼을 클릭합니다.

아래 화면처럼 연결이 해제되었으며 더 이상 동기화 되지 않는다는 메시지가 보입니다.

창을 닫고... 다시 구글 드라이브 앱에서 마우스를 우클릭합니다. 동기화가 중지되고 구글계정 연결이 해제되어 있기 때문에 아래 처럼 "로그인" 창이 실행됩니다.



"로그인" 버튼을 클릭하면 아래 화면처럼 로그인 창이 뜹니다. 구글 계정을 입력하고...다음 창에서 비밀번호를 입력하고 로그인합니다.

비밀번호를 입력하고 다음~다음~버튼을 누르다 보면 아래 화면처럼 "설정이 끝났습니다" 라는 메시지가 나오는데.. 여기서 멈춥니다!!! 그리고 창의 아래를 보면 "동기화 옵션" 버튼이 보입니다. 이 버튼을 클릭해야 합니다. 구글은 동기화 폴더 변경 기능을 여기에 숨겨??? 놓았습니다.

"동기화 옵션" 탭에 보면 폴더 위치를 변경할 수 있는 "변경..." 버튼이 보입니다.

아래 화면처럼 다른 폴더로 변경하고 "동기화 시작" 버튼을 누르면 변경된 폴더에 동기화가 시작됩니다.

이렇게 계정 연결을 해제하고 다시 연결하는 과정에서 동기화 폴더를 변경한 뒤에는 다시 계정 연결을 해제하기 전까지는 동기화 폴더를 다시 변경할 수 없습니다.



  • ㄴㄴ 2019.01.15 21:09

    짱짱 구글드라이브 고객센터보다 훨 낫음!!@!


서버보안 관련 일을 하다 보면 VMWare나 Hyper-V를 이용해 노트북에 리눅스나 윈도 서버를 가상머신으로 구동할 일이 자주 생깁니다. 그래서 이 블로그의 앞쪽 글을 보면 VMWare, Hyper-V, VirtualPC등 가상화 프로그램에 대해 많은 포스트가 있는데요. 이번엔 Windows 10의 HyperV 사용법 입니다.

이전의 Hyper-V와 크게 다르지는 않습니다.

일단 HyperV는 CPU제조사인 Intel에서도 우선순위가 높은 지원 기능 중 하납니다. 그래서 HyperV를 사용하기 위해서는 컴퓨터의 바이오스에서 관련 기능을 활성화 해주어야 합니다. 이 이야기인 즉슨... CPU 수준에서 가상화를 지원한다는 의미이며 이는 가상화의 성능이 단순히 운영체제의 프로그램 레벨에서 구현하는 것 보다 훨씬 좋아질 수 있다는 의미이기도 합니다.

일단... 다음과 같이 노트북 혹은 컴퓨터의 바이오스에서 "Intel(R) Virtualization Technology"와 비슷한 항목을 찾아 Enable 합니다. 제 노트북의 경우 LG 그램인데 이 항목 하나만 Enable 하면 됩니다. 하지만 다른 바이오스의 경우 VT 로 시작하는 다른 항목도 있을 수 있습니다. 보통은 하나 혹은 두개 정도만 Enable 하면 됩니다. 만약 이 항목이 없다면 CPU 혹은 메인보드에서 가상화를 지원하지 않는 것입니다.

일단 바이오스 설정을 성공적으로 마쳤다면 Windows 10을 시작하고 로그인한 뒤 제어판으로 이동합니다. 그리고 Windows 기능 켜기/끄기를 찾아 아래 처럼 Hyper-V 항목을 찾습니다. 처음은 V 체크가 되어 있지 않습니다. 아래 화면처럼 두 항목을 모두 V 체크 합니다.

만약 Hyper-V 항목이 보이지 않는다면....



포기하세요. 현재 사용중인 Windows 10에서 Hyper-V를 지원하지 않는 겁니다. 아마도 Pro 버전 아래 즉 Home 버전에는 Hyper-V가 포함되어 있지 않습니다. VMWare난 Virtual PC를 별도로 설치하여 사용하여야 합니다.

위 두 항목을 체크하고 확인 버튼을 누르면 한참 뭔가를 작업하고 리부팅하라고 합니다.

리부팅 하면 위 화면처럼 설정을 진행합니다. (사진 속 인물은 누굴까요?????)

모든 작업이 끝나고 나면 아래 화면처럼 Hyper-V 관리자가 메뉴에 보입니다.

가상 머신을 만들 준비는 끝났습니다.

다음 포스트에서는 가상머신을 만들고 게스트 머신인 가상머신에서 호스트 머신인 노트북의 인터넷 연결을 통해 인터넷을 나가기 위한 가상 스위치를 만드는 방법에 대해 설명합니다.




벌써 몇년이 지났지만.... VMWare Player에서 NAT를 설정하는 방법을 포스팅한 적이 있습니다. (http://blogger.pe.kr/227)


그리고 어느덧 시간이 흐르고 흘러 VMWare Player가 VMWare Workstation Player로 이름이 바뀌었고 버전도 어느새 12.1 까지 판올림되었습니다. 그럼에도 불구하고 기본적인 VMWare의 컨셉은 바뀌지 않았습니다.



예전과 마찬가지로 VMWare Workstation Player를 설치하면 가상 네트워크의 사용을 위해 두개의 기본적인 가상 네트워크 카드를 생성합니다. 



그리고 NAT에 VMNet8이 사용되는 것도 예전 버전과 동일합니다. 그리고 이 네트워크 카드의 IP는 기본적으로 192.168.234.1 인가하는 IP가 설정되어 있습니다. 


만약 이 IP를 그대로 쓴다면 NAT로 설정되어 설치된 가성머신에서 인터넷의 사용이 문제 없을 것 같습니다. 이 IP에 대해 NAT 설정 시 사용할 Gateway가 지정되어 있기 때문입니다.


하지만 이 IP를 사용할 수 없다면 다음의 과정을 거쳐 원하는 내부 네트워크 설정으로 변경해야 합니다.



먼저 VMNet8의 IP를 아래와 같이 네트워크 속성 창을 실행하고 설정합니다. 아래 화면에서는 192.168.110.1 로 지정하였습니다. 당연히 가성머신의 IP도 192.168.110.x로 설정하여야 합니다. 다만 192.168.110.2 의 IP는 사용하지 마시길 바랍니다. NAT 사용 시 방화벽IP가 2번을 사용하기 때문입니다. 만약 별도로 원하는 네트워크를 지정하고 싶다면 원하는 IP 대역으로 변경하여 지정합니다.



그리고 VMWare Workstation Player에는 포함되어 있지 않은 vmnetcfg.exe 라는 설정 프로그램을 설치해야 합니다. 이 파일은 VMWare Workstation 버전부터 함께 설치되고 Player에는 포함되어 있지 않습니다. Workstation을 설치하고 이 파일을 복사해 둔 뒤 Workstation을 삭제하고 Player를 설치한 뒤 Player 설치 경로에 붙여넣기 해야 합니다. 


(예전엔 설치파일이 extract 되었었는데 설치과정을 제외하고 파일만 추출하는 extract 옵션이 잘 동작하지 않는 듯 싶습니다. 웬일인지 extract가 되지를 않습니다.)


그런 복잡한 과정을 거치기 싫다면 아래 첨부파일을 다운로드 받아 압축을 해제하고 Vmware Workstation Player 경로에 붙여넣기한 뒤 관리자 권한으로 실행하면 됩니다.


vmnetcfg.zip


아래와 같이 Virtual Network Editor가 나타나면 VMNet8을 선택한 뒤 아래 화면과 같이 설정하면 됩니다. 




이따금씩 리눅스 서버에 구축되어 있는 웹페이지의 소스를 수정할 일이 생기곤 합니다. 

윈도의 경우 울트라에딧, 에딧플러스 등등 익숙한 텍스트 편집기들이 FTP클라이언트 기능을 갖고 있어 소스를 궂이 PC에 다운로드 하지 않고도 서버에 접속하여 편리하게 수정할 수 있습니다. 


하지만 리눅스에는 그런 가벼우면서도 편리한 도구가 흔치 않은 듯 합니다.  

그러다 찾은 방법이 리눅스 민트에 기본적으로 포함되어 있는 gedit의 플러그인 기능입니다. gedit의 플러그인 중에 ftp 클라이언트 기능을 확장시켜주는 놈이 있습니다. 하지만 역시나... 플러그인만으로 동작하는 것은 아닙니다. 리눅스 민트의 기본 파일 탐색기인 니모(Nemo)와 (우분투에서는 노틸러스와) 연동되어 동작하네요.


그 방법을 지금부터 기록합니다.


먼저 gedit에서 사용할 ftp클라이언트 플러그인을 설치합니다. 설치 과정은 아래의 명령을 하나씩 차례대로 실행해주면 됩니다.


sudo apt-get install subversion

mkdir -p ~/.gnome2/gedit/plugins

cd ~/.gnome2/gedit/plugins

svn checkout http://gedit-ftp-browser.googlecode.com/svn/trunk/ ftp-browser

mv ftp-browser/FTP.gedit-plugin ftp-browser/FTP.py .

sudo rm -r ftp-browser/


관련 홈페이지는 요기...입니다.  https://code.google.com/archive/p/gedit-ftp-browser/


모두 설치가 되었으면 이제 민트리눅스의 기본 파일 탐색기인 Nemo를 실행합니다. 우분투라면 노틸러스를 그냥 실행하면 됩니다. 그리고 다음과 같이 주소창을 보이게하고 ftp 혹은 sftp 서버의 주소를 다음과 같이 입력합니다. 포트번호를 변경했다면 아래 사진처럼 주소 끝에 : 를 붙이고 포트번호를 입력하면 됩니다.



주소를 입력하고 조금 기다리면 아래 화면처럼 사용자 계정과 비밀번호를 입력하라고 합니다. 당연히 입력해야겠죠?? 입력 후 또 잠시 기다립니다. 기다림의 시간은 조금 길 수도 있습니다.




아래 사진처럼 로그인이 완료되고 홈디렉토리가 보입니다. 그리고 왼쪽 창 하단에 접속된 서버명이 "네트워크" 항목에 보입니다.



그런데 이 서버는 리부팅하거나 로그아웃/로그인하면 해당 서버 정보가 "네트워크"에서 사라집니다. 그래서 다음 화면과 같이 해당 서버를 "책갈피"에 스크랩해 두어야 합니다. 그러면 다음번 접속시에는 서버 접속 1번만 인증해주면 됩니다.



이제 gedit를 실행합니다.

그리고 "보기" 메뉴에서 "가장자리 창" 메뉴를 클릭합니다. 그러면 아래 화면처럼 좌측에 디렉토리 브라우징 창이 보입니다. 그리고 Nemo 탐색기에서 등록했던 서버가 보입니다.



쭉~~찾아 들어가면 아래 화면처럼 서버내의 소스파일을 열어 수정하고 저장할 수 있습니다.



그런데...한가지 단점은...

접속이 끊기거나 리눅스 민트에 로그아웃, 로그인하면 Nemo 탐색기에서 다시 한번 접속을 해줘야 한다는 것입니다.

접속 부분이 조금 번거롭긴 하지만 보안을 생각하면 그점이 장점이 될 수도 있을 것 같습니다.


  • 지후대디 2016.03.22 07:54 신고

    지막 편집기 실행화면은 윈도우 편집기 못지 않아보입니다 리눅스에서도 이런 편집기가 있었군요 ssh도 될지 궁금해 집니다

    • taeho Tae-Ho 2016.03.23 19:58 신고

      네..SSH로 접속하는 SFTP도 잘 됩니다. 저 화면도 SFTP로 접속한 겁니다. ^^ 함 써보세요~~


LG의 노트북 브랜드인 "그램"은 그 인기만큼이나 에쁘죠. 게다가 얇고 무게도 매우 가볍습니다. 지금까지 구린 삼성이나 기타 다른 노트북(맥제외)만 보다 그램을 보면 눈이 띠용~~하고 커집니다. 


하지만 그 얇기와 무게를 만들다 보니 "발열"을 제대로 잡지 못한 듯 합니다. 그래서 그14인치 그램을 처음 사고 설정한 것 중 하나가 바로 CPU클럭 제한입니다. (관련 포스트 보러가기 : http://blogger.pe.kr/495)

윈도 OS를 사용할 때는 위 포스트와 같이 CPU의 클럭수를 제한하면 발열이 확연히 줄어듭니다. 당연히 최대 성능도 조금 낮아집니다. 예쁜 그램을 사용하기 위해 감수해야 하는 부분 중 하납니다. T.T


하지만 리눅스 민트를 설치한 지금..  리눅스 민트의 시스템관리에는 그런 기능 따위는 제공하지 않고 있습니다. (뭐니뭐니 문제가 많아도 윈도가 참 대단함을 느끼고 있습니다. 수 없이 많은 고객의 요구사항을 반영한 결과일테니까요..)  그런데 웹서핑 정도가 아닌 가상머신으로 윈도를 구동하고 워드나 파워포인트를 사용하면 발열이....우~~~ 무섭습니다. 키보드 상판이 뜨끈~뜨끈하다 못해 뜨거움이 느껴질 정도 입니다. 


제가 좀 기계의 열에 예민하다는 점을 감안해주시길 바랍니다. 어떤 이는 "뭐 이정도 갖고 그러냐..."고 하는 이야기도 듣습니다. 어찌됐든...

도저히 그대로는 사용하지 못할 듯 해서 또 구글링을 했습니다. 역시나 방법이 있습니다. 다만 쉘 스크립트를 만들어야 했습니다. 그 과정을 기록해 둡니다.


제가 사용하는 LG 그램 14z950 모델은 CPU로 2.7GHz까지 지원하는 Core i5-5200U 가 장착되어 있습니다. 기본이 2.20GHz까지인데 터보부스트를 사용하면 2.70GHz까지 올라가는 것 같습니다. 리눅스 민트에서 다음의 명령을 사용해 확인해도 2700MHz까지 지원되는 CPU임을 확인할 수 있습니다.


먼저 현재 CPU의 동작 클럭을 모니터링하는 스크립트 입니다. 간단합니다.



이 스크립트를 파일로 저장하고 실행하면 다음과 같이 각 코어별로 동작하는 클럭수가 시시각각 변하는 것을 볼 수 있습니다. 



processor 0에서부터 3까지 4개의 코어가 동작하며 각각 다른 클럭에 맞춰 동작하고 있는 것을 알 수 있습니다. 화면엔 거의 비슷하게 보이지만 실제로는 800에서부터 2699 정도까지 매우 다이나믹하게 동작합니다.



명령어나 건드리는 파일은 따로 소개하지 않고 제가 사용하기 위해 만든 스크립트를 바로 공개합니다. 이 스크립트는 scaling_max_freq라는 파일을 건드립니다.



이 스크립트를 실행하면 물어봅니다. 최대 CPU 클럭을 얼마로 맞추겠냐고 말입니다. 2GHz, 1.5GHz, 1GHz 셋 중 하나를 선택할 것을 요구합니다. 만약 수치를 다르게 하겠다면 case 문 안의 echo 에서 숫자를 바꾸면 됩니다.


이 스크립트를 통해 1.5GHz로 CPU 클럭을 제한하면 다음과 같이 1.5GHz 이상으로 올라가지 않는 것을 확인할 수 있습니다.



이 스크립트는 발열 때문에 사용하게 되었지만 외부에서 전원이 없는 환경에서 배터리타임을 늘려주기 위해서도 사용할 수 있습니다. 노트북의 배터리 사용시간에 가장 큰 영향을 주는 것이 바로 CPU클럭이기 때문입니다. 당연히 액정의 밝기와 HDD의 빈번한 액세스도 큰 영향을 주는 요소지요.



오늘은 리눅스 민트 17에 설치한 버추얼박스에서 구동되는 윈도에 USB를 인식시켜야 할 필요가 있었습니다. 사실 보통 USB라면 리눅스에 마운트하고 버추얼박스에서 실행되는 윈도에서 네트워크 드라이브로 연결하면 그다지 속도저하를 느끼지 않고 사용할 수 있습니다. 


하지만 윈도에서 사용할 때 비트라커(bitlocker)로 암호화된 USB 메모리는 리눅스에서 사용할 수 없습니다. 때문에 버추얼박스에서 실행되는 윈도에 직접 마운트해야 비트라커 암호를 입력해 접근이 가능합니다. 그래서... 반드시 버추얼박스에서 실행되는 윈도에 USB 메모리를 인식시켜야 했습니다.


VMWare는 기본적으로 가상머신에 USB를 인식시킬 수 있는데 버추얼박스는 뭔가...추가적인 작업이 필요합니다.


먼저 "장치" 메뉴에 가면 가장 아래에 보이는  "게스트 확장 CD 이미지 삽입" 메뉴를 클릭합니다.



그러면 CD롬 드라이브에 아래와 같은 "VirtualBox Guest Additions" 설치 프로그램이 보입니다.




이 VirtualBox Guest Additions는 버추얼박스가 설치된 리눅스에 설치하는 Oracle VM Extention Pack과는 달리 윈도 가상머신 내에 설치되는 Guest OS용 확장팩이라고 생각하면 됩니다.



이 게스트 OS용 추가 팩을 설치한 뒤 게스 OS인 윈도를 리부팅 하여야 합니다. 그리고 나서 다시 부팅한 뒤 아래 화면처럼 "장치"-"USB" 그리고 "USB 설정" 설정 메뉴를 클릭합니다. 이 때부터 호스트 OS인 리눅스 민트에 인식된 USB 장치들의 목록이 보입니다.



이 USB 설정 메뉴에 간 뒤 USB컨트롤러를 사용하도록 설정합니다. USB3.0 포트가 있는 노트북이나 데스크탑 컴이라면 3.0까지 사용할 수 있도록 체크하고 아래 화면처럼 USB장치필터 우측의 + 표시를 눌러 게스트 OS에서 사용할 USB 장치를 선택하여 필터에 추가해줍니다.


위 화면에서는 ASMedia AS2115라는 외부 USB 컨트롤러를 추가하는 모습니다. 이 노트북에는 이미 SanDisk Extreme USB 장치가 사용될 수 있도록 필터에 등록되어 있는 것을 알 수 있습니다.



그리고 나서 게스트 OS인 윈도를 구동한 뒤 호스트 노트북에 꼽혀있는 USB 장치를 게스트 OS인 윈도에 마운트하기 위해 하단의 USB포트 아이콘을 클릭하여 마운트할 USB 장치를 선택하는 화면입니다.


이렇게 한 뒤 탐색기를 실행하여 살펴보면 새로운 USB 메모리가 드라이브로 인식되어 접근이 가능하게 됩니다.



윈도 8.1이 설치되어 있던 노트북에 리눅스 민트를 설치한지 일주일이 되어갑니다.


LG 그램 노트북에 리눅스 민트 설치 및 사용기 http://blogger.pe.kr/555 


처음엔 꽤나 불편할 거라 생각했는데 편의성...측면에서 큰 기대를 안해서 그런지 그럭저럭 쓸만합니다. 오히려 윈도보다 빠릿빠릿하게 느껴질만큼 반응속도가 빨라서인지 속도 측면에서는 윈도보다 만족스럽습니다.


게다가... USB 메모리나 외장하드의 읽고 쓰기 속도가 체감상 윈도에서보다 더 빠르게 느껴집니다. 브라우저로 사용하는 크롬도 윈도에서보다 더 빠르게 동작하는 듯 합니다. 


불편한 점이 있다면 아무래도 부족한 앱이죠. 카카오톡 PC버전이나 아래아 한글, 오피스 등 리눅스에서는 구동되지 않는 애플리케이션이 많기에 버추얼박스를 통해 윈도8.1을 구동하고 심리스 모드를 종종 사용해야하는 불편함을은 어쩔 수 없는가 봅니다.


Wine과 PlayOnLinux를 설치해 카카오톡을 실행시켜봤지만 무슨이유인지 장시간 사용하다 보면 Hang 상태가 되어버리는 문제가 있네요. 어찌보면 애플리케이션가상화 솔루션인 Wine의 안정성은 만족스럽지 않습니다.


그리고 또하나의 불편함이 있습니다. 바로 노트북의 터치패드입니다.손이 삐꾸(?)인지 타이핑을 하다보면 자꾸만 터치패드를 건드려서 오타가 나곤합니다.


노트북의 터치패드를 Diable 시키는 앱을 노트북 제조사에서 제공하는데 윈도버전만 제공되지 리눅스 버전은 제공이 되지 않습니다. 혹시나 LG전자 서비스웹페이지에도 가봤지만 리눅스용 앱은 제공하지 않고 있습니다. 그래서 구글을 뒤져보니 역시나 방법이 있었습니다.


xinput 명령을 사용하면 됩니다.




위와 같이 xinput --list 명령을 실행하면 XWindows에서 사용되는 입력디바이스의 목록이 보입니다.

이중에서 Touchpad를 찾아보면 id가 13번 입니다. 이제 다시 xinput 명령을 이용해 13번 디바이스를 Disable 시키면 됩니다.



이제 터치패드가 동작하지 않습니다. 이 명령을 스크립트로 만들어 놓고 로그인할 때마다 실행시켜 터치패드를 Disable 시켰는데.... 어느날 부터인가 이 명령이 먹지를 않습니다. 그래서 확인해 보니 터치패드의 디바이스 ID가 달라져 있었습니다.


그렇습니다. 디바이스ID를 고정시켜 실행하지 않고 자동으로 ID를 찾아 Disable 시키는 두줄짜리 스크립트가 필요한 것이었습니다.


그래서 다음과 같이 스크립트... 두줄짜리.. 를 만들어 실행시켰습니다.



이제는 터치패드의 디바이 ID가 바뀌어도 정상적으로 동작합니다.



RedHat의 클론 OS인 CentOS는 클론답게 RedHat 리눅스와 90% 이상 동일합니다. 심지어 커널버전이 동일하다면 RedCastle과 같은 커널수준에서 동작하는 SW도 문제없이 실행이 될 정도입니다. 아마도...패스워드 규칙도 마찬가지이지 않을까 생각합니다.


패스워드 정책이라 함은...


비밀번호 길이는 최소 8자...

비밀번호는 영문 알파벳, 숫자(최소1개), 특수문자(최소1개)가 포함되어야 함...

비밀번호는 사용자ID가 포함될 수 없음...

비밀번호 변경 시 이전에 사용한 패스워드는 3개까지 사용 금지...


등등..

비밀번호를 만들 때 지켜야할 "최소한"의 규칙을 말합니다. 비밀번호 정책은 "최소한"의 규칙입니다. 


리눅스도 이러한 비밀번호 규칙을 설정할 수 있습니다.


예전에는 아래 화면처럼 /etc/login.defs에서 이러한 규칙을 설정할 수 있었습니다.  (지금도 설정가능한지는 모르겠습니다만...안될거라고 예상되지만..)



최근에는 사용자 계정의 비밀번호 규칙을 설정하는 것이 조금 까다로워졌습니다. 바로 유닉스와 리눅스에서 공통으로 제공하는 플러그인 형태의 사용자 인증 모듈(PAM)에서 설정하도록 하고 있습니다.


PAM 모듈의 설정은 /etc/pam.d 에서 합니다. ssh remote(telnet), vsftpd 등 서비스별로 분리가 되어 있죠. 패스워드 규칙은 원래 passwd 라는 설정파일에서 정의하게 되어 있습니다. (아래 그림)



그런데 password 규칙은 system-auth 를 포함(include) 하도록 되어 있죠. 따라서 passwd 파일이 아닌 system-auth를 봐야 합니다. system-auth를 열어보면...다음과 같이 보입니다.



패스워드 규칙을 기본값으로 사용할 땐 위 이미지에서 주석처리(#) 된 행과같이 설정되어 있고 주석문 아래라인은 없습니다. retry 허용 횟수만 설정되어 있죠.

위 라인은 패스워드 변경 시에는 pam_cracklib.so 파일에 정의된 패스워드 규칙 검사 루틴을 호출하라는 뜻입니다. SO는 SharedObject (공유객체)의 의미로서 Windows의 DLL과 유사하다고 보면 됩니다. 리눅스와 유닉스에선 "공유 라이브러리"라고 부릅니다.


어쨌든 system-auth 파일을 위와같이 변경하고 테스트해보면 비밀번호를 12자 이상으로 설정(minlen=12)해야만 비밀번호 변경이 됩니다. 



minlen과 같이 옵션으로 사용할 수 있는 항목들은 다음을 참고하면 됩니다.


Options


debug


This option makes the module write information to syslog(3) indicating the behavior of the module (this option does not write password information to the log file).


authtok_type=XXX

The default action is for the module to use the following prompts when requesting passwords: "New UNIX password: " and "Retype UNIX password: ". The example word UNIX can be replaced with this option, by default it is empty.


retry=N

Prompt user at most N times before returning with error. The default is 1.


difok=N

This argument will change the default of 5 for the number of character changes in the new password that differentiate it from the old password.


minlen=N

The minimum acceptable size for the new password (plus one if credits are not disabled which is the default). In addition to the number of characters in the new password, credit (of +1 in length) is given for each different kind of character (other, upper, lower and digit). The default for this parameter is 9 which is good for a old style UNIX password all of the same type of character but may be too low to exploit the added security of a md5 system. Note that there is a pair of length limits in Cracklib itself, a "way too short" limit of 4 which is hard coded in and a defined limit (6) that will be checked without reference to minlen. If you want to allow passwords as short as 5 characters you should not use this module.


dcredit=N

(N >= 0) This is the maximum credit for having digits in the new password. If you have less than or N digits, each digit will count +1 towards meeting the current minlen value. The default for dcredit is 1 which is the recommended value for minlen less than 10.

(N < 0) This is the minimum number of digits that must be met for a new password.


ucredit=N

(N >= 0) This is the maximum credit for having upper case letters in the new password. If you have less than or N upper case letters each letter will count +1 towards meeting the current minlen value. The default for ucredit is 1 which is the recommended value for minlen less than 10.

(N < 0) This is the minimum number of upper case letters that must be met for a new password.


lcredit=N

(N >= 0) This is the maximum credit for having lower case letters in the new password. If you have less than or N lower case letters, each letter will count +1 towards meeting the current minlen value. The default for lcredit is 1 which is the recommended value for minlen less than 10.

(N < 0) This is the minimum number of lower case letters that must be met for a new password.


ocredit=N

(N >= 0) This is the maximum credit for having other characters in the new password. If you have less than or N other characters, each character will count +1 towards meeting the current minlen value. The default for ocredit is 1 which is the recommended value for minlen less than 10.

(N < 0) This is the minimum number of other characters that must be met for a new password.


minclass=N

The minimum number of required classes of characters for the new password. The default number is zero. The four classes are digits, upper and lower letters and other characters. The difference to the credit check is that a specific class if of characters is not required. Instead N out of four of the classes are required.


maxrepeat=N

Reject passwords which contain more than N same consecutive characters. The default is 0 which means that this check is disabled.


maxsequence=N

Reject passwords which contain monotonic character sequences longer than N. The default is 0 which means that this check is disabled. Examples of such sequence are '12345' or 'fedcb'. Note that most such passwords will not pass the simplicity check unless the sequence is only a minor part of the password.


maxclassrepeat=N

Reject passwords which contain more than N consecutive characters of the same class. The default is 0 which means that this check is disabled.


reject_username

Check whether the name of the user in straight or reversed form is contained in the new password. If it is found the new password is rejected.


gecoscheck

Check whether the words from the GECOS field (usualy full name of the user) longer than 3 characters in straight or reversed form are contained in the new password. If any such word is found the new password is rejected.


enforce_for_root

The module will return error on failed check also if the user changing the password is root. This option is off by default which means that just the message about the failed check is printed but root can change the password anyway.


use_authtok

This argument is used to force the module to not prompt the user for a new password but use the one provided by the previously stacked password module.


dictpath=/path/to/dict

Path to the cracklib dictionaries.


참고로 이 정책은 system-auth를 수정하고 저장한 뒤 다음번 passwd 명령을 실행할 때 바로 적용됩니다. 리부팅이나 재로그인이 필요하지 않습니다.


  • 지후대디 2015.12.18 19:25 신고

    사실 개발자 였던 시절엔 이런 password 규칙이 너무 귀찮았습니다^^ 그래도 보안을 생각하면 이런 규칙이 적용되어 있어야지요^^

    • taeho Tae-Ho 2015.12.19 07:50 신고

      운용하는 서버의 대수가 많을 수록 그 귀찮음과 불편함음 급격하게 커지죠~ ^^


서버보안 일을 하다 보면 가끔 Unixtime을 년월일시분초로 변환할 일이 생긴다. 서버보안 도구의 매니저에서 로그를 조회하면 유닉스타임을 자동으로 날짜로 변환해 보여주지만 원격에서 접속이 안될 땐 로그파일을 받아보곤 하는데 그 로그파일엔 날짜가 유닉스 타임으로 표시되어 있다.


일단 로그를 받아 엑셀에서 열면 다음처럼 보인다.



적색 박스에 표시된 항목이 유닉스타임으로 기록된 날짜 및 시간이다. RedCastle  뿐만 아니라 외산 및 국산의 여러 소프트웨어들은 타임스탬프를 유닉스 타임으로 기록하는 경우가 종종 있다. 하지만 이렇게 기록되어 있으면 이 시간만 보고는 도대체 언제 발생된 로그인지 이해할 수 없다.


엑셀에서 이 유닉스타임 스탬프를 "년-월-일 시:분:초" 형태로 변환하기 위해선 다음과 같이 수식을 사용해야 한다. 



위의 이미지의 상단 적색 박스에 있는 수식이 바로 unixtime의 타임스탬프를 Excel의 타임스탬프로 변환하는 식이다.

위의 식에서 A1은 D1 으로 바뀌어야 함(수식 붙여넣기하여 A1으로 표기되었음. 오류) 



무슨 뜻인고 하니...


unixtime은 1970년 1월1일 0시를 기준으로 로그를 기록할 때까지의 흘러간 초! 다.

그리고 Excel의 timestamp는 1900년 1월 1일 0시를 기준으로 흘러간 날짜의 수다.


때문에 초가 기준인 unixtime을 86400초(24시간)로 나누면 일로 변환되고

엑셀 timestamp의 기준인 1900년부터 70년의 일을 더해주는데...

그 70년동안 윤년이 17번 있었기 때문에 17을 더 더해준다.


마지막의 9/24를 더해주는 이유는 대한민국의 시간과 맞추기 위해 9시간을 더해준다. unixtime은 GMT 시간이다. 즉 영국 그리니치 천문대 기준의 시간이다. 때문에 9시간을 더해줘야 대한민국의 시간이 나온다.


두개의 적색 상자 중 아래가 엑셀 타임스탬프로 변환된 날짜다.


이제 이 날짜를 아래 화면처럼 셀 속성에 들어가 사용자 포맷을 선택하여 변경한다.



포맷은 무척 단순하다. 따로 설명이 없어도 이해할 듯...

위의 셀 서식을 적용하면 아래 이미지처럼 엑셀 타임스탬프가 날짜-시간으로 변환되어 보인다.



셀의 모서리를 클릭하고 아래로 드래그하면 아래의 셀들도 모두 변환된다.


끝...!!




지난번 포스트에서 다룬 Ubuntu - VirtualBox 조합의 테스트 장비는 VMWare ESXii 보다 관리하기 편하다. 특히 OS나 DB 등 SW를 설치하기 위해 HostOS에 파일을 업로드하거나 다운로드할 때의 편의성은 VMWare가 따라올 수 없다. 그냥 파일질라를 이용해 HostOS에 업로드하면 되기 때문에 속도나 편의성 측면에서 월등히 편리했다.


그리고 오늘... 또 하나의 작은 산을 만났다. 바로 Host 서버의 USB 포트에 꼽은 USB의 GuestOS에서의 인식 문제였다. 그 문제를 해결하는 과정에서 문제를 더 어렵게 만들었던 것은...바로 나의 작은 실수(?)였다. 실수라기 보단 섬세함의 부족이었던 것 같다.


다음은 USB 메모리가 인식된 화면이다.





Ubuntu에 설치된 VirtualBox의 USB 인식

우분투리눅스에 설치된 VirtualBox에 USB 를 인식시키기 위해서는 Oracle_VM_VirtualBox_Extension_Pack-4.3.26-98988.vbox-extpack 과 같은 익스텐션팩을 다운로드 받아 설치해야 한다. 이 익스텐션팩은 우분투 소프트웨어센터에서는 다운로드 받을 수 없다. 오라클의 버추얼박스 홈페이지에 직접 가서 다운로드 받아야 한다.


브라우저의 주소는 다음 URL에서 확인이 가능하다. (2015년 10월 05일 현재) 


https://www.virtualbox.org/wiki/Download_Old_Builds_4_3


주의할 것은 현재 설치되어 있는 VirtualBox와 동일한 버전의 익스텐션팩을 다운로드 받아야 한다. 실수로 최신버전의 익스텐션팩을 다운로드 받아 설치했더니 (방심~~) GuestOS에 USB를 인식시키는 순간 GuestOS가 죽어버리는 문제가 발생했다.


즉 VirtualBox가 4.3.26 이면 Extention Pack도 4.3.26을 받아야 한다. 웹페이지에서 다운받으면 또 FTP로 업로드를 해야하므로 Host머신이 인터넷에 연결되어 있다면 다음과 같이 wget 명령으로 다운받으면 된다.


$ wget http://download.virtualbox.org/virtualbox/4.3.26/Oracle_VM_VirtualBox_Extension_Pack-4.3.26-98988.vbox-extpack



다음은 VirtualBox를 실행하는 호스트서버의 계정의 그룹을 설정해주어야 한다. 만약 VirtualBox를 root 계정에서 구동한다면 건너뛰어도 될 것 같다. 하지만 일반게정에서 VirtualBox를 실행한다면 다음의 절차에 따라 VirtualBox를 구동하는 일반계정(예를 들어 taeho 라면 )을 vboxusers 그룹에 넣어줘야 한다.


$ sudo usermod -g vboxusers taeho


여러 웹페이지에서 /etc/groups 파일의 vboxusers 항목에 taeho를 추가하면 된다고 되어 있지만 taeho 라는 일반계정의 주그룹(primary group)이 vboxusers 이어야 하기 때문에 위의 명령을 실행해야 한다. 보조그룹(secondary group)으로 vboxusers 를 지정해 봤지만 권한이 없어 VirtualBox에서 USB드라이브가 인식되지 않는 문제가 있었다.


그룹 설정을 완료했다면 로그아웃하고 다시 로그인한다. (확실하게 리부팅을 하는 것을 권한다.)


리부팅 하거나 다시 로그인했다면 다운받은 익스텐션팩을 설치한다.


$ sudo VBoxManage extpack install http://download.virtualbox.org/virtualbox/4.3.26/Oracle_VM_VirtualBox_Extension_Pack-4.3.26-98988.vbox-extpack


0%에서부터 100%까지 진행되고 Successfully 메시지가 출력된다.


설치된 익스텐션팩은 다음의 명령으로 확인할 수 있다.


$ sudo VBoxManage list extpacks


그리고 아래 내용은 하지 않아도 되는지 모르겠으나 일부 설명자료에는 하는 것으로 되어 있다.


/lib/dev/rules.d/50-udev-default.rules에 다음의 내용을 수정한다.

MODE=0664를 0666 으로 수정한다.


# libusb device nodes

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"


마지막으로 리부팅하면 깔끔하게 USB 메모리 인식작업이 끝난다.




  • 에스델 ♥ 2015.10.05 20:09 신고

    주의할 점을 알려주셔서
    이 포스팅을 읽고 실행하면
    실수하지 않겠습니다.^^
    좋은 정보 감사합니다.



보통 업무상 테스트용으로 가상머신을 사용할 일이 있으면 Windows 7/8/10이 설치된 데스크탑이나 노트북에 VMWare Wrokstation 혹은 Player를 설치하곤 합니다. 그리고 공용으로 사용할 테스트 장비는 IBM, HP 등의 Unix 서버가 아닌 이상 성능 좋은 데스크탑 조립 컴퓨터를 구입해 VMWareESXi 를 설치했었습니다.


하지만 VMWareESXi는 운영체제 이미지의 업로드와 다운로드...그리고 가상머신의 업로드, 다운로드 속도가 이상하리 만치 느립니다. UI도 맘에 안들고 VMWareESXi 자체의 관리 기능 등 여러 측면에서 썩...맘에 들지 않았습니다.그리고 vsphere라는 덩치큰 SW를 노트북에 설치해야 하는 점도 맘에 안들었습니다.


그래서 선택한 것이 Ubuntu와 VirtualBox 입니다.


Ubuntu Linux와 VirtualBox

우분투는 두말할 나위 없이 최고 수준의 안정성과 데스크탑 환경을 지원합니다. 그리고 VirtualBox는 오라클에 인수된 x86 가상머신 솔루션으로서 VMWare, Virtual PC와 함께 3대 가상머신 SW 입니다.

VMWare, Virtual PC, VirtualBox는 Intel 계열 및 Intel과 호환되는 AMD계열 CPU에서만 동작하는 가상화 솔루션입니다. 즉 가상화 솔루션은 CPU가 중요합니다. 다른 CPU에서는 전혀 다른 방식으로 가상화가 구현되어야 하기 때문에 개발 자체가 무척 어렵습니다.

그리고 이 세가지 가상화 솔루션은 실행되는 가상머신 각각의 서버(머신)를 가상화하여 격리하는 서버독립형 가상화 솔루션입니다. 즉 하나의 서버에서 여러개의 운영체제가 각각 독립적으로 실행되는 방식입니다.

우분투 리눅스 위에서 실행되는 VirtualBox도 서버 가상화 SW입니다.

우분투 위에서 VirtualBox가 실행되면 아래 그림처럼 보입니다.


보통 인터넷엔 Windows 운영체제 위에 VirtualBox를 설치하고 ubuntu 리눅스를 가상머신으로 설치한 사례가 많이 보이는데 전 업무상 그 반대로 설치를 했습니다. 그리고 Windows 운영체제 위에 VirtualBox를 설치하는 것 보다 그 반대가 성능이 훨씬 뛰어납니다.


위의 그림은 CentOS 6.6 2개와 windows 2008 Server 2개를 동시에 실행시켜 놓은 상태입니다. ("실행중" 이라고 보이죠?)



단점과 극복

Ubuntu 리눅스에 VirtualBox를 설치하면 단점이 하나 보입니다.


바로 항상 콘솔용 모니터와 키보드, 마우스가 필요하다는 점입니다. VMwareESXi 같은 경우에는 콘솔용 프로그램인 vsphere를 설치하여 원격에서 콘솔과 같이 사용이 가능합니다. vsphere를 이용해 원격에서 가상 머신을 구동/중지/실행은 물론 복제와 이동까지도 가능합니다만 Ubuntu에 VirtualBox를 설치하면 원격에서 관리할 수 있는 콘솔프로그램이 따로 존재하지 않습니다.


그 단점을 극복하기 위해선 X-Window를 사용해야 합니다. 하지만 X-Window를 이용해 원격 PC에서 VirtualBox를 관리하기위해선 원격PC에 X-Manager나 X-Ming 같은 X클라이언트/서버를 설치해야하는 불편함이 있습니다. vsphere 같은 관리툴을 별도로 설치하고 싶지는 않으신 분들도 많을 겁니다.


그럴 경우 가장 손쉬운 방법이 바로 XRDP 서버를 Ubuntu의 "소프트웨어 센터"에서 검색하고 설치하여 원격데스크탑(mstsc.exe)를 통해 Ubuntu에 접속하는 방법이 있습니다. 그렇게 하면 위 화면처럼 "원격 데스크톱 연결"을 통해 XWindow 접속을 사용할 수 있습니다.

(Ubuntu 서버는 SW센터에서 xrdp를 검색해 설치하면 되고 Ubuntu Desktop이라면 xrdp와 xfce4를 설치하면 됩니다. 다음URL 참조 : 에브리띵 윌 비 오케이 님 블로그)


다음은 원격데스크탑(mstsc.exe)을 통해 우분투에 접속하는 화면입니다.



접속하고 나면 저~위~의 화면처럼 VirtualBox 관리자를 실행하고 사용할 수 있습니다.




예전에 올렸던 VMWare Player에서 NAT를 설정하여 인터넷 접속을 하는 방법에 대한 포스트(보러가기)를 정말 많은 분들이 검색으로 보고 갔습니다. 그리고 엊그젠가 VMWare가 아닌 MS의 Hyper-V를 활성화 하는 방법을 올렸습니다. 

Hyper-V도 VMWare와 마찬가지로 이동 시 가상머신의 IP를 변경하지 않고 인터넷에 접속하기 위해서는 NAT 설정을 해줘야 합니다.


하지만 윈도의 Hyper-V는 따로 NAT 설정을 해주는 방법을 제공하지 않습니다. 대신 Host 컴퓨터의 네트워크 카드(이더넷)의 "인터넷 공유설정"을 통해 Guest 컴퓨터가 인터넷 접속을 할 수 있습니다. 즉 Host 컴퓨터의 인터넷 연결이 바뀌어 IP가 바뀌어도 Guest 컴퓨터의 설정 변경없이 인터넷이 가능하도록 하는 것이죠.


저 처럼 외부에 나가 데모(시연)을 할 일이 많은 사람에겐 매우 유용한 기능입니다.


그 방법을 지금부터 설명합니다. 화면이 좀 많습니다.


1. Hyper-V 관리자를 실행합니다. 오른쪽 "작업" 창에[가상 스위치 관리자...] 메뉴가 보입니다. 클릭합니다.



2. 가상 스위치 관리자가 보입니다. 오른쪽 [가상 스위치 만들기] 창에서 [내부]를 선택하고 하단의 [가상 스위치 만들기]를 클릭합니다.


3. [이름]을 입력합니다. 전 Hyper-V-Switch라고 입력했씁니다. 그리고 하단의 [연결 형식]에서 [내부 네트워크]를 입력합니다. 그리고 나서 [적용] 이나 [확인]을 누릅니다.



4. 적용을 누르면 창이 사라지지 않고 왼쪽 창에 Hyper-V-Switch 가 생성된 것을 볼 수 있습니다. [확인]을 클릭해 창을 닫습니다.



5. 다음은 Host 컴퓨터에서 [네트워크 연결] 창을 엽니다. 가장 상단에 조금전에 Hyper-V 관리자의 스위치 관리자에서 만들었던 이터넷이 보입니다. vEthernet (Hyper-V-Switch)가 그것입니다.


6. 현재 인터넷이 연결되어 있는 Wifi 에서 오른쪽 마우스 버튼을 클릭합니다. 그리고 보이는 팝업메뉴창에서 "속성"을 클릭합니다. 인터넷이 연결된 랜 네트워크의 인터넷 공유 설정을 위해서 입니다.



7. 아래 화면처럼[공유] 탭으로 이동하여 인터넷 연결 공유에 V 체크를 해주고 [홈 네트워킹 연결]에서 vEthernet(Hyper-V-Switch)를 선택해줍니다. 즉 Hyper-V에서 생성한 vEthernet을 Wifi 네트워크를 통해 인터넷에 연결하는 것을 허용한다는 뜻입니다.[확인] 버튼을 클릭합니다. 

이때 이상한 IP로 세팅한다는 메시지가 나오는데 무시합니다. 그 메시지는 vEthernet의 IP를 윈도가 맘대로 바꾼다는 뜻입니다. 다음 화면에서 다시 우리가 원하는 IP로 변경해주면 됩니다.



9. 다시 네트워크 연결 창으로 돌아오면 인터넷이 연결된 Wifi 네트워크에 "공유됨" 이라는 상태가 표시됩니다. 


10. vEthernet 에서 마우스 우클릭을 통해 팝업 메뉴를 실행시킨 뒤 [속성]에 다시 들어갑니다. 그리고 아래 처럼 [Internet Protocol Version 4 (TCP/IPv4) 의 속성으로 들어갑니다. 긜고 IP를 192.168.210.1로 변경합니다. 가상머신에서도 이 IP대역으로 IP를 맞춰주면 됩니다.


11. 이제 다시 Hyper-V 관리자로 돌아와 설치해 둔 가상머신을 실행시킵니다. 여기서는 우분투 15.x 버전입니다. Guest 컴퓨터인 가상머신을 [시작]합니다. 


12. 우분투 가상머신이 실행되었습니다. 로그인 합니다.



13. 로그인 한 뒤 상단 우측을 보면 네트워크가 연결되어 있지 않습니다. 와이파이 표시를 클릭해 아래와 같이 팝업 메뉴를 호출한 뒤 [Edit Connections...]을 클릭합니다.


14. 네트워크 커넥션 정보 창이 실행됩니다. 최초엔 아무것도 없습니다. [Add]를 클릭합니다.


15. 등록할 커넥션 타입을 지정합니다. [Ethernet]을 선택합니다.



16. [Ethernet] 탭에서 [Connection name]에 전 Coffee Bay 라고 입력했습니다. 집근처 단골 카페 이름입니다. 종종 이용합니다.. ^^



17.옆의 [IPv4 Settings]로 이동합니다. IP와 Netmask, Gateway를 입력합니다. Gateway가 아까 앞에서 만든 가상 스위치인 vEthernet(Hyper-V-Switch)의 IP입니다. 그리고 Host컴퓨터의 Wifi를 통해 인터넷으로 나갈 수 있도록 설정했었습니다. 마지막으로 DNS도 설정해 줍니다. [Save]를 클릭합니다.


18. 저장된 Ethernet 네트워크가 보입니다. 이름은 Coffee Bay입니다.


19. 이제 화면 상단의 신호세기 표시 아이콘을 클릭하면 조금전에 생성하 네트워크인 Coffee Bay가 보입니다. 만약 Enable Networking이 체크되어 있지 않다면 체크하여 네트워크를 Enable 시키면 Coffee Bay가 보입니다. 자동으로 Coffee Bay에 접속하거나 자동 접속되지 않는다면 Coffee Bay를 클릭하여 접속합니다.


20. 정상적으로 연결되면 다음과 같이 Connection Established 메시지가 표시되면서 


21. FireFox를 실행시켜 다음 포털에 접속한 화면입니다.


만약 유선랜을 연결하였다면 유선랜도 인터넷 공유를 설정해주면 Guest컴퓨터인 우분투의 설정 변경없이 바로 인터넷이 연결됩니다. VMWare의 NAT 설정과 동일하다고 할 수 있습니다.


보안 취약점 점검을 하는 보안 엔지니어들이 칼리리눅스를 설치 해 여기저기 다른 곳에서 취약점점검을 한다든가 프리세일즈 엔지니어들이 윈도나 다양한 리눅스 용 솔루션을 설치해 시연을 하러 다니는 등 이동이 잦은 경우에 필수적인 환경이라고 할 수 있습니다.


  • 에스델 ♥ 2015.09.15 10:09 신고

    화면을 보면서 천천히 따라하면 되기에~
    큰 도움이 됩니다.^^
    즐거운 화요일 보내세요!

    • taeho Tae-Ho 2015.09.15 12:28 신고

      ㅎㅎ 나중에 기억이 안날까봐서 자세히 올려놓습니다~


훌륭한 보안 USB 프로그램 TrueCrypt의 폭망

예전에 TrueCrypt라는 USB 보안 프로그램에 대한 포스트를 올렸드랬습니다. (보러가기) TrueCrypt는 USB에 파일 형태의 데이터파일을 만들고 드라이브로 마운트하여 사용할 수 있는 보안 프로그램이죠. 당연히 이 드라이브에 저장되는 파일들은 비밀번호를 모르면 복호화되지 않는 강력한 암호화 알고리즘을 사용합니다.


그런데 최근(?) 이 TrueCrypt를 무료로 서비스하던 웹사이트가 이상해졌습니다. WindowsXP가 더 이상 기술지원이 안되기 때문에 문을 닫는다는 희한한 변명을 웹사이트에 명시하고 더 이상 버전업그레이드나 버그 패치를 하지 않겠다고 선언했습니다.


MS가 인수했거나 미정보국이 압력을 행사하지 않았겠느냐는 썰이 있을 정도입니다. 이 TrueCrypt로 암호화된 USB를 미정보국에서 해독하는데 실패했다는 이야기까지 있었던 터라 더 신빙성이 있다는 소문도 있습니다.


하여튼...


지금까지 돈을 내고 사용하던 USBSafe가 SafeBox라는 새로운 클라우드 스토리지 서비스를 출시하고 USBSafe 앱의 라이센스를 SafeBox로 "무료로"바꿔 준다는 감언이설에 속아 변경했다가 여러 문제점이 발견되어 돌아가지도 못하고 제대로 사용하지도 못하는 난감한 상황이 되어 버렸습니다.


그래서 TrueCrypt를 사용할까 했는데..서비스 중단이라니...이 또한 난감했습니다.


VHD와 BitLocker의 만남

그리하여... 새로운 방법을 찾다가 예전에 한동안 관심있게 지켜봤던 VHD와 BitLocker가 어디까지 발전했는지 찾아봤습니다. 두 개의 기술을 엮어 USB에 적용하면 그럴 듯한 보안USB로 사용할 수 있을것 같았기 때문이죠.


그랬더니...매우 훌륭하게 보안USB로 사용이 가능했습니다. 그 설정 과정을 남겨둡니다.


1. USB디스크를 꼽고 디스크관리자를 실행하여 다음과 같이 VHD를 생성합니다.



G드라이브는 USB 메모리입니다. MYUSB16G라는 폴더를 만들고 그 아래에 VHD를 생성합니다.

용량은 16GB 입니다.

포맷은 VHD를 선택합니다. Windows 7과의 호환을 위해 VHD를 선택합니다.

크기는 고정크기를 선택합니다. 속도나 안정성에 유리합니다.



확인을 누르면 아래 화면처럼 가상디스크를 생성합니다. 조금 시간이 걸립니다. 용량에 따라 다릅니다.



아래 화면은 VHD가 만들어지고 마운트 된 화면입니다. 디스크2번 입니다.



처음엔 초기화 안됨 상태입니다. 아래 화면처럼 팝업 메뉴를 마우스 우클릭으로 호출하여 초기화 해줍니다.



MBR 타입을 선택했습니다. Windows 8.1 이상에서 GPT 타입을 쓰신다면 GPT를 선택해도 됩니다만.. 그렇게 하면 Windows 7에서는 인식이 안될 수 있습니다.



2. 초기화 후 파티션을 생성합니다.


아래 화면처럼 VHD인 디스크2에서 새 단순볼륨을 생성합니다.



크기는 전체를 모두 지정합니다.



드라이브 문자를 할당합니다. 나중에 변경 가능합니다.



NTFS 파일 시스템으로 포맷합니다.



완료 되었습니다.



완료된 화면입니다. 이제 정상적으로 사용 가능합니다.



아래 화면처럼 드라이브로 잡힙니다. G: 드라이브가 64GB짜리 USB메모리고 X: 드라이브가 G: 드라이브에 있는 16GB짜리 VHD가 마운트 된 가상디스크 입니다.

하지만 아직 암호화하도록 설정되진 않았습니다. 



3. VHD의 암호화를 위해 BitLocker를 활성화하고 설정합니다.


VHD인 X: 드라이브에서 마우스 우클릭을 통해 팝업 메뉴를 호출하고 "BitLocker 켜기"를 선택합니다.



아래 창이 뜨면 "암호를 사용하여 드라이브 잠금해제"를 선택합니다.



비밀번호를 입력합니다. 가능하면 길고, 숫자와 영문자 그리고 특수문자가 섞여 있으면 좋겠죠? 이 비밀번호는 단순히 인증에만 사용되는 것이 아니라 파일을 암호호할 때 키값의 일부로 사용됩니다.



만약 비밀번호를 분실한 경우 복구하기 위한 복구 키를 어디에 저장할 것인지를 물어봅니다. 전 Microsoft 계정에 저장햇습니다.



이제 암호화를 진행합니다. 만약 파일이 많다면 오래 걸립니다.



암호화를 모두 마친 뒤 VHD가 마운트된 X: 드라이브의 상태입니다. "BitLocker로 암호화 됨" 이라고 표시됩니다.



여기까지 수행하면 VHD와 BitLocker를 이용한 보안USB 구성이 끝납니다. 하지만 이 상태에서는 매번 디스크관리자를 실행하고 VHD연결 그리고 BitLocker 인증(드라이브 잠금해제)을 따로 따로 받아야하는 불편함이 있습니다. 이 문제를 개선해야겠죠?


4. 원클릭~VHD마운트 및 드라이브 잠금해제 스크립트 작성


다음과 같이 USB의 최상위 디렉토리에 MYUSBMOUNT.BAT 파일을 만들어 두고 USB를 꼽은 뒤 이 BAT 파일을 더블클릭하면 자동으로 마운트하고 BitLocker 암호인증창이 뜨도록 구성합니다.



아래의 배치파일을 만듭니다. USB 메모리는 어느 PC에 꼽냐에 따라 드라이브명이 달라질 수 있기 때문에 자동으로 드라이브명을 가져오도록 했습니다.



아래 파일은 MYUSBMOUNT.BAT 를 더블클릭하면 자동으로 생성됩니다. 따로 만들지 않아도 됩니다.



MYUSBMOUNT.BAT를 더블클릭한 화면입니다.

관리자 권한으로 실행되어야 하기 때문에 "예"를 선택합니다.



자동으로 VHD파일이 마운트 되고 BitLocker 메시지가 실행됩니다.



자동으로 암호입력창이 실행됩니다. 암호를 입력하면 모든 단계가 끝나고 보안USB영역을 사용할 수 있습니다.



보안영역인 X: 드라이브에 생성한 폴더의 모습입니다. 실제로는 G: 드라이브에 있는 VHD 내부에 암호화 되어 저장되어 있겠죠.




5. 보안 USB의 사용 해제


VHD를 USB 메모리에 생성하여 사용할 경우 사용 중 USB를 무단으로 뽑아버리면 VHD파일이 손상될 수 있습니다. 때문에 반드시 정해진 절차를 이용해 VHD 파일을 연결해제 해야 합니다.


이 방법은 매우 간단한데 아래의 화면처럼 탐색기에서 보안USB 영역(VHD)을 "꺼내기" 하면 됩니다.



매우 쉽죠잉????




모의해킹을 할 때 많이 사용되는 도구 중 하나가 칼리리눅스다. 칼리리눅스는 이전까지 보안 취약점 점검이나 모의 해킹을 할 때 많이 사용되던 백트랙의 후속 버전으로서 백트랙 보다 더 체계적으로 취약점 점검 도구를 정리한 것으로 보인다.


칼리리눅스는 그놈이나 KDE 같은 Xwindow 기반의 GUI를 제공한다. 하지만 XWindow GUI는 콘솔에서 실행하는 것이 기본인데 Windows 운영체제 용 XServer를 Windows PC에 설치하면 콘솔에서 보이는 XWindow 화면을 PC에서 그대로 실행하는 것이 가능하다.


오래전...

XWindow를 사용할 땐 외산제품인 허밍버드사의 XServer나 국산인 XManager를 사용했다. 하지만 이 두 제품모두 유료 제품이다. 즉 라이센스를 입력하지 않으면 일정기간만 사용할 수 있다.


무료 XWindow 서버는 XMing 이라는 오픈소스 프로젝트의 제품이 있다.


이 XMing와 칼리리눅스가 설치되어 있다는 전제하에 PC에서 칼리 리눅스의 XWindow 화면을 실행하는 방법을 정리해본다. 일단 XMing는 소스포지 사이트에서 다운받을 수 있다.



어떤 XWindow 든 원격에서 실행하기 위해서는 불러오고자 하는 XWindow 가 있는 서버에 접속을 해야한다. Telnet 이든 Rlogin 이든 SSH 든 관계 없지만 칼리 리눅스는 ssh 만 지원하므로 putty를 설치해야 한다. 정확하게는 plink를 사용하므로 putty와 plink를 둘다 다운받아 아래 화면처럼 특정 디렉토리에 저장해 두자.




putty.exe를 사용하게 되면 X11-Forwarding 을 Enable 해야 한다고 하는 이야기도 있는데 plink를 사용해보니 설정하지 않아도 되는 듯 하다. 혹시라도 안되면 해당 설정을 찾아보기 바란다.


XMing을 설치 했다면 xlaunch를 실행한다. 본인은 Windows 8.1 환경이기에 아래 화면처럼 실행했다.



먼저 Display 타입을 선택한다. 각 타입에 대한 설명을 하자면 글이 너무 길어진다. 

XWindow는 Windows의 터미널서비스보다 다양한 원격 GUI 타입을 지원한다. 그리고 그 타입 중 하나를 선택하는 것이라고만 알아두자. 일단 One Window 타입을 선택하도록 하자. 윈도의 원격 접속과 같이 별도의 창에서 실행되는 형태다.




다음은 세션의 유형이다. Start a program을 선택하자.



다음은 시작할 프로그램이다. gnome-session을 선택하고... 없다면 입력한다....

그리고 Run Remote의 Using PuTTY(plink.exe)를 선택한다.


접속할 컴퓨터에는 칼리리눅스의 IP를 입력한다.

로그인 계정은 root를 입력한다. 권한 제한 없이 사용할 수 있어야 하므로...

비밀번호는 root의 비밀번호다.



다음에는 추가 파라미터를 지정하는 화면이 나온다.여기에서 화면의 크기를 지정할 수 있다. 아래 화면처럼 -screen 옵션으로 지정가능하다. 


그리고 Port도 지정해준다. 이 포트는 ssh로 접속할 경우 사용하는 Port다. 칼리리눅스에서 ssh의 포트를 변경하지 않았다면 22를 지정하면 된다.



다음은 마지막 단계다. 마지막 단계에서는 지금까지 설정한 정보를 저장하고 다음번엔 저장된 설정을 불러와 바로 칼리리눅스에 접속할 수 있도록 할 수 있다.



Save 버튼을 누르고 다음과 같이 저장한다. 이름은 사용자가 편한 대로 저장하면 된다. 아래 화면에선 putty 가 있는 경로에 저장한다.



putty와 함께 저장된 화면이다.



칼리 리눅스에 접속하기 위해 저장된 config 파일을 더블클릭하면 아래 처럼 비밀번호를 물어본다.



비밀번호를 입력하고 나면 다음 화면처럼 시커먼~화면이 잠시 보인다. 



잠시 기다리면 아래 화면처럼 별도의 창이 뜨고 그 화면에 칼리 리눅스의 콘솔 화면이 보인다. 이 화면이 바로 XWindow 화면이다. Windows 8.1화면 내부에 XWindow 화면이 보인다.






서버보안SW와 관련된 보안 업무를 수행하다 보면 수 많은 공공기관과 기업의 서버를 접하게 됩니다. 전산실도 따로 없이 서버 두 세 대를 운용하고 있는 직원 수십명의 작은 제조업체 부터 전국민의 주민등록 정보를 담아두고 있는 안행부의 주민등록 서버와 같은 공공기관의 서버는 물론 1금융권 은행의 가장 중요한 서버인 계정계(금융계좌의 원장 역할) 서버까지 온갖 서버를 모두 만져볼 수 있습니다. (물론 제맘대로 만지지는 못합니다. 살떨리거든요.. 그리고 요즘은 외부인에게 함부로 프롬프트를 주지 않습니다. 게다가 실시간 감시도 합니다.)


하지만 공통적인 것은 모든 서버는 "모두 똑 같은 서버다"라는 겁니다. 크나 작으나 동일한 운영체제에 어딜가나 비슷한 데이터베이스, 미들웨어, 백업, 배치작업관리와 같은 시스템SW...그리고 비슷 비슷한 이름의 계정들을 갖고 있죠.  간혹 "우리 서버가 어떤 서번데.."하면서 마치 특별한 서버로 생각하는 관리자도 볼 수 있습니다만...실상은 그냥 다 똑같은 서버 입니다. 환경이 조금 다를 뿐이죠.


그리고 오늘의 글을 쓰는 주된 이유 중 하나인 서버 관리 업무 상 발생하는 정체를 알 수 없는 유지보수를 위해 업로드 된 것으로 보이는 정체 불명의 파일들을 대부분의 서버들은 갖고 있다는 것 또한 공통점입니다.


이 정체불명의 파일들은 서버 운영자나 개발자, 관리자 또는 외부 엔지니어들에 의해 업로드 된 파일들이 대부분입니다. 서버의 유지보수나 신규 서비스를 위해 개발된 어플리케이션 관련 작업을 위해 임시로 업로드 된 파일들이죠. 그리고 이러한 파일들은 대부분 "위험" 요소로 봐야 합니다. 이러한 파일들은 수퍼유저 권한 또는 서비스의 관리자 계정의 권한으로 실행시킬 경우 공격도구나 정보유출을 유발할 수 있는 스크립트나 명령어를 포함하고 있기 때문입니다. 


이렇게 작업을 위해 업로드 된 뒤 방치되고 있는 파일들을 서비스 운용시에는 사용하지 못하도록 통제할 필요가 있습니다.


Autofs 를 통한 안전한 유지보수 및 작업 환경 구축

Autofs는 평소에는 마운트되어 있지 않은 디바이스 또는 NFS 서버의 특정 경로를 접근하고자 할 때 자동으로 마운트 시켜주는 auto mount 서비스 입니다.


이 Autofs를 NIS와 NFS를 엮어 구성하면 해당 계정으로 로그인할 때 NFS서버에 존재하는 동일한 계정의 홈디렉토리를 로컬에 자동으로 mount 하고 로그아웃 할 때 자동으로 umount 할 수 있습니다. 이 구성에 대한 설정 방법은 인터넷에 많이 공개되어 있습니다. 최근 RedHat 리눅스 6.6 서버 3대에서 이 환경을 구축해볼 일이 생겨 구성을 해보았습니다. 


구성된 NIS + NFS + Autofs 환경은 다음과 같습니다.



NIS는 Network Information Service 를 말합니다. 어디서는 DNS와 비교하기도 하는데 DNS는 IP와 Domain 주소를 상호 변환할 수 있는 서비스인데 반해 NIS는 작은 네트워크(NIS는 DNS 이름풀이를 사용하지 않고 /etc/hosts 파일만을 참조한다고 함)에서 서버의 계정을 NIS 서버에서만 생성하고 NIS 클라이언트에 접속 시 NIS 클라이언트에 없는 계정일 경우 NIS 서버의 인증을 받고 접속할 수 있도록 해주는 통합 계정 관리 서비스라고 할 수 있습니다. (다만 서버와 클라이언트 모두 Unix/Linux 서버입니다.) 그래서 앞의 그림에서 보듯 NIS 클라이언트에는 lee와 kim 이라는 계정이 없습니다만 이 두계정을 통해 NIS서버의 인증을 받고 NIS 클라이언트에 접속할 수 있습니다.


NFS는 Network File System의 약자입니다. 즉 NFS 클라이언트에서 nfsmount 라는 명령으로 미리 정의된 NFS 서버의 특정 디렉토리를 NFS 클라이언트의 특정 디렉토리에 마운트하여 로컬 파일시스템처럼 사용할 수 있게 해줍니다. 



Autofs는 이 NIS와 NFS를 엮어서 특정 계정으로 NIS서버의 인증을 받고 자동으로 NFS 서버에 있는 동일한 계정의 홈디렉토리를 로컬에 nfsmount 시켜 주도록 설정할 수 있습니다.


이렇게 구성하게 되면 작업자 계정에서 접속하여 작업할 때에는 nfs 서버에 있는 작업자 계정의 홈디렉토리를 마운트하여 사용하고 로그아웃 하면 해당 작업 디렉토리가 자동으로 umount 되어 서비스를 수행하함으로써 서버는 항상 깨끗한 파일시스템을 유지할 수 있게 됩니다. 게다가 작업 디렉토리에 위험한 명령어와 파일이 존재하여도 로그아웃 하는 순간 서버에서 사라지게 되는 효과를 얻을 수 있기 때문에 보안 관점에서도 유리하게 됩니다.


NIS + NFS + autofs 설정 방법

*** 기본 구조 ***

192.168.100.11 node1.test.kr node1  <-  nfs, nis server

192.168.100.12 node2.test.kr node2  <-  nfs, nis client

RedHat Enterprise Linux 6 Update 6 (2.6.32-504.3.3 x64)


1. nfs 설정

1.1 nfs server 설정

1.1.1 host 파일 수정

[root@node1 /]# vi /etc/hosts


192.168.100.11   node1.test.kr     node1

192.168.100.12   node2.test.kr     node2


1.1.2. export 파일 수정

[root@node1 /]# vi /etc/exports


/home       node*(rw,no_root_squash)


1.1.3. nfs 활성화

[root@node1 /]# rpm -qa | grep nfs

nfs-utils-lib-1.1.5-9.el6.x86_64

nfs-utils-1.2.3-54.el6.x86_64

nfs4-acl-tools-0.3.3-6.el6.x86_64


*** 설치되지 않았다면 설치

[root@node1 /]# yum -y install nfs-utils



[root@node1 /]# vi /etc/idmapd.conf


# line 5: uncomment and change to your domain name

Domain = nis.test.kr                       수정




[root@node1 /]# /etc/rc.d/init.d/rpcbind start 

Starting rpcbind:                         [  OK  ]

[root@node1 /]# /etc/rc.d/init.d/nfslock start 

Starting NFS statd:                       [  OK  ]

[root@node1 /]# /etc/rc.d/init.d/nfs start 

Starting NFS services:                    [  OK  ]

Starting NFS mountd:                      [  OK  ]

Starting NFS daemon:                      [  OK  ]

Starting RPC idmapd:                      [  OK  ]


[root@node1 /]# chkconfig rpcbind on 

[root@node1 /]# chkconfig nfslock on 

[root@node1 /]# chkconfig nfs on



1.2 nfs client 설정

1.2.1 host 파일 수정

[root@node2 /]# vi /etc/hosts


192.168.100.11   node1.test.kr     node1

192.168.100.12   node2.test.kr     node2


1.2.2 nfs 활성화

[root@node2 /]# rpm -qa | grep nfs

nfs-utils-lib-1.1.5-9.el6.x86_64

nfs-utils-1.2.3-54.el6.x86_64

nfs4-acl-tools-0.3.3-6.el6.x86_64


*** 설치되지 않았다면 설치

[root@node2 /]# yum -y install nfs-utils


[root@node2 /]# vi /etc/idmapd.conf


# line 5: uncomment and change to your domain name

Domain = nis.test.kr


[root@node2 /]# /etc/rc.d/init.d/rpcbind start 

Starting rpcbind:                         [  OK  ]

[root@node2 /]# /etc/rc.d/init.d/nfslock start 

Starting NFS statd:                       [  OK  ]

[root@node2 /]# /etc/rc.d/init.d/nfs start 

Starting NFS services:                    [  OK  ]

Starting NFS mountd:                      [  OK  ]

Starting NFS daemon:                      [  OK  ]

Starting RPC idmapd:                      [  OK  ]


[root@node2 /]# chkconfig rpcbind on 

[root@node2 /]# chkconfig nfslock on 

[root@node2 /]# chkconfig netfs on


1.2.1 fstab 수정

~

[root@node2 etc]# vi fstab

/dev/VolGroup00/LogVol00    /           ext3     defaults           1 1

LABEL=/boot                /boot       ext3     defaults           1 2

tmpfs                       /dev/shm   tmpfs    defaults           0 0

devpts                      /dev/pts    devpts   gid=5,mode=620   0 0

sysfs                        /sys        sysfs     defaults           0 0

proc                        /proc       proc     defaults           0 0

/dev/VolGroup00/LogVol01   swap        swap    defaults           0 0


# 아래 줄 추가

node1.test.kr:/home        /home       nfs     defaults           0 0



2. nis 설치 

2.1 서버 구성

2.1.1 nis 구성 파일 설치

[root@node1 /]# yum -y install ypserv rpcbind


2.1.2 nis 환경 파일 설정

# set NIS domain

[root@node1 /]# ypdomainname nic.test.kr

[root@node1 /]# vi /etc/sysconfig/network

# add to the end

NISDOMAIN=nic.test.kr


[root@node1 /]# vi /var/yp/securenets

# create new (specify networks you allow to access)

255.0.0.0       127.0.0.0

255.255.255.0   10.0.0.0


2.1.2 nis 서비스 기동

[root@node1 /]# /etc/rc.d/init.d/rpcbind start 

Starting portmap: [  OK  ]


[root@node1 /]# /etc/rc.d/init.d/ypserv start 

Starting YP server services: [  OK  ]


[root@node1 /]# /etc/rc.d/init.d/ypxfrd start 

Starting YP server services: [  OK  ]


[root@node1 /]# /etc/rc.d/init.d/yppasswdd start 

Starting YP passwd service: [  OK  ]


[root@node1 /]# chkconfig rpcbind on 

[root@node1 /]# chkconfig ypserv on 

[root@node1 /]# chkconfig ypxfrd on 

[root@node1 /]# chkconfig yppasswdd on


2.1.3 nis database update

[root@node1 /]# /usr/lib64/yp/ypinit -m

At this point, we have to construct a list of the hosts which will run NIS servers. dlp is in the list of NIS server hosts. Please continue to add the names for the other hosts, one per line. When you are done with the

list, type a <control D>.

next host to add: node1.test.kr

next host to add:                             <-   Ctrl + D key

The current list of NIS servers looks like this:

node1.test.kr 

Is this correct? [y/n: y] y                       <-   ‘y’ key and Enter

We need a few minutes to build the databases...

Building /var/yp/server.world/ypservers...

Running /var/yp/Makefile...

gmake[1]: Entering directory `/var/yp/server.world'

Updating passwd.byname...

Updating passwd.byuid...

Updating shadow.byname...

Updating group.byname...

Updating group.bygid...

Updating hosts.byname...

Updating hosts.byaddr...

Updating rpc.byname...

Updating rpc.bynumber...

Updating services.byname...

Updating services.byservicename...

Updating netid.byname...

Updating protocols.bynumber...

Updating protocols.byname...

Updating mail.aliases...

gmake[1]: Leaving directory `/var/yp/nic.test.kr'

node1.test.kr has been set up as a NIS master server.

Now you can run ypinit -s node1.test.kr on all slave server.



2.2 nis client 설정

2.2.1 nis 설치

[root@node2 /]# yum -y install ypserv rpcbind


2.2.2 nis 환경 설정

[root@node2 /]# ypdomainname nis.test.kr

[root@node2 /]# vi /etc/sysconfig/network


NISDOMAIN=nis.test.kr               <- 추가 





[root@node2 /]# vi /etc/nsswitch.conf

# Example:

#passwd:    db files nisplus nis

#shadow:    db files nisplus nis

#group:     db files nisplus nis


passwd:     files nis               <- 수정

shadow:     files nis               <- 수정

group:      files nis               <- 수정


#hosts:     db files nisplus nis dns

hosts:      files dns nis            <- 수정





[root@node2 /]# authconfig \

--enablenis \

--nisdomain=nis.test.kr \

--nisserver=node1.test.kr \

--update

Starting rpcbind: [ OK ]

Starting NIS service: [ OK ]

Binding NIS service: .[ OK ]


2.2.3 설정 확인

[root@node2 /]# ypwhich

node1.test.kr



3. auto-mount 설정 (nfs client 서버에서 작업)

3.1 auto-mont 설치

[root@node2 /]# yum –y install autofs


3.2 auto-mount 환경 파일 수정

[root@node2 /]# vi /etc/auto.master


/home   /etc/auto.home  --timeout=60       추가 



[root@node2 /]# vi auto.home                파일 생성


*      node1.test.kr:/home/&               추가


3.3 auto-mount 시작

[root@node2 /]# /etc/rc.d/init.d/autofs start 

[root@node2 /]# chkconfig autofs on



4. 계정 생성 및 mount 확인 

4.1 nis server 에서 계정 생성

[root@node1 /]# useradd nuser1

[root@node1 /]# 

[root@node1 /]# cd /var/yp

[root@node1 /]# make

gmake[1]: Entering directory `/var/yp/nis.test'

Updating passwd.byname...

Updating passwd.byuid...

Updating group.byname...

Updating group.bygid...

Updating netid.byname...

gmake[1]: Leaving directory `/var/yp/nis.test


4.2 nis client 서버에서 신규 생성된 계정으로 로그인

Last login: Tue Mar 31 10:15:52 2015 from 192.168.100.224

[nuser1@node2 ~]$

[nuser1@node2 ~]$ df –h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup00-LogVol00

                      2.8G  1.9G  794M  71% /

/dev/sda1              99M   20M   75M  21% /boot

tmpfs                 249M     0  249M   0% /dev/shm

node1:/home           2.8G  2.0G  687M  75% /home            확인




아직까지 윈도 7을 사용하다가 나와 함께 일하는 김차장님이 윈도8.1을 설치한 것을 보고 급~충동이 밀여와 따라하고야 말았다. 어느새 내 놋북에는 윈도7이 사라지고 윈도8.1이 설치되어 있었다. ^^;; 



음...윈도...정말 많은 발전을 이뤘다. 산만함과 복잡함...그리고 불안정이 극에 달했던 윈도 비스타 이후 윈도7과 윈도8을 거치며 윈도8.1에서는 나름 윈도만의 정체성(?)을 조금이나마 잡아가는 듯 하다.


잡설은 걷어치우고...


Ultra RAMDisk


윈도 8에서는 어떤 램디스크 프로그램을 써 볼까 고민하던 중 국산 프로그램이 하나 눈에 띄었다. 바로 Ultra RAMDISK라는 프로그램이었다. 무료 버전이 있고 유료 버전이 있는데 설치하고 최초 실행하면 다음과 같은 화면을 보여준다.



기능 제한이 없는 Pro 버전은 유료로 판매하고 있었고 Lite 버전은 비 상업적 용도의 개인에 한해 무료로 사용할 수 있었다.


홈페이지는 요기(http://ultraramdisk.com/ko_home)다.


램 디스크 생성하기

"램 디스크+" 를 클릭하면 램 디스크를 만들 수 있다.


ram diskultra ramdisk


다음 화면처럼 정보를 입력하면 된다. 아래 화면은 X : 드라이브로 2048 Mega Byte (2Giga Byte) 크기의 램디스크를 만드는 화면이다.

ultra ramdiskram drive


자동으로 TEMP 와 TMP 디렉토리를 만들어 준다. 왜 만드는 지는 아래 화면에서 설명한다.  아래 화면처럼 + 버튼을 눌러 TEMP 와 TMP를 만들어 주는 것이 좋다.



TMP와 TEMP 디렉토리를 만드는 이유는 운영체제에서 사용할 임시 폴더를 지정하기 위함이다. 아래 화면에서 설정하는 "사용자 임시 폴더"와 "시스템 임시 폴더"는 원래 내 컴퓨터의 속성 - 고급 설정 - 환경변수에서 설정하는 것인데 Ultra RAMDISK는 편리하게도 자체적으로 아래 화면에서 설정을 변경하면 시스템의 설정을 자동으로 변경해주는 편리한 기능을 제공한다. 이전에 사용하던 외국의 프로그램에서는 볼 수 없던 친절함 이다.



게다가 위 화면처럼 Ultra RAMDISk에서는 인터넷익스플러로와 구글 크롬의 캐시 폴더도 자동으로 변경해준다. 다만 구글의 크롬은 크롬의 기능상 바탕화면이나 프로그램 그룹에 생성되어 있는 크롬을 실행할 때 더블클릭하는 단축아이콘을 드래그앤드랍으로 위 화면의 바로가기 창에 집어넣어주면 크롬 캐시를 변경해준다.



램드라이브가 정상적으로 생성되면 리부팅 할 때 마다 자동으로아래 화면처럼 지정된 드라이브레터로 램디스크를 생성해준다.


ultra ramdiskultra ramdisk



Windows 7의 RAM Disk 활용 방법


예전에 많은 분들이 봐주셨던 Windows 7에서의 램디스크 활용에 대한 글모음보러가기 (보러가기-클릭)



  • 에스델 ♥ 2015.04.03 12:09 신고

    윈도 8.1에서 램디스크 사용하기
    잘 보았습니다.^^
    저도 8.1로 바꾸고 싶습니다.ㅎㅎ
    좋은 하루 보내세요!

    • taeho Tae-Ho 2015.04.03 21:48 신고

      왼쪽 아래의 윈도 창버튼을 자꾸만 누르게 됩니다. 시작버튼이 아니라 메트로 UI로 넘어가는 버튼인데요..ㅋㅋ

  • 개인이 2015.04.03 21:13 신고

    사양 좋으시네요 ^^ 저도 종종 윈도우8로 넘어갈까 하다가 아직은 윈7이 익숙해서 좋더라구요 ^^ 기회가 되면 참고하도록 하겠습니다 ~


레드햇 리눅스의 DVD를 구해 리눅스를 설치 했다면 정품을 구매하기 전까지는 yum 명령을 통해 신규 패키지를 설치하거나 보안패치 혹은 패키지의 업그레이드를 할 수 없다. 하지만 궁하면 통하는 법이라 했던가.... 레드햇의 클론 OS가 CentOS이기 때문에 CentOS의 yum이 사용하는 리포지토리를 그대로 레드햇에 적용하면 패치나 설치되어 있지 않은 패키지의 추가 설치가 가능하다.



RedHat 에서 CentOS의 yum Repository 적용하기


레드햇 리눅스가 설치되어 있다면... (난 레드햇 6.3을 설치 했다.)

root로 로그인 한 뒤 아래 화면처럼 /etc/yum.repos.d 디렉토리로 이동한다.



이 디렉토리 안에는 yum이 실행될 때 업데이트 정보를 가져올 리포지토리가 위 화면의 노랑~ 네모 상자의 내용과 같이 정의 되어 있다. 이 내용을 CentOS의 리포지토리 정보로 바꿔치기 하면 된다.


다음과 같이 원본을 백업해 둔다. (혹시 나중에 필요할지도 모르므로....)



원본을 복사해 두었다면 다음과 같이 내용을 수정한다.



수정한 내용을 저장한 뒤 키를 Import 해야 한다.



이 때 URL에서 설치한 레드햇 리눅스가 32bit 라면 위의 화면처럼 i386을 그대로 사용하면 되고 64bit 라면 i386을 x86_64로 변경하여 실행하면 된다.


정상적으로 리포지토리 설정이 되었다면 다음과 같이 yum list 명령이 정상적으로 실행된다.



위의 화면은 yum list 명령이 실행된 뒤 다시 실행했을 때의 화면이다. 최초 실행 시에는 yum이 패키지 목록을 가져오는 과정이 실행되며 스크롤바 형태로 진행상태가 표시된다. 이 최초 과정이 약간 시간이 걸리기도 한다.





Sun Microsystems가 Oracle에 인수 합병된 후 국내 시장에서 Sun 서버의 시장 점유율은 체감적으로 형편없이 떨어졌습니다. 여러 고객사에 방문해 보면 기존에 Sun 서버를 사용하던 고객들도 대부분 IBM이나 HP로 돌아서는 분위기 였고 실제 서버보안SW를 설치하는 경우에도 Sun 서버는 기존에 Sun 서버를 주로 사용하던 고객사 이외에는 더 이상 Sun 서버를 도입하지 않는 분위기로 바뀐지 오래입니다.


게다가 최근에는 아마존의 클라우드 서비스인 AWS가 또 하나의 주류로 등장하면서 AWS에 최적화 되어 있는 Linux (아마존 자체리눅스, 우분투 등)와 Windows를 주로 사용하면서 Solaris의 입지는 더 줄어든 형국입니다.


하지만 노트북이나 조립서버에서 유닉스 환경의 데모나 테스트를 진행할 때는 그나마 인텔계열 CPU를 지원하는 상용 유닉스가 유일하게 Sun 뿐이기 때문에 일부 시연이나 테스트를 하기위해 Sun을 버리기는 조금 이릅니다. (하지만 버려야 하는 시기가 임박했음을 부인할 수는 없습니다.)


그러다 보니 VMWare에 Solaris 11을 설치해야 하는 상황이 생겼습니다.



솔라리스를 설치하는 과정에서 일반 계정을 하나 생성하라고 강제합니다. 그리고 기존의 설치 과정에서 root 계정의 비밀번호를 초기화(생성)해주던 과정은 사라졌습니다. 아마도 비밀번호가 없는 상태로 root 계정이 만들어지고 root 계정으로는 아무도 직접 로그인하지 못하도록 합니다. (콘솔에서도 로그인 불가)


이렇게 root 계정을 표면적으로 사용하지 못하도록 하는 것은 보안을 강화하기 위한 조치로 보입니다. 하지만 root를 직접 사용해야 하는 경우가 있기 때문이 root 계정을 직접 로그인할 수 있도록 설정하는 방법을 기록해 두고자 합니다.


솔라리스에는 Role이라는 독특한 보안 개념을 적용합니다. 그리고 root 계정을 직접 로그인하지 못하는 root Role로 지정합니다. 이러한 root Role에 대한 설정은 다음과 같이 /etc/user_attr 이라는 파일에서 설정합니다. 



root 의 타입을 일반 계정이 아닌 role로 선언함으로써 실제 사용자 계정이 아닌 Role(역할)로 선언합니다. 하지만 이것은 실질적인 보화를 위한 보호대책이라고 할 수는 없습니다. 엄연히 실제로 root 계정은 존재하고 주요 작업을 하기 위해서는 root 계정으로 Switch User를 해야하기 때문입니다.


위에서와 같이 운영체제 설치 과정에 생성한 계정(여기서는 castle) 계정의 맨 뒤에 roles 부분에 root를 지정합니다. 이렇게 되면 castle 이라는 사용자로 로그인한 뒤 sudo 명령을 통해 root 패스워드를 입력하지 않고 root 계정으로 SU가 가능합니다.


흔히 이것이 보안을 강화하는 방법이라고 생각하는 경우가 많습니다. 하지만 서버에 직접 root 계정으로 로그인하는 것 만을 차단할  뿐 실질적인 보안강화 효과는 없다고 보는 것이 옳습니다. 어차피 sudo 명령을 통해 root 로 전환한다면 전환 권한을 가진 계정의 비밀번호가 탈취되면 root 계정이 탈취되는 것과 동일하기 때문입니다. 게다가 castle 계정에서 root 계정으로 sudo를 통해 비밀번호 입력 과정없이 전환이 되는 치명적인 보안문제가 남게 됩니다.


어쨌든... root 계정의 비밀번호를 초기화(생성)하고 root 를 role이 아닌 계정으로 변경해야만 su - root 명령을 통해 root로 전환하거나 콘솔에서 root로 로그인할 수 있습니다.


다음과 같이 root 패스워드를 변경합니다.



1) 설치 중 생성한 계정으로 로그인

2) sudo su - 명령을 실행

3) 설치 중 생성한 계정의 비밀번호를 입력하여 root로 전환

4) passwd 명령을 통해 root 비밀번호 생성(초기화)


여기까지만 진행하면 su - root 명령으로 전환은 가능합니다. 하지만 아래 화면처럼 콘솔에서 직접 로그인은 되지 않습니다.



Role은 직접 로그인 할 수 없다고 씨부렁~~거립니다. ^^


다음과 같이  role을 변경해야 합니다.



root의 타입을 normal 로 변경합니다.


여기까지 진행하고 나면 user_attr 파일에서 root Role 라인이 없어지고 이후에는 root 계정으로 비밀번호 인증 후 로그인할 수 있습니다.


----

솔라리스 11 설치 후 기본 네트워크 설정 방법 참고 사이트

솔라나라 : http://www.solanara.net/solanara/solaris11

아루마루의 낙서장 : http://nagjang.tistory.com/11




  • 에스델 ♥ 2014.10.05 18:10 신고

    솔라리스 11 설치후
    root 로그인하기 잘 보았습니다.^^
    연휴 잘 보내셨는지요?
    행복한 시간 보내세요!

    • taeho Tae-Ho 2014.10.05 18:15 신고

      교육준비하고 시연준비 하느라 바쁜 연휴였습니다...^^ 감사합니다...^^


IT 업종에서 일하면서 가끔 프로세서(processor)와 프로세스(process)를 구별하지 못하는 개발자나 엔지니어들을 종종 보게 됩니다. "그게 그거 아니냐.."거나 "구별할 필요가 있냐"라는 생각을 가진 사람들도 꽤 있습니다. 사실 구별할 줄 몰라도 일하는데 큰 지장은 없는 것이 사실입니다. 하지만 진짜로 비전공자라서...몰라서 구별하지 못하는 것이라면 공부하여 배우면 되지만 전자계산학이나 컴퓨터공학을 전공했음에도 불구하고 구별하지 못한다면... 정말 우리나라의 대학의 전산 관련 전공 계열의 교육과정은 심각한 문제가 있다고 단언하고 싶습니다. 그리고 한발 더 나아가 대학교 4년 동안 도대체 공부 안하고 뭘 한거냐고 따끔하게 혼내주고 싶습니다.


process .vs. processor프로세스와 프로세서



프로세서와 프로세스의 구별


프로세서와 프로세스는 엄연히 다른 존재입니다. 


Processor (프로세서)는 하드웨어적인 측면에서 "컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛"이다.  이는 중앙처리장치(Central Processing Unit)를 뜻하며 폰노이만 아키텍쳐에 의해 만들어졌다면 적어도 하나 이상의 ALU (Arithmetic Logic Unit)와 처리 레지스터(Register)를 내장하고 있어야 한다.


프로세서에 대한 정의입니다. 오래 전 혼자 공부했던 8008과 z80 같은 마이크로프로세서를 떠올리게 하는 정의입니다. 


이런 정의를 충족하는 것에는 매우 여러종류의 프로세서들이 있습니다. 네트워크 장비(라우터, 스위치, IP공유기, 스위칭허브 등)에 포함되어 있는 네트워크 프로세서, 디지털 미디어 기기(MP3, 디지털피아노 등)에 사용되는 DSP(Digital Signal Processor) 등 매우 다양한 종류의 특정 목적에 적합하게 설계된 전용 프로세서들이 있습니다. 반면에 노트북이나 데스크탑 또는 서버에 사용되는 프로세서들은 특정 목적이 아닌 범용(일반적인 다양한 목적)적으로 사용할 수 있는 범용 프로세서입니다.


프로세서는 하드웨어에만 사용되는 용어는 아닙니다. SW적으로도 의미를 가지며 프로세서라고 불리는 프로그램들도 있습니다. 


소프트웨어적으로 프로세서라 함은 데이터 포맷을 변환하는 역할을 수행하는 데이터 프로세싱 시스템(데이터 처리 시스템)을 의미하며 출력 가능한 인쇄물을 생성하는 워드프로세서도 프로세서라 부른다.


조금 애매하긴 합니다만 위의 범주에 포함되는 소프트웨어는 워드프로세서와 컴파일러, 어셈블러 등이 포함됩니다. 프로세서라는 용어의 정의가 명확하게 정의되기 훨씬 이전부터 관습적으로 프로세서라고 부르던 소프트웨어들을 넓은 의미의 프로세서에 포함시켜주는 분위기가 강합니다. 


결론적으로 프로세서는 CPU나 Microprocessor 라는 하드웨어를 말하는 것으로 그 범위가 점점 축소되어 명확해져 가고 있습니다.


반면 프로세스는 말 그대로 "절차(과정)" 입니다. 때문에 스스로 무언가를 처리하지 못합니다. 프로그램은 스스로 실행하면서 데이터를 입력받고 결과를 생성해 내니 "프로세서"라고 불러도 되지 않느냐라고 반문하는 사람도 있었습니다. 하지만 그것은 분명 틀린 논리입니다.



프로세스는 특정 목적을 수행하기 위해 나열된 작업의 목록이라고 생각하여야 합니다. 즉 프로그램이죠. 컴퓨터에서 프로그램은 프로그래밍 언어로 작성된 작업 수행 과정일 분입니다.프로그래머가 작성한 소스코드와 소스코드가 컴파일되어 기계어로 번역된 바이너리파일도 그저 작업 과정이 기록된 파일일 뿐입니다.


작업의 과정이 파일로 저장되어 있으면 그것을 "프로그램"이라고 부르고 메모리에 적재되어 실행 중 이거나 실행 대기 중일 땐 "프로세스"라고 구별하여 부를 뿐입니다. 즉 프로세스는 "메모리에 적재되어 프로세서에 의해 실행중인 프로그램" 이라고정의하는 것이 정확할 것입니다.


"프로세서에 의해 실행 중인 프로그램"의 의미를 이해해야 한다.


이 의미를 이해하려면 CPU의 동작 원리를 이해해야 합니다. CPU는 엄청나게 복잡한 현대 전자공학의 정수라 할 수 있습니다. 저는 중학교(?) 시절 오락실에서 본 8bit MSX 호환 컴퓨터에 푹 빠져 고등학교를 졸업하자 마자 Microprocessor를 혼자 공부했습니다. 혼자 공부하다 보니 분명 한계는 있었지만 CPU의 동작 원리에 대해 이해하는 좋은 계기가 됐었습니다. 


컴퓨터가 프로그램을 실행하는 과정은 매우 복잡하지만 프로세서와 프로세스를 구별하기 위해 가장 중요한 부분은 다음과 같은 순서를 이해하는 것입니다.


1. 사용자가 단축 아이콘 혹은 명령행에서 프로그램을 실행한다.

2. 파일로 저장되어 있던 프로그램은 메모리(램)에 로더(Loader)에 의해 적재(load)되고 처음으로 실행해야 할 기계어 코드가 저장된 메모리의 주소를 CPU의 명령주소(IP : Instruction Pointer) 레지스터에 저장한다.

3. 프로세서(CPU)는 IP 레지스터가 가리키는 메모리의 주소에서 (처음으로) 실행할 명령어를 인출(메모리에서 CPU로 가져오는)하여 명령 레지스터(IR : Instruction Register)에 저장한다.

4. IR에 저장된 명령을 실행하고 IP에 다음번에 실행할 명령어가 있는 주소를 저장한다.

5. 3~4를 프로그램의 끝까지 반복한다.


위의 과정이 프로그램이 실행되는 과정입니다. 사실 실제로는 백 배는 더 복잡한 과정이 있고 레지스터도 다양하며 계산할 것도 많지만 이 정도만 확실하게 이해하고 그 과정을 조금 더 스스로 공부해보면 충분합니다. 


즉, 프로세스는 CPU 입장에서 봤을 땐 파일로 저장된 프로그램이 디스크에서 메모리로 읽어들인, 즉 장소와 포맷만 바뀌었을 뿐 스스로 실행되는 살아있는(?) 것이라고 보기는 어렵습니다. 프로세스는 그저 CPU가 실행할 과정과 실행 시 참조할 데이터를 메모리(램)에 적재해 둔것에 지나지 않는다는 거죠. 즉 프로세스는 프로세서가 실행할 명령어와 데이터목록을 메모리에 읽어들인 것에 지나지 않는다 라는 것이죠.


결국 프로세스와 프로세서를 정확하게 구별하지 못하는 이유는 파일로 저장된 프로그램이 메모리에 적재(load)되고 CPU(프로세서)에 의해 프로세스에 명시된 명령어를 순서대로 CPU로 불러와 실행되는 과정을 정확하게 이해하고 있지 못하기 때문입니다.


  • 에스델 ♥ 2014.09.05 10:52 신고

    덕분에 프로세서와 프로세스의 구별에 대해
    알게되었습니다.^^
    행복한 금요일 보내세요!

  • Orangeline 2014.09.05 13:51 신고

    하드웨어와 절차의 구분 설명을 잘해주셨네요.
    저도 개발자 이지만 이런부분을 대강대강 알고있는 부분이네요.
    좋은 정보 감사합니다.

  • gggyo 2019.05.26 20:50

    감사합니다!! 조금 이해가 되었습니다

  • study 2019.08.07 11:16

    감사합니다. 강의 듣는데 강사도 섞어서 써서 답답했는데 이젠 좀 알 것 같아요.

    • taeho Tae-Ho 2019.09.20 22:26 신고

      도움이 되셨다니 뿌듯하네요.. ^^ 늦었지만 즐거운 주말 되시길~ ^^

  • 나무나무 2019.09.20 18:34

    강의 듣는데 중간중간 프로세서라는 이야기가 나와서 정확히 뭘 지칭하는건지 찾아보다가 여기 와서 궁금증 해결하고 갑니다. 감사합니다 ~ ^^

    • taeho Tae-Ho 2019.09.20 22:27 신고

      모든 공부는 기초 개념이 가장 중요하죠. IT분야도 마찬가지입니다.
      도움이 되셨다니 감사합니다~


작년에 크롬 웹 브라우저의 임시파일 폴더를 크롬 바로기기의 "속성"에서 옵션으로 지정하는 방법에 대해 포스팅한 적이 있다.   보러가기 - http://blogger.pe.kr/296


그런데 최근 노트북을 예전의 이미지로 복원하고 크롬을 새로 설치한 뒤 그 방법이 먹히지(?) 않는 현상이 나타났다. 옵션에 아무리 캐시 디렉토리를 지정해도 동작하지 않는다.


크롬의 버전이 업데이트 되면서 해당 옵션이 변경되었는지 아무리 찾아도 나오질 않고 시간은 없고 해서 그냥 윈도의 도스창(cmd창)에서 명령어를 통해..유닉스로 치자면 심볼릭 링크를 걸기로 했다. 나중에 보니 이미 그런 방법으로 사용하는 분들이 꽤 있는 것 같았다.


크롬의 기본 캐시 폴더는 아래 창에 보이는 것 처럼 쫌....깊다...




CMD 창을 실행하고 다음과 cd 명령어를 통해 같이 크롬 캐시가 있는 폴더로 이동한다.



위의 화면 처럼 Cache 폴더가 보인다면 아래의 rd 명령(Remove Directory)으로 기존의 크롬 Cache 폴더를 삭제하고 미리 만들어 둔(반드시 미리 만들어 두어야 함) 크롬의 캐시폴더로 사용할 폴더를 지정하여 일종의 심볼릭 링크를 걸어준다.


기본 크롬 캐시 폴더 삭제하기

rd /s /q "%LocalAppData%\Google\Chrome\User Data\Default\Cache"


미리 만들어 둔 크롬 캐시 폴더를 바라보도록 일종의 심볼릭링크 생성하기

mklink /j "%LocalAppData%\Google\Chrome\User Data\Default\Cache" "D:\Chrome\Cache"


이렇게 한 뒤 크롬을 재실행하면 D:\Chrome\Cache가 크롬 캐시로 사용되기 시작한다. 



  • 바다야크 2014.07.18 23:03 신고

    오우 멋진 방법이에요. 램 디스크를 캐시 폴더로 지정하고 싶을 때 사용하면 되겠네요. ^^

    • taeho Tae-Ho 2014.07.18 23:05 신고

      저도 램디스크를 크롬 캐시로 씁니다.. ^^

  • 유효동 2015.06.17 20:22 신고

    질문이 있습니다.
    캐시 폴더를 삭제를 하고 램디스크 명칭이 R이라 D대신 R을 넣어 심볼릭 링크를 설정 했습니다.
    그런데 임시폴더가 램디스크쪽으로 가질 않고 계속 원래 위치의 캐시 폴더로 쌓입니다.
    해결법을 알려 주시면 감사 드리겠습니다.

    • taeho Tae-Ho 2015.06.17 08:50 신고

      아..캐시폴더를 바꾸셨군요...
      저 같은 경우에는 그런 경우는 없었습니다.

      경로에 오타난 오류가 있는 것은 아닌지 확인하시고..
      그래도 안된다면 크롬의 버전이 다른 것은 아닌지 확인해주세요..
      저도 현재 최신 버전에서 테스트를 해보고 알려드리겠습니다.

      ----

      이 포스트를 쓸 때는 Windows 7 환경이었는데..
      현재는 Windows 8.1 환경을 쓰고 있습니다.
      크롬 버전은 43.0.2357.124 m (64-bit) 으로 최신버전이구요..
      일단 결과는 크롬 캐시의 변경이 잘 이루어집니다. 드라이브명은 관계 없는 것 같구요..

      오타가 아니라면 권한의 문제일 듯 합니다.
      다시한번 오타 여부 확인해주시고요..오타였다면 C: 드라이브의 원래 경로에 Cache 경로가 생성될 겁니다.

  • 유효동 2015.06.17 20:31 신고

    질문이 있습니다.
    주인장님이 올려주신 램디스크 설정법을 제외하고 나서 구글링 해본 결과 다른 방식의 설정법이 2개가 나왔습니다.
    http://egloos.zum.com/hanavy/v/11159428, http://nywj.net/?p=165 입니다.
    첫번째 것은 이해를 하지 못하여서 실행하지 못하였고 두번째 것은 설정은 하였으나 재부팅을 하면 캐쉬폴더가 제자리로 돌아옵니다.
    위 의 두방식과 주인장님이 해놓으신 방법의 공톰점과 차이점이 궁금합니다.
    그리고 캐시 폴더를 제외한 어플리케이션 캐시. 데이타 캐시,지피유 캐시, 스토레이지 폴더 또한 바꾸고 싶은데 방법이 있을까요?
    마지막으로 크롬 기반으로 둔 스윙 브라우저 또한 바꾸고 싶은데 위 방법으로 가능할까요?

    • taeho Tae-Ho 2015.06.18 00:17 신고

      첫번째의 것은 크롬이 실행될 때 아규먼트로 기본 경로가 아닌 폴더를 UserData 경로로 사용하도록 크롬에게 전달해 주는 방법입니다. 때문에 다른 단축아이콘을 실행하거나 다른 브라우저나 프로그램에서 크롬을 실행할 경우에는 다시 기본경로를 사용하게 되는 문제가 있습니다. 이 첫번째에 꼼수~라고 나오는 것이 제가 올린 포스트와 두번째 방법입니다. (같은 방식이죠)

      이 방법을 꼼수라하는 이유는 크롬은 C: 드라이브의 기본 UserData와 Cache를 사용하려 하지만 해당 경로가 단축아이콘과 같이 일종의 링크여서 실제로는 D:\Chrome\ 과 같은 다른 경로로 리다이렉트 되는 방식이기 때문입니다. 하지만 이 꼼수는 앞의 방법과 달리 다른 브라우저에서 크롬을 호출하거나 다른 프로그램에서 크롬을 실행해도 UserData와 Cache 경로가 바뀐 곳으로 사용되는 장점이 있습니다.

      저도 첫번째 방식으로 사용하다가 언젠가 노트북을 포맷하고 Windows 8.1로 업글한 뒤 잘 적용이 안되는 듯 하여 두번째 방법으로 바꿔 사용하고 있습니다.

      마지막 질문의 해답은 설정법 두개 중 후자를 사용하시면 되겠네요... 두번째 블로그에 잘 설명되어 있는 것으로 보입니다.
      첫번째 방법 보다는 확실하게 두번째 방법을 권해드립니다.

      두번째 방법은 리부팅해도 다시 원복되지 않는 방법입니다. 해당 증상은 글만으로는 원인을 알 수는 없습니다.

  • 2015.08.04 13:36

    비밀댓글입니다

    • taeho Tae-Ho 2015.08.04 14:04 신고

      만든 링크를 del 명령으로 지우고 mkdir 명령으로 Cache 폴더를 만들면 됩니다.


유닉스와 리눅스에서 파일 퍼미션에 대한 공부를 하다보면 나오는 특수한 파일 퍼미션이 두개가 있다. 하나는 앞의 find 명령어에 대한 고찰(http://blogger.pe.kr/338)에서 조금 살펴본 setuid/setgid 이고 다른 하나는 이번 포스트에서 설명할 sticky bit다.


1. sticky bit 란?


유닉스 운영체제는 기본적으로 파일의 소유자가 아니면 해당 디렉토리 내의 파일을 지우거나 수정하지 못하도록 기본적인 umask를 설정한다. 하지만 딱~두군데 모든 사용자 계정이 파일을 만들고 수정, 삭제할 수 있는 디렉토리가 있다. 바로 /tmp와 /var/tmp다. 이 두개의 디렉토리는 퍼미션이 기본적으로 777로 설정되어 있어 누구나 임의의 파일을 생성하고 수정하고 삭제할 수 있다. 말 그대로 모든 사용자 계정이 사용하는 공용 디렉토리다.


그러다 보니... 이 두개의 디렉토리에 퍼미션이 777 퍼미션을 갖는 파일들과 디렉토리들이 생겨나게 되는데...문제는 이 파일들이 꼭 필요한 파일인지 알 수 없고 현재 사용중인지 아닌지를 판단하기 어렵다 보니 파일 퍼미션이 777인 파일들을 아무나 다른 소유자의 파일들을 지워버리는 문제가 생겨난다. 하지만 그 파일들이 현재 사용중인 파일이라면 서비스에 장애가 발생하게 되는 것이다.


그래서 등장한 것이 sticky bit 다.


sticky bit가 설정된 디렉토리 내에서는 


1. 퍼미션이 777인 파일에 대해서 파일의 소유자만이 삭제를 할 수 있다. (수정이나 실행, 읽기는 모두 허용된다.)

2. sticky bit가 설정된 디렉토리 자체도 소유자만이 삭제할 수 있다.

3. root는 다할 수 있다.


즉... 파일을 만든 계정과 root에서만 삭제할 수 있다는 뜻이다. 비록 파일의 퍼미션이 777이더라도 말이다.


2. 실제 테스트


[taeho@ncsd /]$ ls -l 

drwxrwxrwt   3 ncsd ncsd  4096 May  1 11:20 stickytest

[taeho@ncsd /]$ 

[taeho@ncsd /]$ 

[taeho@ncsd /]$ id              

uid=500(taeho) gid=500(taeho) groups=500(taeho)

[taeho@ncsd /]$ 

[taeho@ncsd /]$ rm -f stickytest

rm: cannot remove `stickytest': Permission denied        <--- 퍼미션이 777이고 sticky bit가 설정된 디렉토리 삭제안됨.

[taeho@ncsd /]$ 

[taeho@ncsd /]$ cd stickytest        <--- sticky bit가 설정된 디렉토리로 들어감.

[taeho@ncsd stickytest]$ 

[taeho@ncsd stickytest]$ ls -l

total 4

-rwxrwxrwx 1 ncsd ncsd    0 May  1 11:20 1.txt

drwxrwxrwx 2 ncsd ncsd 4096 May  1 11:11 test

[taeho@ncsd stickytest]$ 

[taeho@ncsd stickytest]$ rm -rf 1.txt

rm: cannot remove `1.txt': Operation not permitted      <--- 퍼미션이 777인데 소유자가 다르기 때문에 삭제 안됨.

[taeho@ncsd stickytest]$ 

[taeho@ncsd stickytest]$ rm -rf test

rm: cannot remove directory `test': Operation not permitted     <--- 퍼미션이 777인 디렉터리가 소유자가 다르기 대문에 삭제 안됨.

[taeho@ncsd stickytest]$ 

[taeho@ncsd stickytest]$ 


sticky bit를 특정 디렉토리에 지정해주기 위해서는...


$ ls -l 

drwxr-xr-x   3 ncsd ncsd  4096 May  1 11:20 stickytest      <--- 755 퍼미션의 테스트 디렉토리

$ chmod 1777 stickytest        <---- sticky bit 는 맨 앞의 1 임.

$ ls -l 

drwxrwxrwt   3 ncsd ncsd  4096 May  1 11:20 stickytest      <--- sticky bit 설정된 화면



이쯤에서 chmod 1777 에서 1은 sticky bit 인것은 알겠는데 왜 나머지 퍼미션을 777로 주는가?? 에 대한 의문이 생긴다면... 맨 앞의 내용을 다시 잘 읽어보기 바란다.




이런저런 쉘스크립트를 보다면 스크립트의 문장 끝부분이 다음과 같은 구문을 종종 보게된다.


cat /tmp/error.txt  > /dev/null 2>&1


cat 명령은 error.txt 파일의 내용을 출력하는 명령이고...


> 는 리다이렉션으로 화면에 출력되는 내용을 > 다음에 지정한 파일로 보내는 것이니 /dev/null 로 결과를 보내고, 즉 화면에는 표시하지 않고...까지는 유닉스 환경을 다루어본 학생이나 엔지니어라면 쉽게 이해한다.


문제는 2>&1 이다.


흔히 "아~저건 에러메시지도 화면에 표시하지 않게하는 거지."라며 아는 척~~하는 사람들도 많다. 맞다. 정확하게 알고 있긴하다.


쉘스크립트를 작성하고 실행할 때 중간에 에러가 발생하게 되면 에러메시지가 화면에 고스란히 출력되어 보기에 썩~좋지 않기도 하고 에러가 많거나 계속 다른 메시지가 출력되면서 화면이 스크롤되어 에러를 확인할 수 없게 되는 경우가 있다. 그럴 경우 로그파일에 에러메시지를 기록하도록 하기 위해 2>&1 을 사용해 에러메시지를 로그파일에 기록하고 화면은 깔끔하게 유지하도록 한다.


하지만 2>&1이 의미하는 정확한 뜻을 이해하는 것이 엔지니어의 본분이 아닐까..??


파일디스크립터와 표준입력/표준출력/표준에러


C프로그래밍을 해본 사람들은 잘 알고 있어야 하는 것이 파일디스크립터다.(윈도에서는 핸들이라고 부른다) 프로그램이 수행되면 운영체제는 실행되는 프로그램에게 3개의 기본 파일디스크립터를 할당해준다. 그리고 그 프로그램이 내부적으로 다른 파일을 open하게 되면 운영체제는 4번째 파일디스크립터를 할당한다.


운영체제가 프로그램에게 할당하는 세개의 파일디스크립터는 다음과 같다.


 파일디스크립터

 설   명

 0

 표준 입력 (standard input)

 1

 표준 출력 (standard output)

 2

 표준 에러 (statndard error) 


이해가 되는가? 만약 프로그램을 작성하고 프로그램 내부에서 파일을 열게 되면 파일디스크립터는 3부터 할당된다.


프로그램이 실행되면 운영체제는 프로그램에게 어디로부터 입력을 받고 연산결과를 어디로 출력하고 에러가 발생하면 에러를 어디로 출력할지 정해주어야 한다. 그 기본값이 바로 표준 입력, 표준출력, 표준 에러다. (표준입출력장치 및 표준에러장치라고 부른다.)


표준입력


표준입력장치는 기본적으로 키보드다. 프로그램이나 쉘에서 표준 입력장치를 변경하지 않으면 프로그램은 키보드 입력을 표준입력으로하여 기다린다. 


예를 들어 다음과 같이 cat 명령을 실행하면..

$ cat /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1               localhost.localdomain localhost

192.168.100.10        ncsd    loghost

cat 명령은 프로그램 내부적으로 첫번째 인자(아규먼트)로 지정된 파일을 사용하도록 프로그래밍되어 있다. 따라서 cat 명령 다음에 지정된 /etc/hosts 파일을 열고 내용을 출력한다. 하지만 cat  명령 뒤의 인자인 /etc/hosts를 지정하지 않고 cat 명령만 입력한 뒤 실행하게 되면 cat 명령은 표준입력장치인 키보드로 부터 입력을 받도록 프로그래밍 되어 있다.


즉 다음과 같이 동작한다.

$ cat             <-- 파일명 없이 실행

abcdef           <-- 키보드에서 입력하고 엔터키를 입력

abcdef           <-- 키보드에서 입력받은 내용을 화면에 출력한 부분

keyboard input         <--- 역시 키보드로 입력한 내용

keyboard input         <--- 키보드에서 입력받은 내용을 화면에 출력

                     <-- 다른 키 입력없이 엔터만 입력

                      <-- 엔터만 출력

$                   <-- ctrl + c 키를 눌러 종료


그리고 cat은 표준출력장치로 자신에게 기본적으로 할당된 표준출력장치를 사용하도록 되어 있다. 변경하지 않을 경우 모든 프로그램들은 모니터 디바이스를 표준출력장치로 사용하도록 되어 있다. 그래서 위의 예제에서 모두 결과가 화면에 출력되는 것이다.


표준 입력장치 변경하기


쉘에서 표준 입력장치를 변경하는 방법은 두가지가 있다. 바로 리다이렉션과 파이프다. 먼저 리다이렉션을 사용하여 표준 입력장치를 변경하는 예제다.

$ cat /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1               localhost.localdomain localhost

192.168.100.10          ncsd    loghost

$ cat < /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1               localhost.localdomain localhost

192.168.100.10          ncsd    loghost



리다이렉션을 사용하여 표준 입력장치를 변경할 때는 일반적으로 명령어 뒤에 < 기호를 입력하고 장치명(파일명)을 사용한다.


 위의 두 예제의 실행 결과는 동일하다. 하지만 프로그램 내부의 동작은 전혀 다르다는 것을 이해해야 한다. 


cat/etc/hosts 명령은 cat 명령에게 /etc/hsots 파일을 열도록 지정한 것이다.

하지만 cat < /etc/hosts 명령은 아규먼트 없이 실행될 경우 사용하도록 지정된 표준입력장치인 키보드(standard input)를 /etc/hsots 라는 파일로 바꾸도록 지정하여 파일의 내용을 표준입력으로 리다이렉트 받아 실행한다.


결과는 같지만 내부적인 수행과정은 전혀 다른 것이다.


표준출력과 표준출력장치 변경


표준 출력도 마찬가지다. 표준입력은 < 기호를 이용하여 변경했다. 표준 출력은 > 기호를 이용해 변경한다.

따라서 맨 앞에서 예를 든 cat /tmp/error.txt > /dev/null 이 바로 cat 명령의 표준 출력을 화면이 아닌 /dev/null로 바꾼 것이다. 즉 cat /tmp/error.txt 명령에 의해 화면에 출력될 error.txt의 내용을 화면으로 출력하지 않고 /dev/null 이라는 파일로 출력하는 것이다. (하지만 /dev/null은 운영체제에서 사용하는 블랙홀과 같은 장치파일이다. ) 


하지만 문제는 cat/tmp/error.txt > /dev/null 은 error.txt 파일이 있다면 아무런 메시지를 화면에 출력하지 않고 정상 동작하지만 error.txt 파일이 없다면 아래화면 처럼 에러메시지를 화면에 출력한다. 

$ cat /tmp/error.txt > /dev/null

cat: /tmp/error.txt: No such file or directory



위의 예제는 표준 출력만을 바꾼 것이다. 그런데 이 문장은 사실 무언가가 생략된 문장이다. 표준 파일 디스크립터에는 출력에 대한 디스크립터가 2개다. 표준 출력과 표준 에러가 그것이다. 따라서 위의 예제는 다음과 같이 쓰슨 것이 정상이다.

$ cat /tmp/error.txt 1> /dev/null

cat: /tmp/error.txt: No such file or directory


리다이렉션 기호인 > 앞에 1, 즉 표준출력을 의미하는 파일 디스크립터를 써주는 것이 정확한 표현이다. 다만 파일 디스크립터를 생략하면 두개의 출력 디스크립터 중 표준 출력이라고 묵시적으로 약속이 되어 있는 것이다.


자 그렇다면 이 포스트의 맨앞에서 나왔던 다음 문장을 이해해보자.

cat /tmp/error.txt  > /dev/null 2>&1


/dev/null 까지는 이해했을 테고....


뒤의 2> 도 이해가 되어야 한다. 즉 2번 파일디스크립터인 표준에러다. 즉 표준에러 출력을 > 다음의 장치(파일)로 변경한다는 의미다. 그런데 &1 이 사용되었다. 1은 표준 입력/출력/에러 장치에서 표준 출력을 의미한다. 즉 표준출력의 출력장치로 지정된 장치(파일)을 표준에러 출력장치로 함께 사용한다는 의미다. 즉 에러가 발생하면 에러 메시지를 /dev/null로 리다이렉트한다는 의미다. 앞에서 표준 출력장치(1)이 /dev/null로 변경(리다이렉트)되었기 때문이다.


예제에서는 /dev