(91) 350-9520 support@omarine.org M-F: 7 AM - 7 PM; Weekends: 9 AM - 5 PM

Omarine Native Directory (OND): Openldap – Thi hành giao thức truy cập thư mục hạng nhẹ

Openldap thi hành giao thức truy cập thư mục hạng nhẹ. Dữ liệu ở dạng cấu trúc cây. Trong OND, cơ sở dữ liệu được tổ chức theo sơ đồ sau

Mỗi nút được đại diện bởi một tên phân biệt (dn – Distinguished Name). Lệnh ldapwhoami cho biết bạn đang ở điểm nào với quyền truy cập tương ứng

Các lệnh truy cập ldap phải chỉ ra kỹ thuật truy cập, nhưng vì chúng ta đã cấu hình trong tệp .ldaprc như biểu thị trong hình trên nên GSSAPI được sử dụng làm kỹ thuật mặc định. Lệnh cho biết chúng ta đang ở dn: uid=emin,ou=people,dc=nfsv4,dc=omarine,dc=org.

Ý nghĩa như sau: người sử dụng là emin, thuộc đơn vị tổ chức people trong miền nfsv4 của gốc database là dc=omarine,dc=org.

Lệnh dưới đây tìm kiếm người sử dụng có tên là tho

ldapsearch uid=tho

Trong hình không thấy thông tin mật khẩu. Đó là vì OND đã cấu hình để không ai ngoài quản trị có thể xem mật khẩu của người dùng (dù là phiên bản hash).

Nếu bạn có vé admin, bạn sẽ trở thành quản trị

cn=manager,dc=omarine,dc=org là dn gốc, có toàn quyền trong cơ sở dữ liệu của nó. admin trở thành manager là do qui tắc ủy quyền như sau trong tệp cấu hình /etc/openldap/slapd.conf

authz-regexp
     uid=admin,cn=omarine.org,cn=gssapi,cn=auth
     cn=Manager,dc=omarine,dc=org

Chạy ldap

Thủ tục khởi động ldap như sau:

systemctl enable ldap

systemctl start ldap

Cấu hình khách

Tệp /etc/openldap/ldap.conf dùng để đặt mặc định mức hệ thống cho khách, thường là URI để chỉ ra server và dn gốc mặc định cho hoạt động ldap như tìm kiếm. Bạn đặt nội dung sau:

BASE dc=nfsv4,dc=omarine,dc=org

URI ldap://omarine.omarine.org

Ngoài ra tệp .ldaprc trong thư mục nhà của người sử dụng dùng để đặt mức user như chọn kỹ thuật SASL mặc định nêu trên.

Điều khiển truy cập acl

OND cấu hình truy cập acl trong tệp slapd.conf như dưới đây:

access to dn.base=""
     by * read

access to attrs=userPassword,userPKCS12
     by self =xw
     by * auth

access to attrs=shadowLastChange
     by self write
     by * read

access to dn.subtree="cn=krbcontainer,dc=omarine,dc=org"
     by dn.exact="cn=adm-service,dc=omarine,dc=org" write
     by * none

access to dn.subtree="dc=nfsv4,dc=omarine,dc=org"
     by dn.exact="cn=nfsv4,dc=omarine,dc=org" read
     by users read
     by anonymous auth

access to *
     by * none

Gốc rỗng là rootDSE chỉ chứa thông tin server, ai cũng có quyền đọc nó. Những thuộc tính userPassword và userPKCS12 chủ nhân có quyền cập nhật (nhưng không đọc), người khác cần xác minh. Chủ nhân có quyền viết thuộc tính shadowLastChange, người khác có quyền đọc. Hai điều khiển truy cập tiếp theo thuộc về các bài sau. Vì ldap chứa tài khoản người dùng nên cần được bảo vệ nghiêm ngặt, ở mục cuối cùng, mọi truy cập còn lại đều không được phép.

Người sử dụng có quyền cập nhật mật khẩu của mình. Không phân biệt người dùng địa phương hay người dùng ldap, cả hai đều sử dụng lệnh passwd truyền thống.

SASL

Phương pháp xác thực đơn giản sử dụng mật khẩu kết hợp với một dn là không khuyến khích đối với người dùng, trừ trường hợp đặc biệt như cần thao tác dữ liệu cấu hình, sơ khởi database. Nhưng chỉ nên thao tác tại server. Phương pháp này cũng có thể sử dụng bởi chương trình đặc biệt. Chương trình này phải chạy tại server.

Xác thực an toàn là thông qua SASL – Tầng an ninh và xác thực đơn giản. Các kỹ thuật chính bao gồm GSSAPI, KERBEROS_V4, EXTERNAL và DIGEST-MD5. Trong đó KERBEROS_V4 đã lạc hậu và được thay thế bằng GSSAPI nên chúng ta không sử dụng.

1) GSSAPI

