Cập Nhật những gì đang có

Một phần của tài liệu Đồ án tin học nghiên cứu về giao thức LDAP (Trang 46)

5.1Xác nhận các nội dung của thư mục

5.2Cậ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/

Ngoài ra, bạn nên xoá đị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 (adsbygoogle = window.adsbygoogle || []).push({});

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

Xoá các mục trong thư mục.

Change

Đổi thuộc tính của một mục. Khoá 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. (adsbygoogle = window.adsbygoogle || []).push({});

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à xoá từ khóa cho việc thêm và xoá các giá trị thuộc tính. Để xóa giá trị của một thuộc tính, xoá: 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 toà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 toàn bộ ou = people subtree: (adsbygoogle = window.adsbygoogle || []).push({});

$ 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, xoá 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.

Một phần của tài liệu Đồ án tin học nghiên cứu về giao thức LDAP (Trang 46)