5.1Xác nhận các nội dung của thư mục
5.2 Cập Nhật những gì đang cĩ
Cuối cùng, các thơng tin được lưu trữ trong một thư mục sẽ cần phải được cập nhật hay bị xĩa. Trong khi một thư mục khơng phải thiết kế để được cập nhật thường xuyên như là một cơ sở dữ liệu, cĩ rất ít ứng dụng trong đĩ dữ liệu khơng bao giờ thay đổi. Phần này bao gồm làm thế nào để cập nhật các dữ liệu trong thư mục bằng cách sử dụng ldapmodify. Ldapmodify là tên một tiện ích ; Tiện ích này cĩ thể thêm các mục mới và xĩa hoặc Cập Nhật mục hiện cĩ bằng cách sử dụng một số tính năng nâng cao của LDIF cho ngơn ngữ nhập của nĩ.
Bảng liệt kê LDIF sau định nghĩa hai mục mà chúng tơi sẽ thêm vào thư mục của chúng tơi:
## filename: /tmp/users.ldif
## LDIF entry for "Gerald W. Carter"
dn: cn=Gerald W. Carter,ou=people,dc=plainjoe,dc=org cn: Gerald W. Carter sn: Carter mail: jerry@plainjoe.org mail: gcarter@valinux.com labeledURI: http://www.plainjoe.org/ roomNumber: 1234 Dudley Hall departmentNumber: Engineering telephoneNumber: 222-555-2345 pager: 222-555-6789 mobile: 222-555-1011 objectclass: inetOrgPerson
## LDIF entry for "Jerry Carter"
dn: cn=Jerry Carter,ou=people,dc=plainjoe,dc=org cn: Jerry Carter sn: Carter mail: carter@nowhere.net telephoneNumber: 555-123-1234 objectclass: inetOrgPerson
Lệnh sau cho thấy làm thế nào để thêm các mục vào thư mục trong khi nĩ đang chạy. Bởi vì viết đặc quyền được yêu cầu để thêm mục mới, ldapmodify liên kết với các thư mục bằng cách sử dụng các chứng chỉ từ các thơng số slapd.conf rootdn và rootpw.
$ ldapmodify -D "cn=Manager,dc=plainjoe,dc=org" -w secret \ > -x -a -f /tmp/users.ldif
adding new entry "cn=Gerald W. Carter,ou=people,dc=plainjoe,dc=org" adding new entry "cn=Jerry Carter,ou=people,dc=plainjoe,dc=org"
Đầu ra chỉ ra rằng cả hai mục đã được thêm vào thành cơng. Các tùy chọn -D, -w, và - x để ldapmodify nên quen; họ xác định DN sử dụng để sửa đổi, chỉ rõ mật khẩu cho sửa đổi, và yêu cầu xác thực đơn giản, tương ứng. Điều này lá chỉ cĩ hai lựa chọn mới để thảo luận về:
-a
Mục đang được thêm vào thư mục. Mặc định cho ldapmodify là để cập nhật thơng tin hiện cĩ.
-f tên tập tin
Đọc các bài mục mới tên tập tin cho trước. Theo mặc định, ldapmodify lần đọc từ đầu vào tiêu chuẩn.
Nếu ldapmodify trả về một thơng báo lỗi như sau, thử cho phép tiết tin nhắn qua - v dịng lệnh switch:
ldap_add: Invalid syntax
additional info: value contains invalid data
Cĩ hai nguyên nhân phổ biến của thơng báo lỗi này. Bạn cĩ thể đã quên để bao gồm tất cả các file cần thiết giản đồ trong slapd.conf, hoặc bạn cĩ thể cĩ khoảng trắng thêm vào
cuối dịng trong LDIF tập tin. Danh sách bài hát trong vi lệnh cĩ thể giúp bạn theo dõi thêm khoảng trắng.
Chỉ một lần nữa để bảng 4-3 cho một danh sách các lựa chọn phổ biến cho tất cả các cơng cụ máy khách ldap. Bảng 4-5 danh sách những lựa chọn cụ thể để ldapmodify và ldapadd. Lưu ý rằng ldapadd và ldapmodify là tập tin chạy được cùng một; ldapadd là chỉ là một liên kết cứng đến ldapmodify. Các lệnh khác chỉ trong hành vi mặc định của họ, mà phụ thuộc vào tên mà chương trình đã được kích hoạt.
Bảng 4-5. Dịng lệnh tùy chọn cụ thể để ldapadd và ldapmodify
Option Description
-a Thêm mục. Tùy chọn này là mặc định cho ldapadd.
-r Thay thế (hoặc sửa đổi) mục và các giá trị. Đây là mặc định cho ldapmodify. -F Lực lượng tất cả thay đổi hồ sơ sẽ được sử dụng từ đầu vào.
Bây giờ hãy xem cách thức hoạt động sửa đổi. Giả sử bạn muốn thêm một URL cho các mục nhập cho cn = Jerry Carter, ou = people, dc = plainjoe, dc = org. Để thêm URL, sử dụng các thuộc tính labeledURI:
labeledURI: http://www.plainjoe.org/~jerry/
Ngồi ra, bạn nên xố địa chỉ email gcarter@valinux.com cho "Gerald W. Carter" bởi vì nĩ đã trở thành khơng hợp lệ. Bạn cĩ thể đặt cả hai thay đổi trong một đơn LDIF tập tin:
## /tmp/update.ldif
dn: cn=Jerry Carter,ou=people,dc=plainjoe,dc=org changetype: modify
add: labeledURI
labeledURI: http://www.plainjoe.org/~jerry/
## Remove an email address from Gerald W. Carter. dn: cn=Gerald W. Carter,ou=people,dc=plainjoe,dc=org changetype: modify
delete: mail
mail: gcarter@valinux.com
Các từ khĩa changetype trong LDIF tập tin là chìa khĩa để sửa đổi mục hiện cĩ. Từ khĩa này cĩ thể chấp nhận các giá trị sau:
Add
Thêm mục vào thư mục.
Delete
Xố các mục trong thư mục.
Change
Đổi thuộc tính của một mục. Khố này, cả hai bạn cĩ thể thêm và xĩa các giá trị thuộc tính.
modify
moddn
Thay đổi DN mục mới.
LDIF tập tin này cho ldapmodify những thay đổi để thực hiện. Chúng tơi sẽ gọi ldapmodify với các tiết (-v) lựa chọn do đĩ, bạn cĩ thể làm theo các Cập Nhật hoạt động chặt chẽ hơn. Tùy chọn - một khơng phải là cần thiết bởi vì bạn đang khơng thêm mục mới.
$ ldapmodify -D "cn=Manager,dc=plainjoe,dc=org" -w secret > -x -v -f /tmp/update.ldif
ldap_initialize( <DEFAULT> ) add labeledURI:
http://www.plainjoe.org/~jerry/
modifying entry "cn=Jerry Carter,ou=people,dc=plainjoe,dc=org" modify complete
delete mail:
gcarter@valinux.com
modifying entry "cn=Gerald W. Carter,ou=people,dc=plainjoe,dc=org" modify complete
Chú ý rằng LDIF tập tin được phân tách theo tuần tự từ phía trên. Vì vậy, sau đĩ LDIF mục cĩ thể sửa đổi mục tạo ra trước đây trong tập tin. Bạn cũng cĩ thể tạo một LDIF tập tin với mục cĩ giá trị khác nhau changetype. Ví dụ, theo LDIF tập tin cho biết thêm một mục nhập cho người dùng Peabody Soup, cho biết thêm một telephoneNumber mới để nhập cảnh của Jerry Carter, và cuối cùng xĩa các mục nhập trước đây tạo ra cho Peabody
telephoneNumber to Jerry Carter's entry, and finally deletes the previously created entry for Peabody Soup.
## /tmp/changetypes.ldif
## Add entry for Peabody Soup.
dn: cn=Peabody Soup,ou=people,dc=plainjoe,dc=org changetype: add cn: Peabody Soup sn: Soup objectclass: inetOrgPerson
## Add new telephoneNumber for Jerry Carter. dn: cn=Jerry Carter,ou=people,dc=plainjoe,dc=org changetype: modify delete: telephoneNumber telephoneNumber: 555-123-1234 - add: telephoneNumber telephoneNumber: 234-555-6789
## Remove the entry for Peabody Soup.
dn: cn=Peabody Soup,ou=people,dc=plainjoe,dc=org changetype: delete
Một vài sự kiện về LDIF tập tin này là đáng nĩi đến:
Mục được ngăn cách bởi một dịng trống, như đã nĩi trước đĩ.
Nhiều thay đổi đến một mục nhập đơn bằng cách sử dụng changetype sửa đổi được ngăn cách bởi một đơn gạch ngang (-) trên một dịng của chính nĩ. Những nên được xử lý như là một sự thay đổi duy nhất của máy chủ. Tất cả những thay đổi cho DN này cĩ hiệu lực hoặc khơng được áp dụng.
Hỗ trợ changetype sửa đổi thêm và xố từ khĩa cho việc thêm và xố các giá trị thuộc tính. Để xĩa giá trị của một thuộc tính, xố: ngay lập tức phải được theo sau bởi một cặp attributetype:value. Nĩ là cần thiết để xác định giá trị bạn đang xĩa bởi vì một số thuộc tính cĩ thể chứa nhiều giá trị. Cách xác định giá trị đĩ để loại bỏ loại bỏ bất kỳ mơ hồ về những gì bạn muốn làm. Khi giá trị cuối cùng của một thuộc tính được lấy ra từ một mục, thuộc tính đĩ khơng cịn hiện diện trong các mục nhập.
Đây là cách áp dụng này tập thứ hai của những thay đổi vào thư mục. Một lần nữa, chúng tơi đã chỉ định tùy chọn - v để xem làm thế nào ldapmodify xử lý LDIF tập tin.
$ ldapmodify -D "cn=Manager,dc=plainjoe,dc=org" -w secret -x -v -f /tmp/changetype.ldif ldap_initialize( <DEFAULT> ) add cn: Peabody Soup add sn: Soup add objectclass: inetOrgPerson
adding new entry "cn=Peabody Soup,ou=people,dc=plainjoe,dc=org" modify complete delete telephoneNumber: 555-123-1234 add telephoneNumber: 234-555-6789
modifying entry "cn=Jerry Carter,ou=people,dc=plainjoe,dc=org" modify complete
deleting entry "cn=Peabody Soup,ou=people,dc=plainjoe,dc=org" delete complete
Sửa đổi RDN một mục sẽ suy nghĩ nhiều hơn một chút so với thêm một mục nhập hoặc thay đổi một thuộc tính của một mục. Nếu các mục nhập khơng phải là một đốt lá, thay đổi của nĩ RDN orphans trẻ em ở thư mục vì DN cha mẹ họ đã thay đổi. Bạn nên chắc chắn rằng bạn khơng để lại các nút mồ cơi trong thư mục-bạn nên di chuyển các nút với cha mẹ của họ hoặc cung cấp cho họ một phụ huynh mới. Với ý nghĩ đĩ, hãy suy nghĩ về làm thế nào để thay đổi RDN của mục nhập:
dn: cn=Jerry Carter,ou=people,dc=plainjoe,dc=org ## /tmp/modrdn.ldif
## Change the RDN from "Jerry Carter" to "Gerry Carter." dn: cn=Jerry Carter,ou=people,dc=plainjoe,dc=org changetype: modrdn
newrdn: cn=Gerry Carter deleteoldrdn: 1
Bạn cũng cĩ thể sử dụng lệnh ldapmodrdn để thực hiện nhiệm vụ tương tự
$ ldapmodrdn \
> "cn=Jerry Carter,ou=people,dc=plainjoe,dc=org" \ > "cn=Gerry Carter"
Khơng kể DN mục phải được thay đổi và các giá trị RDN mới, các cơng cụ ldapmodrdn cĩ ba tùy chọn dịng lệnh bên cạnh những người phổ biến cho các OpenLDAP khách hàng cụ khác (bảng 4-3). Các tùy chọn bổ sung được liệt kê trong bảng 4-6.
Bảng 4-6. Dịng lệnh tùy chọn cụ thể để ldapmodrdn
Option Mơ tả
-c Chỉ thị ldapmodrdn để tiếp tục nếu lỗi xảy ra. Theo mặc định, nĩ chấm dứt nếu cĩ một lỗi.
-r
Loại bỏ giá trị RDN cũ. Hành vi mặc định là để thêm một RDN giá trị và để lại giá trị cũ cịn nguyên vẹn. Hành vi mặc định làm cho nĩ dễ dàng hơn để sửa đổi một thư mục mà khơng để lại mục mồ cơi.
-s
new_superior_node
Định nghĩa cấp trên, hoặc phụ huynh, mục mới theo đĩ các mục nhập được đổi tên thành nên được đặt.
Nếu một subtree tồn bộ của thư mục cần được chuyển đi, một giải pháp tốt hơn cĩ thể là xuất chuyển subtree cho một LDIF tập tin, sửa đổi tất cả các lần xuất hiện của các thuộc tính thay đổi trong tất cả các DNs và cuối cùng thêm lại subtree đến vị trí mới. Một khi các thơng tin đã được nhập vào một cách chính xác vào vị trí, bạn cĩ thể sử dụng một ldapdelete đệ quy để loại bỏ subtree cũ.
ldapdelete sở hữu tất cả các tùy chọn dịng lệnh phổ biến để ldapsearch và ldapmodify. Các tùy chọn chỉ mới là - r (đệ quy), mà xĩa tất cả các mục dưới đây những người được chỉ định trên dịng lệnh, thêm vào các mục nhập được đặt tên theo. Lưu ý rằng việc xĩa này khơng nguyên tử; mục sẽ bị xĩa riêng rẽ. Lệnh xĩa tồn bộ ou = people subtree:
$ ldapdelete -D "cn=Manager,dc=plainjoe,dc=org" -w secret -x \ > -r -v "ou=people,dc=plainjoe,dc=org"
ldap_initialize( <DEFAULT> )
deleting entry "ou=people,dc=plainjoe,dc=org" deleting children of: ou=people,dc=plainjoe,dc=org
deleting children of: cn=Gerald W. Carter,ou=people,dc=plainjoe,dc=org removing cn=Gerald W. Carter,ou=people,dc=plainjoe,dc=org cn=Gerald W. Carter,ou=people,dc=plainjoe,dc=org removed deleting children of: cn=Gerry Carter,ou=people,dc=plainjoe,dc=org removing cn=Gerry Carter,ou=people,dc=plainjoe,dc=org
cn=Gerry Carter,ou=people,dc=plainjoe,dc=org removed Delete Result: Success (0)
Bây giờ là bạn cĩ một thư mục làm việc, một tập thể dục tốt sẽ là thử nghiệm với nhiều ACLs để hạn chế quyền truy cập vào thuộc tính nhất định. Tập thể dục này cũng sẽ giúp bạn trở nên thoải mái hơn với các cơng cụ trình bày trong chương này. Dùng cơng cụ slapcat để bãi chứa thư mục vào một LDIF tập tin và bắt đầu hơn từ đầu cho đến khi bạn cảm thấy thoải mái thêm, xố và sửa đổi mục. Chương kế tiếp khám phá cách tạo ra một thư mục được phân phối, sao chép thơng tin để nhiều máy chủ, hơn tìm kiếm các kỹ thuật, và một số cấu hình ACL tiên tiến.