Chúng ta biết rằng việc trước tiên khách phải đạt được TGT, sau đó xin cấp vé dịch vụ. Dịch vụ ở đây là ldap cho máy chủ ldap, vậy chúng ta phải tạo principal dịch vụ ldap, trong ví dụ là

ldap/omarine.omarine.org

Cách tạo tương tự như principal dịch vụ host. Sau khi có vé dịch vụ khách gửi vé tới server. Nhưng vé ở dạng mã hóa bằng khóa dịch vụ, cho nên server phải có khóa dịch vụ để mở. Do đó principal dịch vụ ldap phải được thêm tới bảng khóa tại máy chủ ldap, mặc định là tệp /etc/krb5.keytab.

Kỹ thuật GSSAPI là mặc định trong OND và đã được trình bày bên trên.

2) EXTERNAL

Kỹ thuật EXTERNAL bao gồm hai kiểu là TLS và IPC (ldapi:///).

a. TLS

Sử dụng TLS thông qua chứng chỉ. Bạn đặt các chứng chỉ và khóa bí mật đã tạo trong bài trước vào thư mục /etc/openldap/certs. Thêm các dòng dưới đây vào tệp cấu hình slapd.conf dành cho cấu hình server

TLSCACertificateFile /etc/openldap/certs/ca-cert.pem

TLSCertificateFile /etc/openldap/certs/cert.pem

TLSCertificateKeyFile /etc/openldap/certs/key.pem

TLSVerifyClient demand

Vì ldap (slapd) chạy với người sử dụng là ldap nên ba tệp trên phải đổi chủ sang ldap

sudo chown ldap.ldap /etc/openldap/certs/{ca-cert.pem,cert.pem,key.pem}

Đảm bảo tệp khóa bí mật chỉ truy cập được bởi chủ nhân

sudo chmod 600 /etc/openldap/certs/key.pem

Khởi động lại dịch vụ ldap là cần thiết khi thay đổi cấu hình

systemctl restart ldap

Về cấu hình khách, bạn bổ sung dòng dưới đây vào tệp /etc/openldap/ldap.conf

TLS_CACERT /etc/openldap/certs/ca-cert.pem

Ngoài ra cần cấu hình khách mức user. Vì TLS chỉ sử dụng bởi root để quản lý cơ sở dữ liệu của kdc nên chúng ta chỉ cấu hình cho root. Trong vai trò root, bạn tạo tệp .ldaprc như sau:

cat > /root/.ldaprc << EOF

TLS_CERT /etc/openldap/certs/client-cert.pem

TLS_KEY /etc/openldap/certs/client-key.pem

SASL_MECH GSSAPI

EOF

Đảm bảo tệp khóa bí mật chỉ truy cập được bởi chủ nhân

sudo chmod 600 /etc/openldap/certs/client-key.pem

Lệnh dưới đây ứng dụng TLS

b. IPC

ldapi:/// chỉ nên chạy bởi root, vì socket chỉ cần mở cho root

3) DIGEST-MD5

Sử dụng DIGEST-MD5 là một sở thích. Tuy rằng kỹ thuật này yêu cầu vào mật khẩu nhưng mật khẩu không đi qua dây. Server chỉ yêu cầu thử thách đối với khách và khách phải chứng minh nó biết bí mật chia sẻ. Để sử dụng DIGEST-MD5, bạn thêm qui tắc ủy quyền vào tệp slapd.conf như sau:

authz-regexp
     uid=([^,]*),cn=omarine.org,cn=digest-md5,cn=auth
     uid=$1,ou=People,dc=nfsv4,dc=omarine,dc=org

Ví dụ sử dụng kỹ thuật DIGEST-MD5:

Tạo cơ sở dữ liệu

Tệp cấu hình slapd.conf mặc định có bộ phận database như sau

database mdb
maxsize 1073741824
suffix "dc=my-domain,dc=com"
rootdn "cn=Manager,dc=my-domain,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw secret
# The database directory MUST exist prior to running slapd AND 
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory /var/lib/openldap
# Indices to maintain
index objectClass eq

Chúng ta sẽ thay thế và bổ sung những thông tin cần thiết. my-domain được thay bằng omarine, com được thay bằng org. Để làm như vậy, bạn thực hiện dòng lệnh dưới đây:

sudo sed -i 's,my-domain,omarine,;s,com,org,' /etc/openldap/slapd.conf

dn gốc của cơ sở dữ liệu là cn=Manager,dc=omarine,dc=org với mật khẩu mặc định là secret. Bạn chạy lệnh dưới đây để tạo mật khẩu mới:

sudo slappasswd

Đầu ra của lệnh là phiên bản hash của mật khẩu của bạn, có dạng

{SSHA}EqbRSfaDUhDX9fTxcFNddDexeQk4ZAQQ

Chúng ta giả định dùng mật khẩu này, thay thế secret:

sudo sed -i 's,secret,{SSHA}EqbRSfaDUhDX9fTxcFNddDexeQk4ZAQQ,' /etc/openldap/slapd.conf

