달력

112017  이전 다음

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  

Redis의 보안관련해서 소개하겠습니다.

http://redis.io/topics/security


위의 문서중에서 rename-command, masterauth/require가 어떻게 동작하는지 알아보겠습니다.


첫째로, rename-command에 대해 알아보겠습니다.

우선 어떤 기능이냐면, 일반적인 client가 특정 명령어를 못하도록 막는 기능을 합니다.

SORT나 FLUSHALL, CONFIG같은 명령어는 일반 client가 실행하게 하면 안되겠죠.


사용법은 간단합니다. redis.conf에   rename-command [org command] [new command]

ex ) rename-command FLUSHALL kakaka

아래는 실행 화면입니다.



populateCommandTable 함수로 redisCommandTable 에 명령어를 dict에 저장합니다.

그 다음에 loadServerConfig 함수가 호출됩니다.

redis.conf에 있는 설정들을 읽는 부분입니다. 수많은 if-else문이 있지요...ㅋㅋ

rename-command을 보면 아래와 같이 소스가 구성되어 있습니다.


populateCommandTable 에서 server.commands에 load한 command의 정보중 key값을 교체합니다.

sort, randomxxx, flush, config같은 명령어 들은 서버 관리자만 실행 할 수 있도록 바꿔놓으면 좋을것 같네요 ; )



두번째로 masterauth/requirepass에 대해 알아보겠습니다.

두 설정 모두 암호를 걸어 인증을 요구하도록 합니다. 차이점이라면 masterauth는 replication

          (master, slave관계에 있을때 사용)    requirepass는 client에 접속에 이용됩니다.

masterauth는 인증하는게 흠....replication 학습할때 알아보고 requirepass는 어떻게 인증하는지 알아보겠습니다.


서버가 기동될때 redis.conf에 설정한 requirepass는 server.requirepass에 저장이 됩니다.

그리고 client에서 auth 명령어로 입력한 암호와 server에 설정되어 있는 암호와 비교를 하는데, time_independent_strcmp로 합니다.

strncmp로 하면 되지 왜 굳이 모든 char를 비교하는지 모르겠네요;; 혹시 아시는 분있으면 알려주세요.: )

저작자 표시 비영리
신고
Posted by 오산돌구
TAG