[keycloak] Linux 서버의 SSH(+ sudo) 인증 설정
ruinnel
1238 Words CHANGE ME READ TIME 5 Minutes, 37 Seconds
2019-07-09 15:05 +0000
Keycloak 유저로 ssh 로그인 하기.
- 먼저, RADIUS 서버 설치 및 Keycloak 연동 설정 혹은 TinyRadius로 RADIUS 서버 만들기(feat. netty) 둘중 하나의 방식으로 radius-server를 미리 띄워 두어야 합니다.
Ubuntu Linux
기준으로 설정을 진행합니다.
구성도
graph TD; subgraph Linux CLIENT[시작: ssh/sudo] -->|1. PAM 모듈 호출|PAM(pam_radius_auth.so) PAM-->|6. 인증 완료|CLIENT end subgraph Radius-Server PAM-->|2. RADIUS 요청|RADIUS_SERVER end subgraph Keycloak RADIUS_SERVER-->|3. 권한확인 요청|KEYCLOAK[Keycloak] KEYCLOAK-->|4. 권한확인 응답|RADIUS_SERVER end RADIUS_SERVER-->|5. RADIUS 응답|PAM
pam_radius_auth.so
빌드 하기
- 저는 Mac을 사용하므로 ubuntu docker 이미지를 사용해서 빌드합니다.
- 다운로드 혹은 clone 받은 소스 디렉토리에서 진행 합니다.
- 빌드용 이미지 생성을 위한 Dockerfile
FROM ubuntu
RUN \
apt-get update --force-yes -y && \
apt-get install --yes build-essential libpam0g-dev make
- docker build
$ docker build -t pam_builder .
- docker run
$ docker run -v $(pwd):/pam_radius -w /pam_radius pam_builder ./configure
$ docker run -v $(pwd):/pam_radius -w /pam_radius pam_builder make
- 빌드가 완료되면
pam_radius_auth.so
파일이 생성됩니다.
pam_radius_auth.so
업로드 하기
- 저는 ubuntu 서버에 업로드 후
/opt/pam/pam_radius_auth.so
경로에 위치 시켰습니다.
pam_radius_auth.so
설정하기
/etc/raddb/server
파일 생성 - 소스상의pam_radius_auth.conf
파일 참조.
...
# server[:port] shared_secret timeout (s) source_ip vrf
<radius-server>:<auth-port> <shared_secret> <timeout>
...
sshd
설정
- pam_radius_auth.so 설정 옵션 참고
/etc/pam.d/sshd
설정.@include common-auth
을 남겨두고. pam_radius_auth.so의 pam option을[default=ignore]
로 설정 하면 pam_radius_auth.so를 이용한 인증이 실패 할 경우 기본 linux 사용자 인증 방식으로 인증 가능.client_id
는 RADIUS서버로 전달 될때NAS-Identifier
로 전달되니 여러대의 서버에 설정 할 경우 서버 및 ssh, sudo를 구분 할 수 있는 값을 사용하면 됩니다.(RADIUS 서버 설치 및 Keycloak 연동 설정의 python 모듈에서NAS-Identifier
값으로 분기처리 가능.)
...
# Standard Un*x authentication.
auth [success=done default=ignore] /opt/pam/pam_radius_auth.so client_id=ssh-10.100.13.179 force_prompt prompt_attribute
@include common-auth
...
/etc/ssh/sshd_config
기본 설정.PasswordAuthentication no
설정시 sshd에서 기본으로 출력하는 비밀번호를 묻는 prompt를 노출하지 않습니다.ChallengeResponseAuthentication yes
설정시 PAM 모듈에서 사용자에게 노출 할 prompt 메세지를 핸들링 할 수 있습니다.
...
PasswordAuthentication no
ChallengeResponseAuthentication yes
...
/etc/ssh/sshd_config
추가설정- 특정 사용자(keycloak / radius-server 접속 불가시 사용)를 제외하고 RSA key를 이용한 로그인을 막고 싶은 경우.
- 아래 예시와 같이
AuthorizedKeysFile
를 절대경로로 지정.
AuthorizedKeysFile /home/dorma/.ssh/authorized_keys
2. sudo
설정
/etc/pam.d/sudo
설정.@include common-auth
을 남겨두고. pam_radius_auth.so의 pam option을[default=ignore]
로 설정 하면 pam_radius_auth.so를 이용한 인증이 실패 할 경우 기본 linux 사용자 인증 방식으로 인증 가능.client_id
는 RADIUS서버로 전달 될때NAS-Identifier
로 전달되니 여러대의 서버에 설정 할 경우 서버 및 ssh, sudo를 구분 할 수 있는 값을 사용하면 됩니다.(RADIUS 서버 설치 및 Keycloak 연동 설정의 python 모듈에서NAS-Identifier
값으로 분기처리 가능.)
...
auth [success=done default=ignore] /opt/pam/pam_radius_auth.so client_id=sudo-10.100.13.179 force_prompt prompt_attribute
@include common-auth
...