분류

SASL Memcached가 출시되었습니다!

이니셜 뒤에 공지 사항 에 따르면 멤캐시드 서버가 이제 SASL을 지원한다고 합니다(이는 새로 출시된 1.4.3의 기능입니다). 오늘만) 지난 주에는 특히 클라이언트 영역에서 다른 많은 발전이 있었습니다.

몇 주 전 Dustin은 spymemcached(Java)에 대한 지원을 추가했으며, 이번 주부터 Trond Norbye. libmemcached에 대한 지원 추가를 추가하여 멤캐시를 사용하는 애플리케이션에 대한 멤캐시드 서버의 지원을 활용할 수 있게 되었습니다! 이제 궁금하실 겁니다: "이 새로운 기능을 어떻게 사용할 수 있나요?"라고요? 이 글에서는 이 질문에 답하기를 살펴보고 애플리케이션을 위한 멤캐시드 및 SASL 인증의 메커니즘을 설명합니다.

SASL이란 무엇인가요?

SASL은 단순 인증 및 보안 계층의 약자로, 이 경우 멤캐시된 클라이언트 바이너리 프로토콜과 같은 연결 기반 프로토콜에 인증 지원을 추가할 수 있는 수단을 제공합니다. 이는 특정 사용자를 식별하고 인증하는 기능을 제공하는 클라이언트에 추가되는 함수(API) 호출을 통해 작동합니다. 또한 전체 연결에 걸쳐 보호 기능을 구현할 수 있는 수단을 제공합니다. 사용자가 식별되고 인증되면 시스템은 클라이언트 프로토콜과 연결 사이에 보안 계층을 제공합니다.

멤캐시드에 SASL은 어떻게 구현되나요?

바이너리 프로토콜이 추가되고 SASL이 구현되기 전까지는 멤캐시드에는 인증 계층이 전혀 없었습니다. 모든 클라이언트는 멤캐시에 연결하여 마음대로 모든 작업을 수행할 수 있었습니다. 네트워크가 잠겨 있는지, 애플리케이션이 안전하게 설계되었는지 확인하는 것은 멤캐시드 사용자(보통 웹 개발자)의 몫이었습니다. 그 후, 멤캐시에 바이너리 프로토콜이 추가되어 보다 효율적이고 간결한 클라이언트-서버 연결이 가능해졌습니다.

SASL을 지원하면서 서버에 기능이 추가되어 클라이언트 연결이 강제로 인증되어야만 완전한 연결을 계속할 수 있게 되었습니다. 물론 이를 위해서는 인증 정보를 전송하는 클라이언트가 필요했습니다. 처음에는 스파이멤캐시드 클라이언트(자바)만 지원되었지만, 소개에서 이미 언급했듯이 이제 libmemcached도 지원됩니다.

기본적으로 SASL은 사용자 자격 증명을 위해 저장소를 사용하며, LDAP 또는 SQL 데이터베이스가 될 수 있습니다. 이 예제에서는 사용자 자격 증명이 멤캐시가 실행될 서버의 데이터베이스 파일에 저장됩니다. 사용자가 연결할 수 있으려면 멤캐시드 서버는 사용자가 자격 증명을 제공하지 않으면 연결을 허용하지 않으며, 해당 자격 증명이 저장된 사용자 자격 증명과 일치해야 합니다. 멤캐시드 구현의 세부 사항에 대한 자세한 내용은 다음에서 확인할 수 있습니다. 여기.

Memcached로 SASL을 설치하려면 어떻게 하나요?

가장 먼저 해야 할 일은 최신 멤캐시드 서버를 구하는 것입니다. 이를 찾을 수 있는 곳 중 하나는 멤캐시드 GitHub입니다. 저장소 또는 memcached.org를 설치해야 합니다(다음 단계에서 설명합니다). 또한 서버에 개발 라이브러리와 같은 몇 가지 전제 조건과 saslpasswd와 같은 유틸리티가 필요합니다. 예를 들어 우분투에서는 패키지가 다음과 같이 설치됩니다:

