감사(audit)에서 access control을 하는데 

centos 각 서버의 계정에 대해서 이를 관리하는것이 너무 불편한다.

Kerberos를 도입한다.

도입했던 이력을 아래에 정리한다.

 

목차

  • kerberos server
  • kerberos client
  • macos

Kerberos Server

Install

1. 작업 환경

$ cat /etc/system-release
Amazon Linux release 2 (Karoo)

2. 설치한 패키지 목록

  • krb5 관련
  • ntp
$ sudo yum list installed | grep krb
krb5-devel.x86_64                     1.15.1-19.amzn2.0.3            @amzn2-core
krb5-libs.x86_64                      1.15.1-19.amzn2.0.3            @amzn2-core
krb5-server.x86_64                    1.15.1-19.amzn2.0.3            @amzn2-core
krb5-workstation.x86_64               1.15.1-19.amzn2.0.3            @amzn2-core
pam_krb5.x86_64                       2.4.8-6.amzn2.0.2              @amzn2-core

$ sudo yum list installed | grep ntp
fontpackages-filesystem.noarch        1.44-8.amzn2                   @amzn2-core

참고링크

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/managing_smart_cards/installing-kerberos

https://gist.github.com/ashrithr/4767927948eca70845db

 

설정

1. EC2 인스턴스 2대 생성

- master, slave로 HA 구성했다.

 

2. DNS 설정

