Home | 문태준 | 시스템어드민 메일링 | Sys Admin 세미나
Skip to end of metadata
Go to start of metadata
오늘은 LDAP에 대해서 이야기를 해보려고 합니다.
다들 사용자 인증은 어떻게 이용하고 계세요?
매우 유용하지만 국내에서 잘 활용되지 않고 있는 부분중의 하나가 LDAP을 통한 인증 시스템입니다.
그래서 예전 스터디모임을 할 때도 여러번 제가 설명을 했었는데 도시락 싸들고 돌아다니면서 LDAP을 꼭 쓰라고 하고픈 마음입니다.
1. 기존 사용자 인증의 문제점
개별 시스템별로 개별 애플리케이션별로 사용자 정보를 관리합니다. 그래서 제대로 계정 관리도 안되고 패스워드 관리도 안됩니다.
DBMS를 이용하는 경우 replcation 을 별도로 설정해야 하는 문제가 있습니다.

1. LDAP의 장점
LDAP은 표준프로토콜이며 다양한 프로그램 및 장비에서 지원합니다.
그래서 사용자 인증 또는 사용자 정보가 필요한 프로그램에서 손쉽게 연동할 수 있습니다.
replication 이 DBMS에 비해서 상대적으로 쉽습니다. multi master도 지원을 합니다.

1. LDAP을 지원하는 다양한 프로그램
일단 LDAP쪽에 사용자 아이디와 비밀번호 및 기타 정보가 있으면 다양한 프로그램에서 연동을 하여 사용을 할 수 있습니다.
다 양한 프로그램이란 : OS 계정, 각종 이메일 프로그램의 주소록, apache, svn, VPN, 네트워크 장비(네트워크 장비의 경우 RADIUS 같은 것을 통하여 연결되는 것으로 알고 있습니다), 원격접속콘솔(Drac), 메신저, 게시판, DNS서버의 백엔드, /etc/hosts, 기타
사용자 인증이 필요한 프로그램이나 장비의 경우는 거의 대부분 LDAP을 지원합니다. 하다못해 해외에서 개발되는 오픈소스 게시판을 보면 ldap을 지원합니다.

1. LDAP과 리눅스 OS 계정 관리
시스템계정을 어떻게 관리하세요? 아마도 여기 메일링 가입하신 분들은 이 주제가 가장 관심있을 건데요.
- 리눅스 OS를 LDAP과 연동하여 일반 사용자 계정 관리
이 부분은 NIS를 이용하되 사용자 정보는 LDAP을 이용하는 것입니다. 제가 위에 글을 적었던 것도 이 방식이구요.
openldap에서 특정 호스트나 사용자를 지정하여 시스템 접속 계정을 관리할 수 있습니다.
그렇지만 이 방식의 경우는 ldap을 통한 호스트, 사용자별 접근 제한하는 것이 편리하지 않습니다.
또한 LDAP 서버가 죽으면 LDAP에 있는 계정으로는 로그인을 하지 못하는 문제가 있습니다.

- 사용자 정보는 LDAP을 이용하되 각 시스템 계정은 별도로 관리 (각 시스템에 접속하기 위한 게이트웨이 서버 구축시 유용)
이 부분은 별도로 빼서 논의를 할 수도 있는데 일단 적어 보겠습니다.
이 부분은 실제 LDAP과 연관이 된다기 보다는 게이트웨이 서버 구축과 연관된 부분인데요.
사용자 계정은 LDAP에 넣습니다. 그렇지만 보안을 위해서 각 서버에 직접 접속하는 것이 아니라 게이트웨이 서버를 통해서 접속하도록 합니다.
게이트웨이 서버는 jail, chroot 기능을 위해서 보안을 강화를 하구요.
ldap에서 업데이트가 있는 경우 스크립트 등을 통하여 게이트웨이 서버에 해당 계정 정보를 변경합니다.
http://linux.die.net/man/5/slapd-perl 이런 것을 쓰면 ldap 에서 특정 작업이 있을 경우 perl 스크립트를 실행하여 원하는 작업을 할 수 있습니다.
게이트웨이를 제외한 다른 시스템은 모든 사용자 계정이 있을 필요가 없습니다.
그래서 각 시스템은 admin1, admin2, admin3 등으로 사용자 계정을 만들고(puppet 으로 관리) 각 사용자별로 sudo를 통하여 실행할 수 있는 명령을 제한합니다.
각 시스템도 용도별로 또는 접근권한별로 구분을 합니다.
그러면 예를 들어 웹서버 호스트 그룹에 taejoon 이라는 사용자는 admin3 권한을 가진다고 지정합니다.
이 정보도 ldap에 넣을 수 있고 별도 db에 넣고 관리를 합니다.

이 경우 ldap 서버가 문제가 생겨도 사용자는 게이트웨이 서버에 ssh로 접속할 수 있고 각 시스템별로 접근하는 것은 호스트 그룹별, 사용자별로 제어가 가능합니다.

글로벌을 고려하는 경우 ldap replication 을 이용하면 되므로 필요한 경우 ldap slave 역할을 하는 게이트웨이 서버만 계속 추가하면 됩니다.

리눅스에서 NIS기능을 이용하여 처리하려고 하는 경우는 여러가지 면에서 막히는 것이 많은데 지금 방식대로 하면 보안도 강화하고 사용자별로, 호스트그룹별로 좀 더 상세한 접근제어가 가능합니다.

1. OpenLDAP, Active Directory
기존에 이미 AD로 사내 인프라 구축이 된 경우가 많을 것입니다. 일반적인 LDAP 연동이라면 AD를 이용하여 모두 처리할 수 있습니다.
그렇지만 위의 게이트웨이 서버구축의 경우처럼 스키마를 수정하고 부가기능을 사용하려면 AD를 사용하기가 쉽지는 않을 것입니다.
이런 경우는 AD와 다른 LDAP서버와의 동기화를 생각해 볼 수 있을 듯 합니다.
질의가 많지 않으면 openldap 서버의 multi-master, replication 으로도 모두 처리가 가능한데 질의가 많은 경우 openldap 서버는 문제가 생긴다고 합니다.
저는 아직 이런 경우가 없었지만 그 경우에는 다른 오픈소스로 된 ldap 서버 이용하시면 됩니다.

1. 정책
- 모든 사용자 정보는 ldap에 저장한다
- 인증이 필요한 애플리케이션의 경우는 ldap에서 사용자 계정, 비밀번호, 그룹 등의 질의를 한다. 각 애플리케이션에서 개별적으로 사용자 인증 정보를 구축하지 않는다. (단 사용자나 그룹별 상세한 acl 설정 등은 각 app에서 처리해야 함. LDAP 스키마를 확장해서 특정 필드를 추가하여 사용할 수는 있음)
- LDAP 사용여부와 관계없이 전체 시스템의 uid, gid는 통일해서 사용한다. (puppet 같은 툴 이용)

1. 기타
- SSO 솔루션
SSO 솔루션을 이용하면 여러 개의 LDAP 서버(AD이건 openldap이건)를 통합하여 마치 하나의 LDAP서버처럼 사용 가능합니다.
저는 다른 상용 SSO 솔루션을 사용해 보지 않았고 confluence, jira 를 개발하는 atlassian에서 나오는 Crowd SSO를 사용중입니다.
여러 개의 LDAP 서버가 섞여 있는 곳에서는 SSO 기능과 별개로 이 기능이 매우 유용합니다.
인프라 조직과 상관없이 조직 전체적인 차원에서 사용자 인증 통합, SSO 구현은 필요한 부분입니다.
Labels
  • No labels