acl설정으로 ldap의 각각의 entry,attribute의 접근에 대해 권한 설정을 할수 있으며
접근할수 있는 호스트에 대한 설정도 할수 있습니다.
설정파일 형식은 다음과 같습니다.
access to <권한제한을 설정할 것>
by <누구에게> <엑세스 권한>
일반적으로 다음과 같이 설정을 하곤합니다.
defaultaccess none
access to *
by self write
by dn=".+" read
by dn="" read
by * none
위의 내용을 해석하면 다음과 같습니다. 우선 defaultaccess를 none으로 설정해서 기본적으로
deny 를 default로 설정합니다.
access to *
위의 것은 모든 entry 에 대해 권한을 부여한다는 뜻입니다.
by self write
이것은 엔트리 자신은 스스로 쓰기권한이 부여된다는 뜻입니다. *가 만일 person objectclass라면
userPassword를 제시한 해당 사용자만이 쓰기를 할수 있다는 뜻입니다.
by dn=".+" read
이것은 인증된 사용자만이 읽을수 있게 해준다는 뜻입니다. ldap내에 있는 관리자 포함 인증이 되는
사람들만이 모든 엔트리에 대해 read권한이 있다는 뜻입니다.
by dn="" read
이것은 인증을 하지 않고 들어오는 anonymous사용자에게 모든 엔트리에 대해서 read권한을 부여한다는 뜻입니다.
by * none
그외의 모든 상황에 대해서는 권한이 없다는 뜻이됩니다.
어떤 엔트리에 대해서도 설정이 가능합니다. 다음과 같이 해봅시다.
access to dn=".*,dc=database,dc=sarang,dc=net"
이라고 설정을 한다면 해당 dn(.*는 정규표현식)을 만족하는 모든 엔트리에 대해 권한을 설정하겠다는 뜻입니다.
그럼 다음과 같이 하나의 attribute에 설정을 걸어 볼까요?
access to attr=userpassword
by self write
by * none
위의 예는 userpassword라는 attribute에 대해서만 권한설정을 합니다. userpassword attribute를 가지는 엔트리
자신만이 쓰기권한이 있고 나머지는 없습니다.
이때 권한을 부여하고 싶은 attribute가 복수개라면 다음과 같이 합니다.
access to attrs=userpassword,uid,sn
좀더 강력한 사용 예를 볼까요?
access to dn=".*,dc=(.*),dc=(.*),dc=net" attrs=children,entry,uid
by dn="cn=Administrator,dc=$1,dc=$2" write
by dn=".+" read
by * none
위와 같이 정규표현식의 grouping도 쓸수가 있습니다.
그럼 이제까지 엔트리에 대해서 그리고 attribute들에 대해서 권한 설정을 해보았습니다.
이제 마지막으로 호스트에 대해서 설정을 해봅시다.
defaultaccess none
access to dn=".*,dc=address,dc=database,dc=sarang,dc=net"
by domain="localhost" write
by addr="210.91.168.101" read
위의 예제는 도메인 방식으로 로컬호스트에 대해서는 쓰기권한을 아이피 지정방식으로 해당 아이피에 대해서는
읽기 권한을 부여하고 있습니다.
이제 세가지 방식 모두에 대해서 간단히 알아 보았습니다. :)
위의 access control list들은 하나이상 여러개의 리스트를 설정하여 쓸수도 있고 따로 myacl.conf로 파일로 설정해
두고 slapd.conf에서 include 하여 쓸수도 있습니다. 만일 동일한 액세스 항목을 두개 이상 설정하게 되는 실수를
저지른다면 첫번째 설정값만 실행하게 되고 두번째 설정은 되지 않게 되어 있습니다. 그냥 참고하시라고 적습니다.
Caution!!!!!!
정말 주의할점이 한가지 있습니다. 위의 entry나 attribute내용을 작성하실때 콤마(,)앞뒤로 space가 없어야 합니다.
위의 예제들을 보시면 아시겠지만 다닥다닥 다 붙어 있지요? 빈공란이 하나라도 들어가면 자신이 믿고 있는
acl이 전혀 작동하지 않는 수가 있습니다. 정말 주의 하십시요. :)
|