이니셜 뒤에 공지 사항 에 따르면 멤캐시드 서버가 이제 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와 같은 유틸리티가 필요합니다. 예를 들어 우분투에서는 패키지가 다음과 같이 설치됩니다:
잊지 마세요, 멤캐시드의 일반적인 요구 사항: 사용 중인 운영체제에 따라 패키지를 적절히 검색하기만 하면 됩니다.
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
이제 컴파일하고 설치합니다:
./configure -enable-sasl
테스트 만들기
sudo make 설치
다음으로 데이터베이스와 멤캐시 애플리케이션 구성 파일을 설정합니다. 시스템 전체 또는 특정 사용자에 대해 두 가지 방법으로 설정할 수 있습니다.
시스템 전체 데이터베이스 파일:
시스템 전체 설정의 경우, 사용자 및 비밀번호 정보가 포함된 데이터베이스 파일을 가리키도록 memcached.conf 파일을 설정해야 합니다. /usr/lib/sasl2/memcached.conf를 사용하여 애플리케이션별로 이름을 지정합니다. 예를 들면 다음과 같습니다:
참고: 우분투에서는 이 데이터베이스 파일이 이미 존재합니다. 새로 만들어야 하는 경우 다음 명령을 실행하기 전에 sasl 데이터베이스의 위치로 지정한 디렉터리가 존재하는지 확인하세요) 데이터베이스 파일에 사용자를 추가하려면 다음과 같이 하세요:
보시다시피 -a 는 이전 단계 'memcached.conf'에서 conf 파일에 지정한 이름과 일치해야 하는 애플리케이션인 'memcached'를 지정합니다. 이 saslpasswd2 명령을 실행하면 아래와 같이 비밀번호와 비밀번호 확인을 요청하는 메시지가 표시됩니다:
이제 생성한 사용자가 존재하는지 확인할 수 있습니다. 확인하려면 실행합니다:
-또는-
다음과 같은 출력이 표시됩니다:
사용자별 데이터베이스 파일:
가장 먼저 확인해야 할 것은 매우 중요한 환경 변수를 설정하는 것입니다, SASL_CONF_PATH 로 설정합니다. 이 예제에서는 이 경로가 다음과 같이 설정됩니다. /home/patg/sasl.
지정한 디렉터리 경로를 만들어야 합니다! 다음으로 memcached.conf 파일을 설정합니다(애플리케이션별로 이름 지정). 이 예시의 내용은 다음과 같습니다:
다음으로 이전 단계에서 방금 지정한 데이터베이스 파일을 memcached.conf 파일에 생성해야 합니다.
플래그는 애플리케이션의 이름을 지정합니다. 멤캐시드를 입력하며, 이 이름은 위의 이전 예제에서 지정한 구성 파일의 이름과 일치해야 합니다, memcached.conf. 또한 이 예제에서는 -f 플래그를 사용하여 데이터베이스 파일을 지정해야 하므로 시스템 전체 예제와 다르다는 점에 유의하세요. saslpasswd2를 실행하면 아래 예와 같이 비밀번호 및 비밀번호 확인을 입력하라는 메시지가 표시됩니다:
이제 sasldblistusers2를 실행하여 실제로 사용자를 추가했는지 확인합니다. saslpasswd2와 마찬가지로 데이터베이스 파일을 지정해야 합니다:
SASL 지원 멤캐시드 실행
시스템 전체 데이터베이스 파일 또는 사용자 수준 데이터베이스 파일을 사용하는 경우 적절한 플래그를 사용하여 memcached를 시작해야 합니다. SASL이 활성화된 상태에서 memcached가 실행되면 바이너리 프로토콜이 사용되며 텍스트 프로토콜은 꺼집니다. 이 예에서는 사용자 수준 데이터베이스 파일이 사용됩니다. 사용자 'patg'로서 다음을 수행했습니다:
이제 memcached를 사용하려면 이 글에서 발표한 대로 활성화된 클라이언트가 필요하며, 현재 spymemcached(Java) 및 libmemcached가 지원됩니다. (적어도 저에게는!) 간단하게 하기 위해 memcached와 함께 제공되는 테스트 중 하나인 binary-sasl.t를 해킹하여 patg.t로 이름을 변경했습니다(Cache::Memcached에 지원을 추가해야 한다는 것을 상기시켜 줍니다!) 또한 테스트 스위트 코드에서 기존에 실행 중인 memcached 서버를 사용한다고 명시하는 환경 변수도 내보내야 했습니다:
그런 다음 테스트를 실행했습니다:
흥미롭고 주목할 만한 것은 list_mechs 테스트입니다. 이 테스트는 서버에 구성된 인증 메커니즘을 나열합니다. 여기서 흥미로운 점은 -vvv로 테스트를 시작했기 때문에 실행 중인 서버가 인증하는 것을 볼 수 있다는 것입니다. 인증에 실패했습니다:
PLAIN"을 23바이트의 데이터asl 결과 코드와 함께 보냅니다: -13알 수 없는 sasl 응답: -13>30 오류 기록 중입니다: 인증 실패.인증에 성공했습니다:
PLAIN"을 16바이트의 데이터 결과 코드와 함께 입력합니다: 0인증을 사용하여 GET에 성공했습니다:
서버가 작동합니다! 이제 libmemcached를 사용하여 SASL memcached를 사용해 보겠습니다.
Libmemcached 설치
트론드의 새로운 기능이 포함된 libmemcached를 설치하려면 먼저 런치패드에서 트리를 복제해야 합니다. 이를 위해서는 바자 리비전 제어 시스템이 필요합니다. 우분투의 경우 그렇습니다:
다음으로 트리를 복제합니다:
이렇게 하면 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;}
다음 명령으로 컴파일합니다:
그러면 테스트를 실행할 수 있습니다!
SASL이 활성화된 멤캐시드 서버를 관찰하면 인증이 작동하는 것을 확인할 수 있습니다. 연결:
인증:
설정, 인증됨:
가져오기, 인증:
그리고 작동합니다! 이제 다른 libmemcached 기반 프로그램도 그에 맞게 수정할 수 있습니다. 물론 스파이멤캐시를 사용할 수도 있습니다.
요약
이 포스팅을 통해 SASL이 무엇이고 어떻게 memcached와 함께 사용할 수 있는지 더 잘 이해하게 되었을 것입니다. 이제 멤캐시드 서버와 클라이언트를 모두 구하고, 컴파일하고, 설치하고, SASL이 활성화된 libmemcached를 사용할 수 있을 뿐만 아니라 libmemcached를 사용하는 멤캐시드 애플리케이션을 작성할 수 있어야 합니다. 즐겨보세요!
안녕하세요, Mac에서 SASL 지원 memcached 인스턴스를 설정하는 방법에 대한 단계를 게시해 주시겠습니까? 홈베이를 사용하여 멤캐시 버전 1.4.34를 설치했지만 Spymemcache 자바 클라이언트를 사용하여 인증하면 27 오류를 작성 중이라고 표시됩니다: 인증 실패. 특정 사용자에 대해 구성해야하는 사용자 이름과 비밀번호를 설정하기 위해 실행할 단계별 명령을 게시하여 도와 주시겠습니까? 고마워요!