주제
예전에 레디스 해킹을 당해놓고서 아직도 정신 못 차리고 비밀번호 설정을 귀찮아서 안 해두다가 이번에 제대로 알아두기로 했다.
우선 도커로 레디스 설치부터 암호 설정, 암호로 접속하는 방법까지 다뤄보기로.
레디스 도커 설치
sudo docker run -d \
--name redis-ex \
-p 63790:6379 \
-e REDIS_ARGS="--requirepass 1234" \
redis/redis-stack-server
위는 레디스 스택을 포함하는 redis-stack-server 이미지이고
sudo docker run -d \
--name redis-ex \
-p 63790:6379 \
redis --requirepass 1234
위는 그냥 레디스일 때이다. 각각 비밀번호를 설정하는 방법이 다르다.
--requiredpass 1234는 1234 라고 암호를 지정해주겠다는 명령어이다.
포트도 기본 포트인 6379에 무작위로 요청보내서 비밀번호 안 걸려있는 경우에 기존 키를 싹다 flushall 해서 없앤 뒤 스크립트를 넣어두고 사용하는 식으로 해킹 당한 적이 있기 때문에 항상 0을 하나 더 붙여서 사용하는 편이다.
ACL 설정
sudo docker exec -it redis-ex redis-cli
이제 레디스를 사용하려고 이와 같이 명령어를 입력하면
127.0.0.1:6379> ping
(error) NOAUTH Authentication required.
127.0.0.1:6379> set a b
(error) NOAUTH Authentication required.
이렇게 인증이 필요하다고 에러가 난다.
127.0.0.1:6379> auth 1234
OK
127.0.0.1:6379> ping
PONG
auth <비밀번호> 를 입력하면 인증이 된다.
이후 레디스 6버전 부터는 ACL(Access Control List)로 유저라는 개념이 도입됐다.
이 유저를 통해 실행 가능 커맨드와 접근 가능 키를 제한할 수 있다.
ACL SETUSER yunjae on >1234 ~* allcommands
yunjae 라는 유저의 비밀번호를 1234로 설정하고 (>1234), 모든 키에 대해 접근 가능(~*), 모든 커맨드 허용(allcommands)
acl setuser reader on >abcd ~read-only:* +@all -@set &*
이는 reader 라는 유저의 비밀번호를 abcd로 하고, 키는 read-only: 로 시작하는 키만 접근 가능하며, +@all 은 모든 커맨드 사용 가능하고, -@set 은 set 커맨드는 사용 불가능 하다는 뜻이다. &*는 모든 pub/sub채널에 대해 접근 가능하다는 뜻이다.
유저 상태는 on/off로 제어할 수 있다. on은 접근 허용, off는 유저는 만들어두지만 접근은 막아두겠다는 뜻이다.
아까 위에서 auth 1234 로 인증했는데, 이것은 구버전과의 호환성을 위해 남겨둔 것으로, 이후로는 auth <user> <password>로 접속하며, 기존의 requirepass로 한 경우 default 가 유저가 된다.
auth default 1234
auth reader abcd
이렇게 redis-cli로 접속 후 위와 같이 입력하면 된다.
redis-cli -h yunjae.click -p 6379 -a 1234
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
redis-cli -h yunjae.click -p 6379 --user reader --pass abcd
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
추천하지는 않지만 redis-cli 에서 바로 인증이 가능하긴 하다.
권한 확인
아까 위에서 reader 라는 유저는 read-only: 로 시작하는 키만 접근이 가능하고, set 커맨드는 사용이 불가능 하다고 설정했다. 이를 확인해보면 아래와 같다.
localhost:6379> set a b
(error) NOPERM No permissions to access a key
localhost:6379> get a
(error) NOPERM No permissions to access a key
localhost:6379> get read-only:a
"b"
미리 set read-only:a b 를 해둔 상태이다. 정상적으로 동작하는 것을 볼 수 있다.
참고 링크
'TIL ✍️' 카테고리의 다른 글
24/08/07(수) 94번째 TIL : EurekaServerConfig 빈 중복 해결하기 (0) | 2024.08.07 |
---|---|
24/08/06(화) 93번째 TIL : 도커 볼륨으로 레디스 데이터 공유하기 (3) | 2024.08.06 |
24/08/02(금) 91번째 TIL : EC2 Ubuntu 포트포워딩 (0) | 2024.08.02 |
24/08/01(목) 90번째 TIL : AWS Amazon VPC CIDR 범위 (1) | 2024.08.01 |
24/07/31(수) 89번째 TIL : EC2 Ubuntu 사용자 데이터 스크립트 (2) | 2024.07.31 |