AMD와 Intel AMD사의 싱글코어 CPU로써 Intel사의 펜티엄4와 경쟁관계입니다.
낮은 가격에 높은 성능을 제공하고자 하는 AMD의 정책에 따라 가격에 성능비가 좋은 제품들이 많습니다
대체적으로 비슷한 시기에 나온 Intel사의 cpu들의 비해 클럭 값은 낮지만 이것은 Intel과 AMD의 정보처리 방식이 다르기 때문입니다.(1Mhz 당 Intel이 처리하는 값이 1이라면, AMD는 1.5~1.7정도) 인텔 제품과 인텔 제품은 정수 연산에 좀 더 앞서있고, AMD 제품은 실수연산이 좀 더 앞서있다고 할 수 있습니다.
그렇기 때문에 Intel은 여러 프로그램을 동시에 최적으로 실행하는 것에 강하다면, AMD는 실수연산이 많은 게임과 같은 독립적인 프로그램에 강하다고 할 수 있습니다.
하지만 요근래에는 Intel과 AMD 둘다 서로의 단점을 보안해왔기 때문에 어느것이 더 뛰어나다고 말할수 없습니다
애슬론은 완전한 7세대 x86 프로세서이자, 7세대 x86 프로세서 중 최초의 프로세서입니다.
k6 아키텍처에 비해 더 많은 단계를 갖춘 파이프라이닝을 사용하여 더 빠른 클럭 속도를 내도록 하였고, CISC to RISE 디코더 트리플릿을 적용하여 한 클럭 당 최대 6개의 x86 명령어를 디코딩 할 수 있도록하였습니다.
기존의 아키텍처까지는 Intel에 비해 부동 소수점 x87 처리 능력이 떨어진다고 논란이 많았지만, super-piplined, out-of-order, triple-issue 부동 소수점 장치를 구현함으로써 Intel를 앞서나가게 됩니다.
애슬론 클레식
1999년 6월 23일 발매되었습니다.
모든 벤티마크에서 경쟁사인 Intle의 펜티엄3에 비해 월등한 성능을 보여주었습니다.
이 때까지만 해도 cpu 시장은 intel의 독주였지만, 높은 성능과, Intel의 부진 등 여러 상황으로 인해 애슬론 클레식은 상당히 많이 판매되었습니다.
선더버드(T-Bird)
2000년 6월 5일 발배되었습니다,
애슬론 클래식과 가장 큰 차이점은 캐시 디자인입니다. 애슬론 클래식에서는 L1캐시안에 있는 데이터가 L2캐시에도 중복되는 인클루시브 디자인이였습니다. 선더버드에 와서는 L1캐시의 내용이 L2캐시에 중복되지 않는 익스클루시브 디자인으로 바뀌었습니다. 이로써 총합 캐시 크기가 늘어났고 L1캐시와 L2 캐시를 좀 더 효율적으로 사용 할 수 있게 되었습니다.
선더버드는 AMD에서 가장 성공적인 제품 중 하나로 꼽힙니다.
팔로미노(Palomino) 가장 큰 특징은 intel의 펜티엄3에서 가져온 풀 스트리밍 SIMD 확장(SSE)을 탑재한 최초의 K7 코어입니다. 또한 코어의 레이아웃을 변화시킴으로써 전력소모를 줄임으로써 이전부터 계속 논란이 되어왔던 높은 발열과 소음을 어느 정도 줄였습니다.
쏘로브레드(T-Bred)
AMD 최초의 130nm 제조 공정 프로세서입니다.
새로운 공정이였지만 프로세서 메모리 및 I/O 액세스의 효율성과 클럭 당 성능이 좋아진것 빼고는 기존의 팔로미노에 비해 크게 바뀐점은 없습니다.
바톤(Barton) L2캐시를 512ib로 늘리고 버스클럭을 400 MT/s 로 확장하였지만 경쟁사인 Intel사의 노스우드의 성능에는 많이 모자랐습니다.
K8 아키텍처가 채용된 최초의 pc용 64비트 x86프로세서 제품입니다. k8 아키텍처는 새로운 아키텍처는 아니고, 기존의 k7아키텍처의 연장선으로 개량된 것입니다.
k8 아키텍처에서 개선 된 점은 메모리 컨트롤러가 cpu에 통합된 것입니다. 물론 서버용 cpu에서는 이미 채택되어 있는 제품들이 있지만, pc용 프로세서에서는 처음 시도된 것입니다.
그리고 이름에서도 알 수 있듯이 64비트 체제이면서 32비트가 호환 가능한 아키텍처입니다. Intel에서는 32비트 체제에서 바로 64비트 체제로 갈아타려고 하였지만, AMD는 64비트 체제를 먼저 도입면서 32비트도 호환이 가능하게 하였습니다. 이로써 한동안은 64비트 프로세서는 AMD가 유일하였기때문에 어느정도 우위를 점할 수 있었습니다.
또한 CPU 클럭을 알아서 조절해서 쓸데없는 전력과 발열량을 줄이는 Cool’n’Quiet 이나 보안 기능을 가진 NX bit 기술들이 사용됬습니다. 이로써 기존의 많은 전력 소모와 발열량의 오명은 씻어졌습니다.
클라우해머(ClawHammer)
초기 130nm 공정으로 제조된 모델로 펜티엄4와 경쟁관계인 모델입니다.
소켓 939 및 754 두가지로 출시 되었고 클럭은 2.0Ghz~2.6Ghz, 1MB의 L2캐쉬를 가졌습니다.
뉴캐슬(Newcastle)
클라우해머의 보급형입니다.
1MB의 L2캐쉬를 512Kb로 줄이고 클럭도 1.8Ghz~2.4Ghz로 낮췄습니다.
낮은 가격에 비해 안정적인 성능으로 인해 많이 팔렸습니다.
윈체스터(Winchester)
90nm공정으로 제작된 애슬론 64모델입니다. 소켓 939로만 출시되었습니다.
한창 Intel이 클럭만 높이기 위해 삽질하는 동안 부지런히 AMD의 주가를 올렸던 모델입니다.
베니스(Venice) 윈체스터의 결점을 보안해서 나온 모델입니다. SSE3가 추가됨으로써 인코딩 속도가 많이 빨라져 intel와 비슷한 수준까지 끌어올렸습니다. (하지만 아직까지는 Intel이 조금 더 우위에 있었습니다.)
리마(Lima) 65nm 공정으로 2007년에 등장한 프로세서입니다. 하지만 이미 대세는 듀얼 코어여서 그리 주목 받지는 못하였습니다. 하지만 높은 클럭(2.8~2.8Ghz)와 소켓 AM2, 낮은가격으로 인해 어느정도 수요는 있었습니다.
애슬론64의 고급형 모델들입니다.
AMD는 싸면서 성능이 좋은 제품들을 내놓기 위한 전략으로 Intel과 경쟁해왔지만, 애슬론64FX를 출시함으로써 성능은 뛰어나지만 비싼 고급형 제품 시장에도 진출하기 시작하였습니다.
Intel이 새로운 아키텍처로 변환되는 시점을 노리고 잠시 반짝 하였지만, Intel의 코어 마이크로프로세서가 나온 이후로는 다시 예전처럼 저렴하지만 성능은 좋은 제품을 내는 전략으로 돌아서게 됩니다.
슬레그해머(Sledgehammer)
최초의 애슬론 64FX 모델입니다. 소켓 940에 1MB L2 캐쉬를 가지고 있었습니다.
FX51(2.2GHz), Fx53(2.4Ghz) 2가지 제품으로 출시되었습니다.
클라우해머(Clawhammer)
90nm공정의 애슬론 64FX 모델입니다.
Fx60(2.6Ghz)모델 하나만 출시되었습니다.
산디에고(San Doego)
클라우해머에서 클럭만 높인 모델들입니다.
Fx55(2.6Ghz), Fx57(2.8Ghz) 두가지 모델이 출시되었습니다.
AMD의 듀얼 코어 제품들입니다.
이미 단순히 클럭수만 높이는 것은 한계가 있다고 느끼기 시작한 시점이였는데 이에 대한 돌파구로써 멀티 코어 시스템에 눈을 돌리기 시작한 시점입니다.
Intel의 펜티엄D가 완벽한 멀티 코어 시스템이 아니였기 떄문에 AMD가 발열 및 성능면에서 우위를 점할 수 있었습니다. 하지만 앞에서도 말했듯이 인텔의 코어 마이크로 아키텍처가 나오면서 다시 비슷한 위치가 됩니다.
멘체스터(Manchester)
2005년 8월에 등장한 모델로써 90nm 공정으로 출시되었습니다.
초기에 나왔을때는 매우 고가였지만 Intel의 펜티엄D가 출시되면서 가격을 떨어뜨리면서 보급형처럼 사용되었습니다.
윈다우저(Windsor)
2006년 5월에 등장한 모델로써 이전의 모델들에 비해 높은 클럭으로 동작하였습니다.
그외 다른 특징으로는 소켓 AM2를 사용한것입니다.
멘체스터와 같이 많이 사용된 듀얼 코어 모델입니다.
브리즈번(Brisbane)
65nm공정으로 출시되었습니다.
이 모델은 가격대 성능비가 매우 우수한 모델로 평가받고 있습니다.
왜냐하면 인텔의 코어2와 맞서기 위해 가격을 매우 저렴하게 출시했기때문입니다.
처음으로 k10 아키텍처가 적용된 모델입니다.
k10 아키텍처는 Intel의 코어 아키텍처에 대항하기 위해 개발되기 시작하되었습니다.
가상화기술, 보안 기술등이 추가되고 서버용 cpu에 쓰이던 L3 캐시를 내장하고 하이퍼트랜스포트 3.0으로 메모리와 통신하여 병목현상을 크게 줄였습니다. 또한 부동소수점 연산과 SSE 유닛이 128bit로 확장되어 SSE 명령 처리 능력도 향상되었습니다.
하지만 이 프로세서는 TLB라는 치명적인 버그(가상화 같은 특수한 환경에서 셧다운 되는 현상)가 있었습니다. 이 버그는 성능을 5~20% 저하시켰습니다. 이를 해결하긴 했지만 이미 그때는 Intel의 코어2프로세서가 시장을 장악한뒤여서 AMD에게는 큰 타격이 되었습니다.
바르셀로나의 실패를 수복하고자 새로운 브랜드명으로 출시하기 시작한것이 패넘입니다.
아제나(Agena)
패넘 브랜드로 출시된 최초의 모델입니다.
65nm 공정으로 제조된 데스크탑용 쿼드 코어 프로세서로써 각 코어당 128kb L1캐쉬와 512kb L2 캐쉬를 가졌으며 네개의 코어가 2MB의 L3 캐쉬를 공유하는 시스템을 가지고 있습니다.
진정한 최초의 데스크탑용 쿼드 코어 프로세서였지만, 코어만 4개 올려놓은 Intel의 켄츠필드와 요크필드 코어 2 프로세서에게 밀렸습니다.
톨리만(Toliman)
65nm 공정으로 제조된 트리플 코어 프로세서입니다.
코어가 트리플이라는 점빼고는 아제나와 유사합니다.
패넘보다 전력 소모와 방령에서 개선한 모델로써 k10.5 아키텍처가 적용된 모델들을 명명한 브랜드입니다.
45nm 공정으로 제조되었고, 4MiB~6MiB의 L3 캐시가 특징이고 클럭당 성능을 Intel의 켄츠필드 수준으로 끌어 올렸습니다.
데네브(Deneb)
최초의 패넘2프로세서로써 쿼드코어프로세서입니다.
L3캐쉬가 6MiB인 점을 제외하면 아제나와 비슷합니다.
헤카(Heka), 칼리스토(Callisto)
코어수가 다른 점(헤카(트리플코어), 칼리스토(듀얼코어))을 빼고는 데네브와 거의 비슷합니다.
sb710이나 sb750을 사용한 특정한 몇 개의 메인보드에서 ACC(Advanced Clock Calibration)기능을 사용하면 쿼드 코어 프로세서로 작동하여 ‘헤네브(헤카+데네브)’, ‘칼네브(칼리스토+데네브)’로 불리기도 합니다.
K10 아키텍처가 적용되었지만 L3캐시가 없는 보급형 모델들을 명명한 브랜드입니다.
패넘2의 배타적 L3캐쉬를 없애고 코어당 512KB였던 L2 캐쉬를 1MB로 늘렸습니다.
또한 네이티브 듀얼 코어 설계되어 패넘과 달리 쿼드 코어에서 두 개의 코어를 끄지 않아 더 낮은 TDP를 갖습니다.
(TDP : Thermal Design Power, 컴퓨터 속의 열이 빠져나오는데 필요한 시스템 냉각의 최대 전력)
레고르(Regor)
듀얼 코어 프로세서입니다.
보급형으로 나온 제품이기때문에 가격이 저렴합니다.
라나(Rana) 트리플 코어 프로세서로써 L2 캐쉬가 레고르의 반인 512KB입니다. 그외는 거의 유사합니다
프로푸스(Probus) 쿼드 코어 프로세서라는 점 말고는 라나와 거의 유사합니다.
: 코어2쿼드 제품들의 코드명
초기형 코어2듀오 및 코어2쿼드를 지칭하며, 넷버스트 마이크로아키텍쳐(Netburst Microarchitecture)를 사용한 기존의 펜티엄4나 펜티엄D 보다 낮은 클럭 에서도 더 우수한 처리 효율을 가짐과 동시에, 멀티 코어 작업에 최적의 성능을 발휘하는 코어 마이크로아키텍처(Core Microarchitecture)를 탑재해 전력 소모와 발열을 낮추고 성능은 높인 것이 특징이다.
코어2듀오 콘로(Conroe) 2006년 7월에 처음 등장한 최초의 코어2듀오 시리즈로서, 코어2듀오 E6000 시리즈가 이에 속하는 제품들이다. 발표 당시 기존 제품들에 비해 월등히 높은 성능을 발휘해 화제가 되었다.
코어2듀오 엘런데일 (Allendale) 2007년 1월에 처음 선보였다. 콘로의 보급형에 해당하는 제품으로서, FSB(Front Side Bus : PC 내부에서 데이터를 운반하는 통로) 수치를 800MHz로 낮추고 L2캐시(CPU 내부의 임시 저장공간)를 2MB로 고정하여 가격을 낮춘 코어2듀오 제품이다. E4000 시리즈가 이에 속한다.
코어2쿼드 켄츠필드 (Kentsfield) 2007년 1월에 처음 발표된 켄츠필드는 최초의 코어2쿼드 제품이다. 코어 자체는 콘로와 같은 공정으로 만들어졌지만 콘로가 2개의 코어를 가진 것과 달리 켄츠필드는 총 4개의 코어를 가진 쿼드 코어 CPU 제품이다. Q6000 시리즈가 이에 속한다.
반도체를 제조할 때, 그 공정이 세밀해지면 보다 낮은 전력으로 높은 성능을 낼 수 있고, 온도상승도 막을 수 있다. 콘로 계열의 코어2 시리즈는 65nm(나노미터 : 10억 분의 1미터) 공정으로 제조된 것에 비해, 후속 모델인 펜린(Penryn) 계열의 코어2 시리즈 제품들은 이보다도 더 정교한 45nm 공정으로 만들어져 있다. 펜린은 콘로와 같은 코어 마이크로아키텍쳐로 작동하지만, 보다 세밀해진 제조공정 덕분에 동급의 구형 제품에 비해 성능은 20% 이상 높아지고 전력 소모는 30% 가량 낮아졌다.
코어2듀오 울프데일 (Wolfdale)
펜린 코어로 제조된 코어2듀오 CPU로서, 2008년 1월에 처음 선보였다.
기존의 코어2듀오에 비해 소모전력은 낮아졌지만, FSB가 높아지고 2차 캐시의 용량도 커져 한층 제품의 완성도를 높였다. 고급형 제품인 E8000 시리즈와 보급형 제품인 E7000 시리즈로 나뉘어진다.
코어2쿼드 요크필드 (Yorkfield)
켄츠필드에 이은 2세대 코어2쿼드 제품으로서, 2008년 3월에 처음 선보였다.
펜린 계열 코어를 사용해 성능이 향상되었을 뿐만 아니라, 켄츠필드 보다 다양한 제품 라인업을 선보여 쿼드 코어 CPU의 대중화에 크게 기여했다. 보급형 코어2쿼드 Q8000 시리즈와 고급형 코어2쿼드 Q9000 시리즈로 나뉜다.
: 데스크탑용 코어 i7 제품들의 코드명
네할렘 마이크로 아키텍처(Nehalem Microarchitecture)는 코어2 시리즈의 후속 모델인 인텔 코어 i7 프로세서에 처음 탑재된 새로운 아키텍처의 이름이다. QPI(QuickPath Interconnect)라는 새로운 버스(Bus : 데이터가 전달되는 통로)를 채용하여 기존의 코어2 시리즈에 비해 4배 가까이 고속으로 데이터를 주고 받을 수 있게 되었다.
또한, 물리적으로 하나인 CPU 코어를 논리적으로 둘로 나누어 마치 CPU 코어의 수가 2배로 늘어난 것과 같은 효과를 볼 수 있는 ‘하이퍼쓰레딩(Hyper-Threading)’ 기술을 갖춰, 코어 i7은 쿼드 코어 제품인데도 불구하고 운영체제에서는 이를 총 8개의 코어를 가진 CPU로 인식한다.
이 외에도 CPU가 시스템 메모리를 직접 제어할 수 있는 ‘메모리 컨트롤러’와 작업 종류에 따라 CPU의 클럭(동작속도)를 자동으로 조절해 성능은 높이고 전력은 아끼는 ‘터보 부스트(Turbo Boost)’ 기술, 그리고 기존의 2차 캐시를 보조하는 3차 캐시 등의 신기술들을 탑재해 기존의 콘로나 펜린 계열의 CPU보다 한층 높은 성능을 실현했다.
(i7/i5/i3 은 순서대로 하이엔드급/메인스트림 및 퍼포먼스급/저가 및 보급형 을 나타낸다.)
코어 i7 볼룸필드(Bloomfield) 2008년 11월부터 발매되기 시작한 인텔의 신형 쿼드 코어 CPU 제품으로서, 네할렘 아키텍처를 채용한 최초의 제품이다. 기존의 코어2 시리즈 CPU제품들은 ‘LGA 775’ 규격의 메인보드 소켓에 꽂아 사용했지만 코어 i7은 이보다 사양을 높인 ‘LGA 1366’ 규격의 메인보드 소켓을 사용한다. QPI, 하이퍼쓰레딩, 메모리 컨트롤러, 터보 부스트 등, 네할렘 아키텍처의 장점들을 빠짐 없이 모두 갖추고 있다. 코어 i7 900 시리즈가 에에 속한다.
코어 i7/i5린필드(Lynnfield)
란필드는 네할렘 아키텍처의 보급형이라고 할 수 있다.
볼룸 필드와 동일하게 4코어와 8스레드를 갖고 있으며 8mb의 L3 캐쉬를 갖고 있다.
결국 소켓크기가 ‘LGA 1160’이라는 점과 듀얼채널의 DDR3 SDRAM 컨트롤러를 사용한다는 점 빼고는 내부 스펙은 거의 같다.
코어 i5 클락데일(Clarkdale)
32nm 공정이 적용된 최초의 네할렘 제품이다.
현재 나온것은 i5밖에 없지만 추후에 i7, i3 모두 제공할 예정이다.
소켓크기는 린필드와 같은 ‘LGA 1160’이고 4MB의 L3캐쉬를 가지고 있다.
코어 헤븐데일
최초로 GPU가 통합된 프로세서이다.
보다 더 다운 그레이드된 버전으로 2개의 코어와 4개의 스레드를 갖게 되며 4MB의 L3캐시를 사용하고 소켓 크기는 ‘LGA 1160’이다.
C의 표준 입출력 함수인 printf()에서 Segmentationg fault 발생 시 유의 할 사항에 대해 정리하고자 합니다.
#include <stdio.h>
char *array[3] = {"aaaa", "bbbb", "ccccc");
int main()
{
printf("%s\n", array[3]);
return 0;
}
위에 코드를 컴파일하면 아무런 문제 없이 컴파일 된다. 하지만 코드를 자세히 보면 문제가 있다는것을 바로 알 수 있습니다.
배열의 크기는 3인데. array[3]의 값을 출력하려고 하니 세그먼트 폴트가 일어날 것입니다.
실행 결과
Segmentation fault
여기까지는 아무런 문제가 없습니다.
하지만 위 코드를 조금만 수정해주면 예상과는 다른 결과가 발생합니다.
#include <stdio.h>
char *array[3] = {"aaaa", "bbbb", "ccccc");
int main()
{
printf("%s\n ", array[3]);
return 0;
}
이렇게 코드를 변경해서 컴피일하여 수행하면
$(null)
이렇게 출력이 됩니다.
(우분투 9.04에서 GCC 4.3.3 버전으로 테스트 했을 경우입니다)
달라진 점이 먼지 바로 찾으신 분도 있을지도 모르겠지만.. 저같은 경우는 며칠을 고민했습니다.
바로 printf(“%s\n “)에 \n다음에 공백 하나가 들어가 있습니다.
왜 이런 결과가 나올까 해서 조금씩 수정해보면서 테스트를 해보았습니다. 전 아는게 없어서 이런식으로 일일히 테스트해가면서 문제점을 해결합니다 ㅜㅜ
먼저 공백을 다른 곳에 줘봤습니다.
printf(" %s\n");
결과는
$ (null)
공백을 뒤에 주나 앞에 주나 같은 결과가 나오네요.
그다음엔 \n을 빼고 해보았습니다.
printf("%s")
printf(" %s")
printf"%s ")
결과는 각각
$(null)
$ (null)
$(null)
잘 출력이 되네요….
그다음 의심한 부분은 배열 선언했을때 문제가 생기지 않았을까 하는 것이였습니다.
대체 array[3]에 어떤 값이 들어 있길래 저렇게 출력이 되는가 싶어서 GDB로 확인해봤습니다.
(gdb) p &array[2]
&9 = (char **) 0x804a01c
(gdb) p &array[3]
&10 = (char **) 0x804a020
(gdb) p array[3]
$11 = 0x0
응?? 머지… 실제로 문자열이 저장되어 있는 부분은 조금 다르긴 하지만…
어찌됬든 array[3]에는 “\0”값이 들어가 있긴 하네요.
그럼 이제 의심이 되는 부분은… 왜 문자열이 다르게 저장되는가.. 그건 아마도 컴파일러가 먼가 최적화 한다고 깨작되서 그런게 아닐까..
해서 main()를 disassemble 해봤습니다.
printf("%s\n") 하였을 때
0x080483da <main+22>: mov %eax, 0x4(%esp)
0x080483da <main+26>: movl %0x80484d0, (%esp)
0x080483da <main+33>: call %0x80482f8 printf@plt
0x080483da <main+38>: mov %0x0, %eax
0x080483da <main+43>: add %0x14, %esp
0x080483da <main+46>: pop %ecx
printf(“%s\n “) 하였을 때
0x080483da <main+22>: mov %eax, (%esp)
0x080483da <main+25>: movl %0x80484d0, (%esp)
0x080483da <main+30>: call %0x80482ff puts@plt
0x080483da <main+35>: mov %0x0, %eax
0x080483da <main+38>: add %0x4, %esp
보시면 실제로 출력하기 위한 함수를 부르는 부분이 다르다는 것을 알 수 있습니다.
printf()와 puts()의 차이점….은 %s가 포함되어 있는가 아닌가의 차이정도라고 할 수 있는데 컴파일러가 인자로 %S\n만 들어오는 경우
puts(“%s”)와 printf(“%s\n”)는 같은 결과를 나타내기 때문에 자동으로 변환 시켜주는것 같습니다
내부적으로 printf와 puts의 함수를 자세히 보면 좀 더 확실하게 알 수 있겟지만…
참고로 비주얼 스튜디오에서 테스트한 결과도 같았습니다 :)
실제 권한을 가지고 있는 계정이 아닌 ftp에 접속할 때만 사용되는 가상의 계정을 사용하여 ftp를 좀 더 안전하게 운영하는 방법이 있어서 해보았는데, 일주일동안 삽질을 하다가 어떨결에 성공하긴 했는데…이에 대해서 정리를 하고자 합니다.
http://www.superuser.co.kr/linux/rootman/vsftp/vsftp_virtualuser.html <–를 참고하였습니다.
가상으로 ftp에 접속할 아이디와 패스워드 텍스트 파일 생성 첫재줄은 유저아이디, 그다음줄은 그 위의 아이디에 대한 비밀번호, 그 다음줄은 아이디, 그 다음줄은 그 윗줄의 아이디에 대한 비밀번호……… 이런식으로 된 텍스트 파일 입니다
$cat virtual_user.txt
gaga
1234
ggaa
1122
만들어진 아이디와 패스워드 파일을 DB 파일로 변환하여 /etc 밑에 저장합니다.
(만약 db4-utils가 설치되어 있지 않다면 DB파일로 변환하기 위해 db4-utils 를 설치합니다.
현재 제가 설치한 버전은 db4.6-util 이였습니다.)
$apt-get install db4.6-util
$db4.6_load -T -t hash -f virtual_user.txt /etc/vsftpd_login.db
이제 저희가 만든 db파일로 pam 인증을 하기 위해 pam파일을 생성해 주어야 합니다.
(만약 pam이 정식으로 포함되어 있지 않는 배포판이라면 따로 설치해 주셔야 합니다.
http://link.allblog.net/11479312/http://jinsnet.com/13 참고)
vi편짐기로 /etc/pam.d/vsftpd를 열어 pam파일을 설정합니다.
$vi /etc/pam.d/vsftpd
(만약 /etc/pam.d/vsftpd에 이미 다른 내용들이 들어있다면 모두 주석처리를 합니다)
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
/lib/security/pam_userdb.so db=/etc/vsftpd_login
pam_userdb.so모듈에 대한 DB파일의 경로를 지정
가상유저를 연결할 실제 계정과 디렉토리를 생성합니다.
가상유저를 말그대로 실제로는 존재하지 않는 계정이기때문에 시스템에 어떠한 영향을 끼칠수 없습니다.
그러면 실제로 파일을 생성하거나 삭제하거나 같은 작업을 할 수 없습니다. 그렇기 때문에 실제 계정을 하나 만들어 그 계정에 가상 유저들을 연결 시킴으로써 하나의 실제 계정으로 여러개의 가상 계정들을 관리할 수 있습니다.
여기서는 실제 계정으로 virtual 이라는 계정을 생성하고 해당 계정이 사용할 디렉토리를 생성하였습니다.
$mkdir /home/virtual
$useradd -d /home/virtual virtual
홈디렉토리로써의 역활을 하기 위해 hosts 파일을 복사합니다.
$cp /etc/hosts /home/virtual/hosts
가상유저들이 사용할 디렉토리들을 생성합니다.
가상유저들마다 독립적인 디렉토리를 가지게 하기 위해서 가상 유저들이 사용할 디렉토리들을 만들겠습니다.
$mkdir /home/virtual/gaga
$mkdir /home/virtual/ggaa
그리고 가상 유저들을 관리하는 실제 계정이 virtual 임으로 그룹과 소유 권한을 virtual로 지정해주겠습니다.
$chown virtual.virtual /home/virtual/gaga
$chown virtual.virtual /home/virtual/ggaa
이제 가상유저로 접속하기위 vsftp설정 파일을 수정합니다.
$vi /etc/vsftpd.conf
#익명 접속을 막기위해, 익명 접속을 허용하려면 YES,
anonymous_enable=NO
#가상유저 계정도 실제계정을 통해 접속하므로 YES
local_enable=YES
#파일 쓰기 권한 허용, 허용하지 않으려면 NO
write_enable=YES
#업로드된 파일의 기본 권한 설정
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
#가상유저들이 자신의 홈디렉토리보다 상위로 올라가지 못하게 하기 위해
chroot_local_user=YES
#가상FTP는 Standalone 모드에서만 작동하기 때문에 listen을 YES로 설정
listen=YES
#접속할 포트 번호를 설정, 1004번으로 설정하였다
listen_port=1004
#가상유저를 사용할 것인지를 설정.
guest_enable=YES
#가상유저와 연결할 실제계정을 설정
guest_username=virtual
#가상유저로 인증할 pam 서비스 이름을 설정, 위에서 pam.d 디렉토리에 저장한 pam 파일 이름을 적어주면 됩니다.
pam_service_name=vsftpd
#가상유저들이 실제 시스템 유저의 권한을 주기 위한 설정
virtual_use_local_privs=YES
#가상유저들의 홈 디렉토리를 설정해주는 부분입니다.
user_sub_token=$USER
local_root=/home/virtual/$USER
(원래 있던 부분은 주석을 제거하시고 수정을 하시고, 없으신 내용만 추가하세요)
이로써 모든 설정을 끝났습니다. vsftpd를 재시작 해주면 끝.
$/etc/init.d/vsftpd restart