Unix/Open Solaris

OpenLDAP - phpLDAPadmin

ForceCore 2009. 2. 16. 16:08
http://forcecore.tistory.com/948
저 글에서는 서버 설정을 했었다.

이제 으레 했듯.
우선은 test용 id를 만들것이다?

근데, command line으로 하려면, 머리가 작살나서 안 된다.
http://phpldapadmin.sourceforge.net/
이런 아름다운 것을 써야, 진정한 LDAP이라고 할 수 있다.

말하자면, passwd 파일은 유저를 그냥 쭉 나열했기 때문에 간단한데, ldap은 2차원 구조라 commandline으로는 인간의 상상력을 시험에 들게 하기 때문이다 -_-

phpldapadmin을 쓰려면... 아우우우... 웹서버부터 얹고 와야겠군!
http://forcecore.tistory.com/950
얹었으면 continue.

의외로 phpLDAPadmin 자료가 없어서 좀 고생했다만... openLDAP을 얹을 때, 생성해서는 안 될 항목이, quick 설정 매뉴얼에 있어서 그것을 제거하니 되었다. cn=Manager항목을 생성하지 않아야만 된다 -ㅠ-;; cookie도 안 먹는 것 같았다. 아마 cn=Manager는 openLDAP의 가상 cn이라 그럴려나... 어쨌거나, 관리의 쉬움과 설치의 쉬움을 위해서, 필자는, 이 manager로 ldapadmin이 접속하도록 했다(!).

그러면, 웹으로 접속하기만 해도, 아무나 막강한 권한을 가지게 되어 곤란하다. 이는 조금 있다 다루기로 하고, 우선은 이런 원시적인 무인증 접속(?) 부터 되게 해야 하겠다.

config.php를 읽기만 해도 문제 없을건데, 막상 자료를 찾아보면, openldap에선 이렇게 config.php파일이 나오더라... 라는 게 없어서 여기 올린다. 전체를 올린 것으로 보이는 것이 없어서 한참 해메었음.

<?php
$config->custom->session['blowfish'] = '어쩌구저쩌구';
$config->custom->jpeg['tmpdir'] = "/tmp";     // Example for Unix systems
 $config->custom->appearance['tree'] = "AJAXTree";

$i=0;
$ldapservers = new LDAPServers;

$ldapservers->SetValue($i,'server','name','LAB LDAP Server');
$ldapservers->SetValue($i,'server','host','127.0.0.1');
$ldapservers->SetValue($i,'server','port','389');
$ldapservers->SetValue($i,'server','base',array('dc=lab,dc=xxx,dc=ac,dc=kr'));
$ldapservers->SetValue($i,'server','auth_type','config');
$ldapservers->SetValue($i,'login','dn','cn=Manager,dc=lab,dc=xxx,dc=ac,dc=kr');
$ldapservers->SetValue($i,'login','pass','secret');
$ldapservers->SetValue($i,'server','tls',false);

$friendly_attrs = array();
$friendly_attrs['facsimileTelephoneNumber'] = 'Fax';
$friendly_attrs['telephoneNumber']          = 'Phone';
$friendly_attrs['uid']                      = 'User ID';

$q=0;
$queries = array();
$queries[$q]['name'] = 'User List';
$queries[$q]['base'] = 'dc=lab,dc=xxx,dc=ac,dc=kr';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(objectClass=posixAccount)(uid=*))';
$queries[$q]['attributes'] = 'cn, uid, homeDirectory, telephonenumber, jpegphoto';

$q++;
$queries[$q]['name'] = 'Samba Users';
$queries[$q]['base'] = 'dc=lab,dc=xxx,dc=ac,dc=kr';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(|(objectClass=sambaAccount)(objectClass=sambaSamAccount))(objectClass=posixAccount)(!(uid=*$)))';
$queries[$q]['attributes'] = 'uid, smbHome, uidNumber';

$q++;
$queries[$q]['name'] = 'Samba Computers';
$queries[$q]['base'] = 'dc=lab,dc=xxx,dc=ac,dc=kr';
$queries[$q]['scope'] = 'sub';
$queries[$q]['filter'] = '(&(objectClass=sambaAccount)(uid=*$))';
$queries[$q]['attributes'] = 'uid, homeDirectory';
?>

이게 설정의 전부이다. 대부분의 경우 default로 놔두었다. 다만... 아래에 있는 쿼리들... $queries 이 항목을은 바뀔 수도 있다. 디폴트값인데 필자는 얘들을 빼지 않고 그냥 방치하여 두었다.

이제쯤 인증을 하도록 해야겠군. .htaccess파일을 이용한다. phpLDAPadmin에 의존하기 보단 이게 더 간단하고 좋을 듯 하다. 작은 규모의 시스템이면. 혹은 관리자 집단이 작으면. .htaccess 설정을 쓰려면 아파치 설정을 잘 해서... AllowOverride를 FileInfo AuthConfig 로 해두어야 한다.

.htaccess파일:
AuthType Basic
AuthUserFile /export/www/ldapadmin/.htpasswd
AuthName "SSL LDAP admin authorization"
<Limit GET>
    require valid-user
</Limit>
.htpasswd파일은
$ htpasswd -c -m /export/www/ldapadmin/.htpasswd 사용자ID
명령어를 이용해 만들 수 있다. 파일 이름이 .ht로 시작해야만, http client들이 해당 파일을 받아가지 못한다. 반드시 .ht로 파일이름을 시작하도록 하자.

되도록 이 관리자 페이지는 HTTPS로 접속하는게 좋다. 이렇게:
http://forcecore.tistory.com/955

이게 되도록 했으면...
이제 사용자 추가를 해보고 싶다 -ㅠ-


우선은 이렇게 ou=Groups와 ou=People을 만들어 놓는다.
이제 사용자를 추가하고 싶은데... 안 된다 ㅠㅠ 왜냐면...
openLDAP 설정을 잘못했기 때문이다.

slapd.conf를 다시 열어본다.
include     /opt/csw/etc/openldap/schema/core.schema
라는 줄이 첫머리에 있을 것이다.
include     /opt/csw/etc/openldap/schema/cosine.schema
include     /opt/csw/etc/openldap/schema/nis.schema
include     /opt/csw/etc/openldap/schema/inetorgperson.schema
이것을 추가하고, openLDAP서비스를 재시작하라.
nis가 포인트이고, nis는 cosine을 필요로 한다. nis까지 하면, posixAccount class가 추가되긴 하는데, template에 인간 추가 template이 안 보인다.
inetorgperson까지 있어야 사용자 추가가 된다. 이 세개가 minimum이라고 할 수 있다.

설정을 잘못하기 전에는 휑하던 template가, purge cache를 한 뒤에는,


위와 비슷하게 변할 것이다. (필자가 inetorgperson.schema를 빼놓았던 때 찍은거라 몇개 없다 -_-;;)
PosixAccount를 만들어야 하는데 문제가 있따. 없다는 거...
기존에 잘못 만든 OU를 제거하고, Posix Group을 생성하고 그 안에서 새로 만들기를 하면 보일 것이다.

ID를 만들어보았다. 채울 칸에 적절한 정보를 채우면 되지 뭐... 근데 shell이 마음에 안 드는군. 이런 때에는
phpldapadmin/templates/creation
에서, posixAccount.xml 이것을 수정하든지, 하나 복사해서 customization하든지 하면 된다.
bash shell을 추가하고, default homedirectory를 적당하게 수정하였다.
전화번호 같은 추가정보를 저장하고 싶다면, add new attribute기능을 사용하면 된다.