sudo apt-get -f 설치 libsasl2-2 sasl2-bin libsasl2-2 libsasl2-dev libsasl2-modules

잊지 마세요, 멤캐시드의 일반적인 요구 사항: 사용 중인 운영체제에 따라 패키지를 적절히 검색하기만 하면 됩니다.

SASL Memcached는 어떻게 설정하나요?

이제 SASL 멤캐시를 얻어야 합니다. 이 코드는 이제 다음에서 공식적으로 릴리스됩니다. memcached.org wget https://memcached.googlecode.com/files/memcached-1.4.3.tar.gz tar xvzf memcached-1.4.3.tar.gz 또는 항상 그렇듯이 다음을 통해 사용할 수 있습니다. Github

git clone git://github.com/memcached/memcached.git

이제 컴파일하고 설치합니다:

cd memcached-1.4.3
./configure -enable-sasl
테스트 만들기
sudo make 설치

다음으로 데이터베이스와 멤캐시 애플리케이션 구성 파일을 설정합니다. 시스템 전체 또는 특정 사용자에 대해 두 가지 방법으로 설정할 수 있습니다.

시스템 전체 데이터베이스 파일:

시스템 전체 설정의 경우, 사용자 및 비밀번호 정보가 포함된 데이터베이스 파일을 가리키도록 memcached.conf 파일을 설정해야 합니다. /usr/lib/sasl2/memcached.conf를 사용하여 애플리케이션별로 이름을 지정합니다. 예를 들면 다음과 같습니다:

mech_list: plainlog_level: 5

참고: 우분투에서는 이 데이터베이스 파일이 이미 존재합니다. 새로 만들어야 하는 경우 다음 명령을 실행하기 전에 sasl 데이터베이스의 위치로 지정한 디렉터리가 존재하는지 확인하세요) 데이터베이스 파일에 사용자를 추가하려면 다음과 같이 하세요:

sudo saslpasswd2 -c -a memcached

보시다시피 -a 는 이전 단계 'memcached.conf'에서 conf 파일에 지정한 이름과 일치해야 하는 애플리케이션인 'memcached'를 지정합니다. 이 saslpasswd2 명령을 실행하면 아래와 같이 비밀번호와 비밀번호 확인을 요청하는 메시지가 표시됩니다:

patg@ishvara:~/code-dev/memcached-dustin$ sudo saslpasswd2 -c -a memcached capttofu 비밀번호:다시(확인용):

이제 생성한 사용자가 존재하는지 확인할 수 있습니다. 확인하려면 실행합니다:

sudo sasldblistusers2

-또는-

sudo sasldblistusers2 -f /etc/sasldb2

다음과 같은 출력이 표시됩니다:

patg@ishvara:~/code-dev/memcached-dustin$ sudo sasldblistusers2test1@ishvara: userPassword

사용자별 데이터베이스 파일:

가장 먼저 확인해야 할 것은 매우 중요한 환경 변수를 설정하는 것입니다, SASL_CONF_PATH 로 설정합니다. 이 예제에서는 이 경로가 다음과 같이 설정됩니다. /home/patg/sasl.

내보내기 SASL_CONF_PATH=/home/patg/sasl

지정한 디렉터리 경로를 만들어야 합니다! 다음으로 memcached.conf 파일을 설정합니다(애플리케이션별로 이름 지정). 이 예시의 내용은 다음과 같습니다:

mech_list: plainlog_level: 5sasldb_path: /home/patg/sasl/sasldb2

다음으로 이전 단계에서 방금 지정한 데이터베이스 파일을 memcached.conf 파일에 생성해야 합니다.

sudo saslpasswd2 -c -a memcached -f /home/patg/sasl/sasldb2 캡토푸

플래그는 애플리케이션의 이름을 지정합니다. 멤캐시드를 입력하며, 이 이름은 위의 이전 예제에서 지정한 구성 파일의 이름과 일치해야 합니다, memcached.conf. 또한 이 예제에서는 -f 플래그를 사용하여 데이터베이스 파일을 지정해야 하므로 시스템 전체 예제와 다르다는 점에 유의하세요. saslpasswd2를 실행하면 아래 예와 같이 비밀번호 및 비밀번호 확인을 입력하라는 메시지가 표시됩니다:

patg@ishvara:~$ saslpasswd2 -c -a memcached -f /home/patg/sasl/sasldb2 캡토푸패스워드:다시(확인용):

이제 sasldblistusers2를 실행하여 실제로 사용자를 추가했는지 확인합니다. saslpasswd2와 마찬가지로 데이터베이스 파일을 지정해야 합니다:

patg@ishvara:~$ sasldblistusers2 -f /home/patg/sasl/sasldb2capttofu@ishvara: userPassword

SASL 지원 멤캐시드 실행

시스템 전체 데이터베이스 파일 또는 사용자 수준 데이터베이스 파일을 사용하는 경우 적절한 플래그를 사용하여 memcached를 시작해야 합니다. SASL이 활성화된 상태에서 memcached가 실행되면 바이너리 프로토콜이 사용되며 텍스트 프로토콜은 꺼집니다. 이 예에서는 사용자 수준 데이터베이스 파일이 사용됩니다. 사용자 'patg'로서 다음을 수행했습니다:

내보내기 SASL_CONF_PATH=/home/patg/sasl/usr/local/bin/memcached -S -vvv

이제 memcached를 사용하려면 이 글에서 발표한 대로 활성화된 클라이언트가 필요하며, 현재 spymemcached(Java) 및 libmemcached가 지원됩니다. (적어도 저에게는!) 간단하게 하기 위해 memcached와 함께 제공되는 테스트 중 하나인 binary-sasl.t를 해킹하여 patg.t로 이름을 변경했습니다(Cache::Memcached에 지원을 추가해야 한다는 것을 상기시켜 줍니다!) 또한 테스트 스위트 코드에서 기존에 실행 중인 memcached 서버를 사용한다고 명시하는 환경 변수도 내보내야 했습니다:

내보내기 T_MEMD_USE_DAEMON=localhost:11211

그런 다음 테스트를 실행했습니다:

patg@ishvara:~/code-dev/memcached-dustin$ perl t/patg.t1.20returning handleok 1 - 서버 시작ok 2 - 올바른 버전: 0ok 3 - list_mechs CRAM-MD5 PLAINok 4 - 인증 실패ok 5 - 오류 코드 일치ok 6 - 인증 실패ok 7 - 오류 코드 일치ok 8 - 인증 실패ok 9 - 오류 코드 일치ok 10 - 인증 실패ok 11 - 오류 코드 일치ok 12 - 나쁜 메크ok 13 - 나쁜 인증ok 14 - 인증됨ok 15ok 16 - 일부 값 = 일부 값ok 17ok 18ok 19 - 일부 값 = 일부 값ok 20

흥미롭고 주목할 만한 것은 list_mechs 테스트입니다. 이 테스트는 서버에 구성된 인증 메커니즘을 나열합니다. 여기서 흥미로운 점은 -vvv로 테스트를 시작했기 때문에 실행 중인 서버가 인증하는 것을 볼 수 있다는 것입니다. 인증에 실패했습니다:

<30 0x00 0x00 0x00 0x00 cmd 0x21의 0x00authenticated()가 true30: conn_parse_cmd에서 conn_nreadmech로 이동합니다: PLAIN"을 23바이트의 데이터asl 결과 코드와 함께 보냅니다: -13알 수 없는 sasl 응답: -13>30 오류 기록 중입니다: 인증 실패.

인증에 성공했습니다:

cmd 0x21의 authenticated()가 true30: conn_parse_cmd에서 conn_nreadmech로 이동합니다: PLAIN"을 16바이트의 데이터 결과 코드와 함께 입력합니다: 0

인증을 사용하여 GET에 성공했습니다:

cmd 0x00에서 authenticated()가 true30: conn_parse_cmd에서 conn_nread FOUND KEY xL 0 9somevalueofu>30 빈 응답을 작성합니다:

서버가 작동합니다! 이제 libmemcached를 사용하여 SASL memcached를 사용해 보겠습니다.

Libmemcached 설치

트론드의 새로운 기능이 포함된 libmemcached를 설치하려면 먼저 런치패드에서 트리를 복제해야 합니다. 이를 위해서는 바자 리비전 제어 시스템이 필요합니다. 우분투의 경우 그렇습니다:

apt-get 설치 bzr

다음으로 트리를 복제합니다:

bzr 복제 lp:~trond-norbye/libmemcached/sasl_rfe_462250cd sasl_rfe_462250/sh config/bootstrap./configure # 참고, SASL이 기본적으로 컴파일되므로 -enable-sasl을 사용할 필요 없음make testsudo make 설치하십시오.

이렇게 하면 libmemcached가 설치됩니다. 이제 어떻게 사용할까요? 글쎄요, 이를 활용하려면 프로그램을 작성해야 합니다. 저는 재미를 위해 트론드가 게시물에서 제공한 정보를 사용하는 간단한 C 프로그램을 작성했습니다. 저는 이 프로그램을 sasl_test.c 노스케일 다운로드에서 찾을 수 있습니다. 여기에 포함된 기능의 핵심은 다음과 같습니다. 주요 기능에는 다음과 같은 중요한 내용이 포함되어 있습니다:

/* SASL을 사용하도록 클라이언트 연결을 초기화합니다 */ if (sasl_client_init(NULL) != SASL_OK) { fprintf(stderr, "sasl 라이브러리 초기화에 실패했습니다!n"); return 1; }

memcached_st *memc = memcached_create(NULL); /* sasl 인증에 대한 sasl 콜백 설정 */ memcached_set_sasl_callbacks(memc, sasl_콜백); memcached_server_st *servers = memcached_servers_parse(servers_list); memcached_server_push(memc, 서버); memcached_server_list_free(servers);

/* SASL을 사용하려면 바이너리 프로토콜을 사용해야 합니다 */ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1);

/* 값 설정 */ rc= memcached_set(memc, key, keylen, value, vallen, 0, 0); if (rc == MEMCACHED_SUCCESS) printf("설정 키 %s 값 %sn", key, value); assert(rc == MEMCACHED_SUCCESS);

/* 값 가져오기 */ retval= memcached_get(memc, key, keylen, &retlen, (uint32_t)0, &rc); if (rc == MEMCACHED_SUCCESS) printf("fetched key %s value %sn", key, retval); assert(rc == MEMCACHED_SUCCESS);

/* 연결 해제 */ memcached_free(memc); sasl_done();

그런 다음 Trond의 지침에 따라 (그의 페이지에서 가져온) 콜백을 추가하고 내가 가지고있는 다른 파일에 선언합니다. sasl_test.h

static int get_username(void *context, int id, const char **result, 부호 없는 int *len);static int get_password(sasl_conn_t *conn, void *context, int id, sasl_secret_t **psecret);

static sasl_콜백_t sasl_콜백[] = {{ SASL_CB_USER, &get_username, NULL}, { SASL_CB_AUTHNAME, &get_username, NULL}, { SASL_CB_PASS, &get_password, NULL}, { SASL_CB_LIST_END, NULL, NULL}}입니다;

그런 다음 이를 콜백에 정의했습니다. sasl_test.c (비밀번호는 sasl db 파일에 추가된 내용에 따라 설정됩니다):

정적 문자 *사용자명 = "캡토푸";정적 문자 *패스워드 = "s3kr1t";

static int get_username(void *context, int id, const char **result, unsigned int *len){ if (!result || (id != SASL_CB_USER && id != SASL_CB_AUTHNAME)) { return SASL_BADPARAM; }

*result= username; if (len) { *len= (username == NULL) ? 0 : (부호 없는 int)strlen(username); }

반환 SASL_OK;}

static int get_password(sasl_conn_t *conn, void *context, int id, sasl_secret_t **psecret){ static sasl_secret_t* x;

if (!conn || ! psecret || id != SASL_CB_PASS) { return SASL_BADPARAM; }

if (passwd == NULL) { *psecret = NULL; return SASL_OK; } size_t len = strlen(passwd); x = realloc(x, sizeof(sasl_secret_t) + len); if (!x) { return SASL_NOMEM; }

x->len = len; strcpy((void *)x->data, passwd);

*psecret = x; 반환 SASL_OK;}

다음 명령으로 컴파일합니다:

gcc -g -O0 -I/usr/local/include/libmemcached -lmemcached -lmemcachedutil -o sasl_test sasl_test.c

그러면 테스트를 실행할 수 있습니다!

./sasl_test localhost:11211 테스트 키 테스트 값

SASL이 활성화된 멤캐시드 서버를 관찰하면 인증이 작동하는 것을 확인할 수 있습니다. 연결:

<30 새로운 바이너리 클라이언트 연결.30: conn_new_cmd에서 conn_waiting으로 이동30: conn_waiting에서 conn_read로 이동30: conn_read에서 conn_parse_cmd로 이동합니다.

인증:

<30 바이너리 프로토콜 데이터 읽기:<30 0x80 0x20 0x00 0x00 0x00<30 0x00 0x00 0x00 0x00 0x00<30 0x00 0x00 0x00 0x00<30 0x00 0x00 0x00 0x00<30 0x00 0x00 0x00 0x00<30 0x00 0x00 0x00 0x00<30 0x00 0x20에서 인증된()이 참입니다.

설정, 인증됨:

30: conn_read에서 conn_parse_cmd<30으로 이동 바이너리 프로토콜 데이터 읽기:<30 0x80 0x01 0x00 0x07<30 0x08 0x00 0x00 0x00<30 0x00 0x00 0x00 0x18<30 0x00 0x00 0x00 0x00<30 0x00 0x00 0x00 0x00<30 0x00 0x01의 인증()이 true30입니다: conn_parse_cmd에서 conn_nread FOUND KEY testkey0 0 10test valueofu

가져오기, 인증:

30: conn_read에서 conn_parse_cmd<30으로 이동 바이너리 프로토콜 데이터 읽기:<30 0x80 0x0c 0x00 0x07<30 0x00 0x00 0x00 0x00<30 0x00 0x00 0x00 0x07<30 0x00 0x00 0x00 0x00<30 0x00 0x0c의 인증()이 true30입니다: conn_parse_cmd에서 conn_nread FOUND KEY testkey0 0 9testvaluettofu>30 빈 응답을 작성 중입니다:

그리고 작동합니다! 이제 다른 libmemcached 기반 프로그램도 그에 맞게 수정할 수 있습니다. 물론 스파이멤캐시를 사용할 수도 있습니다.

요약

이 포스팅을 통해 SASL이 무엇이고 어떻게 memcached와 함께 사용할 수 있는지 더 잘 이해하게 되었을 것입니다. 이제 멤캐시드 서버와 클라이언트를 모두 구하고, 컴파일하고, 설치하고, SASL이 활성화된 libmemcached를 사용할 수 있을 뿐만 아니라 libmemcached를 사용하는 멤캐시드 애플리케이션을 작성할 수 있어야 합니다. 즐겨보세요!

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 패트릭 갤브레이스

패트릭 갤브레이스는 카우치베이스의 소프트웨어 엔지니어입니다. 그는 R&D, 프로토타이핑, Linux 및 Windows 제품 빌드 시스템 개발을 담당하고 있습니다.

댓글 하나

  1. 안녕하세요, Mac에서 SASL 지원 memcached 인스턴스를 설정하는 방법에 대한 단계를 게시해 주시겠습니까? 홈베이를 사용하여 멤캐시 버전 1.4.34를 설치했지만 Spymemcache 자바 클라이언트를 사용하여 인증하면 27 오류를 작성 중이라고 표시됩니다: 인증 실패. 특정 사용자에 대해 구성해야하는 사용자 이름과 비밀번호를 설정하기 위해 실행할 단계별 명령을 게시하여 도와 주시겠습니까? 고마워요!

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.