Route 53에 2개의 도메인을 추가했다. (abcdef.com은 실제 도메인이름으로 바꿔야함

- kdc.abcdef.com

- kdc2.abcdef.com

 

 

설정파일

 

1. /etc/krb5.conf 설정

- realm에 세팅할 도메인은 '대문자'로 해야한다.

$ cat /etc/krb5.conf
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/

[logging]
 kdc = FILE:/var/log/kerberos/krb5kdc.log
 admin_server = FILE:/var/log/kerberos/kadmin.log
 default = FILE:/var/log/kerberos/krb5lib.log

[libdefaults]
 default_realm = ABCDEF.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 rdns = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 ABCDEF.COM = {
  kdc = kdc.abcdef.com:88
  kdc = kdc2.abcdef.com:88
  admin_server = kdc.abcdef.com:749
  default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha384-192 aes128-cts-hmac-sha256-128 des3-cbc-sha1 arcfour-hmac-md5 camellia256-cts-cmac camellia128-cts-cmac des-cbc-crc des-cbc-md5 des-cbc-md4
  default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha384-192 aes128-cts-hmac-sha256-128 des3-cbc-sha1 arcfour-hmac-md5 camellia256-cts-cmac camellia128-cts-cmac des-cbc-crc des-cbc-md5 des-cbc-md4
  permitted_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha384-192 aes128-cts-hmac-sha256-128 des3-cbc-sha1 arcfour-hmac-md5 camellia256-cts-cmac camellia128-cts-cmac des-cbc-crc des-cbc-md5 des-cbc-md4
 }

[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM   

 

 

2. /var/kerberos/krb5kdc/kdc.conf 설정

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 ABCDEF.COM = {
  kadmind_port = 749
  max_life = 9h 0m 0s
  max_renewable_life = 7d 0h 0m 0s
  master_key_type = des3-hmac-sha1
  supported_enctypes = aes256-cts-hmac-sha1-96:normal aes128-cts-hmac-sha1-96:normal des3-cbc-sha1:normal arcfour-hmac-md5:normal
  database_name = /var/kerberos/krb5kdc/principal
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /var/kerberos/krb5kdc/kadm5.dict
  key_stash_file = /var/kerberos/krb5kdc/.k5.ABCDEF.COM
 }

 

 

3. /var/kerberos/krb5kdc/kadm5.acl 설정

*/admin@ABCDEF.COM  *

 

나머지 세팅

 

1. KDC database 생성

kdb5_util create -r ABCDEF.COM -s

 

 

2. KDC admin 생성

# kadmin.local
kadmin.local:  addprinc account/admin@ABCDEF.COM
     
NOTICE: no policy specified for "admin/admin@ABCDEF.COM";
assigning "default".

Enter password for principal admin/admin@ATHENA.MIT.EDU:  (Enter a password.)
Re-enter password for principal admin/admin@ATHENA.MIT.EDU: (Type it again.)

Principal "admin/admin@ABCDEF.COM" created.
 
kadmin.local:

 

 

3. KDC database 백업 (링크에 복구 방법도 있음)

#!/bin/bash

/usr/sbin/kdb5_util dump /var/kerberos/slave_datatrans


/usr/sbin/kprop -f /var/kerberos/slave_datatrans mgmt-krb-kdc02.abcdef.com > /dev/null
  • 참고로 전달할 도메인 정보는 /etc/hosts에 있다.
% cat /etc/hosts

... 
10.100.125.156     mgmt-krb-kdc02.abcdef.com mgmt-krb-kdc02

 

4. 데몬 설정

systemctl start krb5kdc.service
systemctl start kadmin.service
systemctl enable krb5kdc.service
systemctl enable kadmin.service

 

Kerberos Client

Install

yum --disablerepo=*  --enablerepo=base,update install -y dmidecode krb5-libs

설정

참고로 ec2 1대에 nginx를 두고 스크립트를 불러다가 client로 동작할 서버에 세팅을 한다. 
대략 이런 명령을 이용함
curl -s krb5-client.abcdef.com/seeds/krb-svr-config | /bin/bash

위의 ec2에 flask로 간단하게 구현한 api 서버를 두고 잡다한(계정 추가, 변경, 삭제, ...) 처리를한다.

파일설정

1. /etc/hosts 설정 

  • 필요에 따라서 설정한다.

2. /etc/ssh/sshd_config 설정

  • 필요에 따라서 설정한다.

3. ntp update 수행

ntpdate -u pool.ntp.org

4. kadmin에서 신규 서버 principal 등록, keytab 생성

# addpric
/usr/bin/kadmin -p account/admin -w RkaWkrdldi -q "addprinc -randkey host/dev1-api-all.abcdef.com"

# ktadd
/usr/bin/kadmin -p account/admin -w RkaWkrdldi -q ktadd -k "/home/ec2-user/seeds/keytabs/dev1-api-all.abcdef.com host/dev1-api-all.abcdef.com"

# chmod
chmod og+r /home/ec2-user/seeds/keytabs/dev1-api-all.abcdef.com

5. kdc hosts 파일에 등록

cat /home/ec2-user/seeds/hosts

10.100.56.52      dev1-api-lucky21.abcdef.com       dev1-api-lucky201              
10.100.56.51      dev1-api-lucky11.abcdef.com       dev1-api-lucky101              
10.100.56.50      dev1-api-lucky01.abcdef.com       dev1-api-lucky001              
10.100.56.21      dev1-api-point11.abcdef.com     dev1-api-point101                
10.100.56.22      dev1-api-point12.abcdef.com     dev1-api-point12                 
10.100.56.20      dev1-api-point01.abcdef.com     dev1-api-point001                
10.100.56.23      dev1-api-point21.abcdef.com     dev1-api-point201                
10.100.56.24      dev1-api-point22.abcdef.com     dev1-api-point22                 
10.100.0.162      dev1-proxy-out21.abcdef.com        dev1-proxy-out201             
10.100.0.161      dev1-proxy-out11.abcdef.com        dev1-proxy-out101    

6. 이번엔 4단계에서 생성했던 keytab 파일을 실제 kerberos client에 복사해둔다.

/etc/krb5.keytab

 

addprinc, ktadd 이렇게하고 생성한 keytab 파일을 kerberos client에 옮겨두어야 한다. 

그리고 그와 관련해서 hosts 파일도 갱신해야한다.

이를 좀 편리하게 하기 위해서 ec2에 nginx + gunicorn + flask로 구성한 api 서버를 두고 처리하고 있다.

 

MacOS 사용자 설정

내 pc에서 ssh로 접근할 때 사용할거라서 내거에도 설정해야한다.

 

1. /etc/krb5.conf 설정

[libdefaults]
default_realm = ABCDEF.COM
allow_weak_crypto = false
rdns = false

[realms]
ABCDEF.COM = {
kdc = kdc.abcdef.com
kdc = kdc2.abcdef.com
admin_server = kdc.abcdef.com
kpasswd_server = kdc.abcdef.com
}

 

2.  /etc/ssh/ssh_config 설정

  • 참고로 MacOS update 하고나면 이 설정이 원복 되기도 하므로 update 이후엔 확인 해보아야 한다.
GSSAPIAuthentication yes    => Allow authentication protocol for ssh kerberos support
StrictHostKeyChecking no     

3. MacOS의 터미널에 접속해서 kinit을 한다.

kinit --kdc-hostname=kdc.abcdef.com,kdc2.abcdef.com sfixer@ABCDEF.COM

그리고 나서 제대로 되는지 확인한다.

% ssh sfixer@10.100.125.143
% ssh sfixer@dev1-api-all
...

'기타' 카테고리의 다른 글

TCP 통계수치 변화 (장애 상황)  (0) 2020.07.15
TCP 통계  (0) 2020.07.14
Kerberos Setup (KR)  (0) 2019.08.22
500 Error on Confluence Startup (KR)  (2) 2019.07.29
squid proxy  (0) 2018.12.19
reverse proxy 개념  (0) 2018.12.19

+ Recent posts