Không có kiến ​​thức vượt trội toàn cầu, trong khi thêm một quốc gia


13

Tôi phải thêm một organizationalunitcái như thế này vào một OpenLDAP mới được cài đặt (trên Ubuntu 12.04):

dn: ou=MYREGION, ou=MYAPP, ou=GROUPS, o=myorganization, c=fr
ou: MYREGION
objectClass: top
objectClass: organizationalunit

Vì vậy, vì đây là LDAP mới, tôi nghĩ trước tiên tôi phải thêm frquốc gia và tôi tạo tệp đó:

dn: c=fr
c: fr
objectClass: top
objectClass: country

Bây giờ tôi cố gắng nhập nó bằng lệnh đó (Tôi không có tên miền cho máy chủ đó):

ldapadd -x -D cn=admin,dc=nodomain -W -f country_fr.ldif

nhưng OpenLDAP từ chối lệnh đó với:

adding new entry "c=fr"
ldap_add: Server is unwilling to perform (53)
    additional info: no global superior knowledge

Có gợi ý nào không?

Câu trả lời:


20

Lỗi no global superior knowledgecó nghĩa là slapdkhông biết nơi để đặt mục nhập mới của bạn. Điều này thường có nghĩa là bạn chưa xác định một cơ sở dữ liệu thích hợp. Với các hệ thống mới hơn (hệ thống sử dụng cn=configthay vì slapd.conf), trước tiên bạn thường sẽ thêm cơ sở dữ liệu mới hoặc sửa đổi mục nhập cơ sở dữ liệu hiện có bằng cách sử dụng ldapaddhoặc ldapmodify. Ví dụ: trên hệ thống Fedora 17 của tôi, cài đặt mặc định sẽ thiết lập cơ sở dữ liệu như thế này để lưu trữ dc=my-domain,dc=com:

dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
creatorsName: cn=config
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com

Để lưu trữ tổ chức của bạn ( o=myorganization, c=fr), tôi cần tạo tệp LDIF sau:

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: o=myorganization, c=fr
-
replace: olcRootDN
olcRootDN: cn=Manager,o=myorganization,c=fr
-
replace: olcAccess
olcAccess: {0}to * 
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write 
  by dn.base="cn=Manager,o=myorganization,c=fr" write
  by * none

Và sau đó tôi sẽ tải những sửa đổi như thế này:

ldapmodify -Y EXTERNAL -H ldapi:/// -f mychanges.ldif

Điều này hoạt động vì các olcAccessdòng sau đã có trong cấu hình:

dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * 
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
  by * none

Cấp này root, liên hệ slapdqua ldapi:///ổ cắm, truy cập mật khẩu miễn phí vào cn=configcây.

Sau đó tôi sẽ tải vào mục cấp cao nhất của mình:

dn: o=myorganization, c=fr
objectclass: organization
o: myorganization

Bằng cách chạy:

ldapadd -Y EXTERNAL -H ldapi:/// -f myobject.ldif

Điều này hoạt động vì tôi đã thêm một ACL tương tự vào cơ sở dữ liệu này. Lưu ý rằng tôi không cần phải bắt đầu c=frở đây, vì cơ sở dữ liệu được xác định để giữo=myorganization,c=fr


OK, cảm ơn rất nhiều larsks. Nhưng nếu tôi hiểu chính xác câu trả lời của bạn, thì ở đây bạn sửa đổi tiền tố hiện tại của cơ sở dữ liệu của OpenLDAP này. Nếu tôi muốn thêm một cái mới thì sao? (Tôi sẽ kiểm tra các đề xuất của bạn bằng mọi cách, tôi chỉ tò mò)
Anthony O.

1
Sử dụng ldapaddthay vì ldapmodifyvà sử dụng bản ghi hiện tại làm mô hình.
larsks

Nếu câu trả lời này giải quyết vấn đề của bạn, bạn sẽ đánh dấu nó là chấp nhận bằng cách nhấp vào hộp kiểm ở phía trên bên trái của câu hỏi.
larsks

Trên thực tế, nó đã giúp tôi rất nhiều, nhưng đó không phải là những mệnh lệnh chính xác mà tôi đã thông qua, đó là lý do tại sao tôi đã tạo ra câu trả lời của riêng mình. Tôi không dám chỉnh sửa câu trả lời của bạn để sửa nó bằng ldifs (đặc biệt là về olcAccess) và các lệnh tôi thực sự đã sử dụng ... nhưng nếu bạn muốn chỉnh sửa nó bằng bản sao / dán từ câu trả lời của mình, tôi có thể đánh dấu nó chấp nhận được & xóa của tôi :)
Anthony O.

(Tôi nghĩ rằng đây không phải là lý do để hạ thấp câu trả lời của tôi ...)
Anthony O.

1

Nhờ câu trả lời của larsks , đây là những gì tôi đã làm.

Đầu tiên ở đây là trích xuất cấu hình mặc định với Ubuntu 12.04 (tệp /etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif):

dn: olcDatabase={1}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=nodomain
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=nodomain" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=nodomain" write by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=nodomain

Vì vậy, tôi đã tạo ra như sau change_suffix.ldif:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: o=myorganization,c=fr
-
replace: olcRootDN
olcRootDN: cn=admin,o=myorganization,c=fr
-
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,o=myorganization,c=fr" write by * none
olcAccess: {2}to * by self write by dn="cn=admin,o=myorganization,c=fr" write by * read

và thêm nó vào ldap của tôi bằng lệnh sau:

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f change_suffix.ldif

Bây giờ tôi phải tạo nút tổ chức như sau myorganization.ldif:

dn: o=myorganization,c=fr
objectclass: organization
o: myorganization

Và cuối cùng thêm nó bằng lệnh sau (lệnh đầu tiên không hoạt động do Insufficient access (50)):

ldapadd -x -D cn=admin,o=myorganization,c=fr -W -f myorganization.ldif

Bây giờ tôi có thể thêm các đơn vị tổ chức:

dn: ou=GROUPS, o=myorganization,c=fr
ou: GROUPS
objectClass: top
objectClass: organizationalunit

dn: ou=MYAPP, ou=GROUPS, o=myorganization,c=fr
ou: MYAPP
objectClass: top
objectClass: organizationalunit

dn: ou=MYREGION, ou=MYAPP, ou=GROUPS, o=myorganization,c=fr
ou: MYREGION
objectClass: top
objectClass: organizationalunit

Đây dn: olcDatabase={1}hdb,cn=configlà chìa khóa cho tôi, cảm ơn
Miguelfg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.