Unix/Debian

Debian AD에 물리기

ForceCore 2009. 3. 5. 04:26

https://help.ubuntu.com/community/ActiveDirectoryHowto : 이 문서가 아주 vital. 우분투용 문서지만 데비안계니까 통한다.

http://awayand.wordpress.com/2009/02/01/integrating-debian-lenny-into-active-directory-w2k3-server/
https://help.ubuntu.com/community/ActiveDirectoryWinbindHowto#Kerberos
https://help.ubuntu.com/community/ActiveDirectoryHowto : 이 문서의 특정 패키지가 결정적. gssapi 이거

어렵진 않은데... 설정이 하나라도 삐끗하면 안된다. ㅡ,.ㅡ
윈도우쪽은, Windows 2003 R2다. 더 최근 AD는, RFC2307을 준수하니까 (2307? 맞나?) 더 잘 될 것이다.

PAM 설정
가장 나중에 해도 되는데 미리 적는다. 왜? 간단하니까.

/etc/pam.d/common-auth:

auth    sufficient      pam_ldap.so
auth    required        pam_unix.so nullok_secure use_first_pass

어려운 건 아니고, 그냥 원래 참고 문서 그대로다.

common-account:

account sufficient      pam_ldap.so
account required        pam_unix.so



Kerberos 설정

# apt-get install heimdal-clients libsasl2-modules-gssapi-heimdal

필자가 참고한 위키에서는, mit kerberos 로 설치했는데... 필자는 heimdal로. 별다른 이유는 없다.
http://awayand.wordpress.com/2009/02/01/integrating-debian-lenny-into-active-directory-w2k3-server/
여기서 본 게 heimdal 계통으로 먼저 갔기 때문.

설치하면 kerberos정보를 묻는데, 이 때 서버 정보로는, prime.sohee.xxx.ac.kr 이런 식으로 대답해야 한다. 그게 안 되고 부정확하게 되면...
/etc/krb5.conf 를 열어서 뜯어고쳐야 한다.

[libdefaults]
        default_realm = SOHEE.XXX.AC.KR

[realms]
        SOHEE.XXX.AC.KR = {
                kdc = sohee.xxx.ac.kr
                admin_server = sohee.xxx.ac.kr
        }

다른 내용은 다 생략했다. 자동으로 생성되어 있는 내용은 빼놓지 않았다.

http://forcecore.tistory.com/notice/828
이 글에서 필자의 서버 구조가 나오는데... 이 그림을 보면 왜 저런 값을 입력했는지 알 수 있을 것이다.

잘 되었으면,

$ kinit [SOHEE의사용자ID]

명령어가 성공해야 한다. AD계정의 administrator같은 계정이 대표적.


nss-ldap 등 관련 패키지 설치

# apt-get install libnss-ldap ldap-utils libpam-ldap
# dpkg-reconfigure libnss-ldap libpam-ldap

libnss-ldap 질문 단계가 몇년 전 자료보다 늘었고, 첫번째 설치시 묻는 질문과 reconfigure때 묻는 질문이 다르다 -_-^ reconfigure기준으로 여기 기록하겠다.

첫번째 질문: LDAP server Uniform Recource Identifier:
ldap://sohee.xxx.ac.kr

두번째: Distinguished name of the search base:
dc=SOHEE,dc=xxx,dc=ac,dc=kr

LDAP version to use: 3

Does the LDAP database require login? : yes (T.T)

Special LDAP privileges for root? : no (유닉스 시스템의 root랑 AD는 아무 상관이 없으니까)

Make the configuration file readable./writable by its owner only? : no
(yes라고 하면, id가 제대로 안 뜨게 됨)
즉... 아무나 읽을 수 있는 파일에 비번이 적히는 것이다. hash할 수 있던가? 중요하지 않고 실제 사용은 못 하도록 처리한 계정으로 bind하도록 하자.

Unprivileged database user:
cn=proxyuser,cn=builtin,dc=sohee,dc=xxx,dc=ac,dc=kr

비번: 입력한다 ㅡ,.ㅡ

nsswitch.conf 는 니가 수정해야 한다고 알려주는 창이 뜬다... ok를 누른다.

libpam-ldap의 경우.

첫번째 질문: LDAP server Uniform Recource Identifier:
ldap://sohee.xxx.ac.kr

두번째: Distinguished name of the search base:
dc=SOHEE,dc=xxx,dc=ac,dc=kr

LDAP version to use: 3

Make local root Database admin : no

Does the LDAP database require login? : yes (T.T)

Unprivileged database user:
cn=proxyuser,cn=builtin,dc=sohee,dc=xxx,dc=ac,dc=kr

비번: 입력한다 ㅡ,.ㅡ

비번을 바꿀때 pam이 행동해야 하는 방식을 묻는데... ad로 선택.

근데 아직 손으로 많이 설정해야 한다.

/etc/nsswitch.conf

passwd:         files ldap
group:          files ldap
shadow:         files ldap

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis




/etc/libnss-ldap.conf
이게 가장 결정적이다.

파일 내에..
debug를 1로 설정해두면 디버깅 정보가 뜬다. 그 상태로

$ getent passwd 유저명


을 계속 해서 정보가 뜰 때 까지 설정을 바꿔야 한다 ㅠㅠ
몇시간을 해서 얻은 설정이다.

# debug 1

base dc=SOHEE,dc=xxx,dc=ac,dc=kr
uri ldap://sohee.xxx.ac.kr
ldap_version 3
binddn cn=proxyuser,cn=builtin,dc=sohee,dc=xxx,dc=ac,dc=kr
bindpw secret
scope sub

# 이 부분의 코멘트를 보면, base 는 생략해도 된다고 하는데, 천만의 말씀이다. 이것으로 몇 시간을 해메었음.
nss_base_passwd ou=NormalUsers,dc=SOHEE,dc=xxx,dc=ac,dc=kr?sub
nss_base_shadow ou=NormalUsers,dc=SOHEE,dc=xxx,dc=ac,dc=kr?sub
nss_base_group  ou=NormalUsers,dc=SOEHE,dc=xxx,dc=ac,dc=kr?sub

# RFC2307의 schema
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user
nss_map_attribute uid sAMAccountName
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute shadowLastChange pwdLastSet
nss_map_objectclass posixGroup group
nss_map_attribute uniqueMember member
pam_login_attribute sAMAccountName
pam_filter objectclass=user
pam_password ad

sasl_secprops maxssf=0

정리하니까 쉬운듯 한데 막상 해보면, 할때마다 헤맨다. T.T

getent passwd에 액티브디렉토리 사용자들이 뜨긴 하는데,
아직 ssh 로그인이 안 되는 문제가 있을 수 있다.