Tệp slapd.conf mặc định đã đặt chỉ số cho thuộc tính objectClass. Chỉ số dùng để tăng tốc tìm kiếm. Xử lý tìm kiếm sẽ kéo các mục được tham chiếu bởi chỉ số thay vì quét tất cả các mục trong phạm vi để kiểm tra khớp lọc. Chúng ta thêm chỉ số cho hai thuộc tính uid và krbPrincipalName:

sudo sed -i '/^index/i index uid,krbPrincipalName eq,sub' /etc/openldap/slapd.conf

Các thuộc tính mới có chỉ số bằng (eq) và xâu con (sub).

Kết quả là bộ phận database của tệp slapd.conf mới như sau

database mdb
maxsize 1073741824
suffix "dc=omarine,dc=org"
rootdn "cn=Manager,dc=omarine,dc=org"
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw {SSHA}EqbRSfaDUhDX9fTxcFNddDexeQk4ZAQQ
# The database directory MUST exist prior to running slapd AND 
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory /var/lib/openldap
# Indices to maintain
index uid,krbPrincipalName eq,sub
index objectClass eq

Một số lớp đối tượng cần có schema. Việc này hệ thống đã đặt sẵn nên bạn không cần bổ sung schema.

Việc cần thực hiện là bổ sung các qui tắc ủy quyền, cấu hình kỹ thuật SASL và thay thế điều khiển truy cập acl mặc định với nội dung như trình bày bên trên.

Đảm bảo khởi động lại ldap cho cấu hình mới:

systemctl restart ldap

Bây giờ bạn đã sẵn sàng tạo cơ sở dữ liệu. Trước tiên bạn tạo tệp entries.ldif có nội dung sau

# omarine.org
dn: dc=omarine,dc=org
objectClass: dcObject
objectClass: organization
dc: omarine
o: Omarine Corporation
description: Omarine Corporation

# nfsv4.omarine.org
dn: dc=nfsv4,dc=omarine,dc=org
objectClass: dcObject
objectClass: organization
dc: nfsv4
o: Omarine Corporation
description: NFSv4 domain

# Manager, omarine.org
dn: cn=Manager,dc=omarine,dc=org
objectClass: organizationalRole
cn: Manager
description: Directory Manager

# adm-service, omarine.org
dn: cn=adm-service,dc=omarine,dc=org
objectClass: person
objectClass: inetOrgPerson
uid: adm-service
sn: adm-service
cn: adm-service
description: KDC's admin

# krbcontainer, omarine.org
dn: cn=krbcontainer,dc=omarine,dc=org
objectClass: krbContainer
cn: krbcontainer

# omarine.omarine.org, omarine.org
dn: cn=omarine.omarine.org,dc=omarine,dc=org
objectClass: organizationalRole
cn: omarine.omarine.org
description: Master Server

# Groups, nfsv4.omarine.org
dn: ou=Groups,dc=nfsv4,dc=omarine,dc=org
objectClass: top
objectClass: organizationalUnit
ou: Groups

# People, nfsv4.omarine.org
dn: ou=People,dc=nfsv4,dc=omarine,dc=org
objectClass: top
objectClass: organizationalUnit
ou: People

Để áp dụng ngay kỹ thuật GSSAPI bạn tạo principal quản trị nếu chưa có:

kadmin -p root/admin -q 'addprinc -policy dict admin'

Lấy vé quản trị:

kinit admin

Bạn chạy lệnh dưới đây để thêm dn, trong trường hợp này là tạo cơ sở dữ liệu:

ldapadd -f entries.ldif

Cách khác để tạo cơ sở dữ liệu là sử dụng phương pháp xác thực đơn giản:

ldapadd -D cn=Manager,dc=omarine,dc=org -x -W -f entries.ldif

Sửa đổi dn

Giả sử chúng ta cần thêm thuộc tính mô tả “LDAP Groups” cho ou=Groups,dc=nfsv4,dc=omarine,dc=org, bạn đặt nội dung tệp entries.ldif như sau

# Groups, nfsv4.omarine.org
dn: ou=Groups,dc=nfsv4,dc=omarine,dc=org
changetype: modify
add: description
description: LDAP Groups

Thực hiện lệnh:

ldapmodify -f entries.ldif

Xóa dn

Để xóa cn=krbcontainer,dc=omarine,dc=org, bạn thực hiện lệnh

ldapdelete cn=krbcontainer,dc=omarine,dc=org

Nếu muốn xóa nhiều dn thì cách tiện hơn là lập danh sách các dn trong file, mỗi dn trên một dòng, rồi sử dụng lựa chọn -f

ldapdelete -f entries.ldif

Cơ sở dữ liệu khung đã hoàn thành. Trong các bài sau chúng ta sẽ xây dựng cơ sở dữ liệu chi tiết.

Advertisements

Gửi phản hồi

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.

%d bloggers like this: