Thứ năm, 01/06/2017 | 00:00 GMT+7

Cách cài đặt và cấu hình OpenLDAP và phpLDAPadmin trên Ubuntu 16.04

Giao thức truy cập folder nhẹ (LDAP) là một giao thức tiêu chuẩn được thiết kế để quản lý và truy cập thông tin folder phân cấp qua mạng. Nó được dùng để lưu trữ bất kỳ loại thông tin nào, mặc dù nó thường được sử dụng như một hệ thống xác thực tập trung hoặc cho các danh bạ email và điện thoại của công ty.

Trong hướng dẫn này, ta sẽ thảo luận về cách cài đặt và cấu hình server OpenLDAP trên Ubuntu 16.04. Sau đó, ta sẽ cài đặt phpLDAPadmin, một giao diện web để xem và thao tác thông tin LDAP. Ta sẽ bảo mật giao diện web và dịch vụ LDAP bằng certificate SSL từ Let's Encrypt, một nhà cung cấp các certificate tự động và miễn phí.

Yêu cầu

Trước khi bắt đầu hướng dẫn này, bạn nên cài đặt một server Ubuntu 16.04 với Apache và PHP. Bạn có thể làm theo hướng dẫn của ta Cách cài đặt ngăn xếp Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 16.04 , bỏ qua Bước 2 vì ta sẽ không cần server database MySQL.

Ngoài ra, vì ta sẽ nhập password vào giao diện web, ta nên bảo mật Apache bằng mã hóa SSL. Đọc Cách bảo mật Apache bằng Let's Encrypt trên Ubuntu 16.04 để download và cấu hình certificate SSL miễn phí. Bạn cần một domain để hoàn thành bước này. Ta cũng sẽ sử dụng các certificate này để cung cấp các kết nối LDAP an toàn.

Lưu ý: hướng dẫn Let's Encrypt giả định server của bạn có thể truy cập được vào internet công cộng. Nếu không đúng như vậy, bạn sẽ phải sử dụng một nhà cung cấp certificate khác hoặc có thể là cơ quan cấp certificate của chính tổ chức của bạn. Dù bằng cách nào, bạn có thể hoàn thành hướng dẫn với những thay đổi tối thiểu, chủ yếu liên quan đến đường dẫn hoặc tên file của certificate .

Bước 1 - Cài đặt và cấu hình server LDAP

Bước đầu tiên của ta là cài đặt server LDAP và một số tiện ích liên quan. May mắn là các gói ta cần đều có sẵn trong repository lưu trữ mặc định của Ubuntu.

Đăng nhập vào server của bạn. Vì đây là lần đầu tiên ta sử dụng apt-get trong phiên này, ta sẽ cập nhật OS local của bạn , sau đó cài đặt các gói ta muốn:

  • sudo apt-get update
  • sudo apt-get install slapd ldap-utils

Trong quá trình cài đặt, bạn cần chọn và xác nhận password administrator cho LDAP. Bạn có thể nhập bất cứ thứ gì ở đây, vì bạn sẽ có cơ hội cập nhật nó chỉ trong giây lát.

Mặc dù ta vừa cài đặt gói, ta sẽ tiếp tục và cấu hình lại nó. Gói slapd có khả năng hỏi rất nhiều câu hỏi cấu hình quan trọng, nhưng theo mặc định chúng sẽ bị bỏ qua trong quá trình cài đặt. Ta có quyền truy cập vào tất cả các dấu nhắc bằng cách yêu cầu hệ thống của ta cấu hình lại gói:

  • sudo dpkg-reconfigure slapd

Có khá nhiều câu hỏi mới cần trả lời trong quá trình này. Ta sẽ chấp nhận hầu hết các giá trị mặc định. Hãy đi qua các câu hỏi:

  • Bỏ qua cấu hình server OpenLDAP? Không
  • Tên domain DNS?
    • Tùy chọn này sẽ xác định cấu trúc cơ sở của đường dẫn folder của bạn. Đọc thông báo để hiểu chính xác cách thực hiện điều này. Bạn có thể chọn bất kỳ giá trị nào bạn muốn, ngay cả khi bạn không sở hữu domain thực. Tuy nhiên, hướng dẫn này giả định bạn có một domain thích hợp cho server , vì vậy bạn nên sử dụng domain đó. Ta sẽ sử dụng example.com trong suốt hướng dẫn.
  • Tên tổ chức?
    • Đối với hướng dẫn này, ta sẽ sử dụng ví dụ làm tên tổ chức của ta . Bạn có thể chọn bất cứ thứ gì bạn cảm thấy phù hợp.
  • Mật khẩu administrator ? nhập password an toàn hai lần
  • Database backend ? MDB
  • Xóa database khi tát cạn bị xóa? Không
  • Di chuyển database cũ? Đúng
  • Cho phép giao thức LDAPv2? Không

Đến đây, server LDAP của bạn đã được cấu hình và đang chạy. Mở cổng LDAP trên firewall của bạn để các client bên ngoài có thể kết nối:

  • sudo ufw allow ldap

Hãy kiểm tra kết nối LDAP của ta với ldapwhoami , điều này sẽ trả về tên user mà ta đã kết nối là:

  • ldapwhoami -H ldap:// -x
Output
anonymous

anonymous là kết quả mà ta mong đợi, vì ta đã chạy ldapwhoami mà không cần đăng nhập vào server LDAP. Điều này nghĩa là server đang chạy và trả lời các truy vấn. Tiếp theo, ta sẽ cài đặt giao diện web để quản lý dữ liệu LDAP.

Bước 2 - Cài đặt và cấu hình giao diện web phpLDAPadmin

Mặc dù rất có thể quản lý LDAP thông qua dòng lệnh, nhưng hầu hết user sẽ thấy dễ dàng hơn khi sử dụng giao diện web. Ta sẽ cài đặt phpLDAPadmin, một ứng dụng PHP cung cấp chức năng này.

Kho lưu trữ Ubuntu chứa một gói phpLDAPadmin. Bạn có thể cài đặt nó bằng apt-get :

  • sudo apt-get install phpldapadmin

Thao tác này sẽ cài đặt ứng dụng, kích hoạt các cấu hình Apache cần thiết và reload Apache.

Web server hiện đã được cấu hình để phục vụ ứng dụng, nhưng ta cần thực hiện một số thay đổi bổ sung. Ta cần cấu hình phpLDAPadmin để sử dụng domain của ta và không tự động điền thông tin đăng nhập LDAP.

Bắt đầu bằng cách mở file cấu hình chính với quyền root trong editor của bạn:

  • sudo nano /etc/phpldapadmin/config.php

Tìm dòng bắt đầu bằng $servers->setValue('server','name' . Trong nano bạn có thể tìm kiếm một chuỗi bằng lệnh CTRL-W , sau đó là chuỗi, sau đó ENTER . Con trỏ của bạn sẽ được đặt đúng hàng.

Dòng này là tên hiển thị cho server LDAP của bạn, mà giao diện web sử dụng cho tiêu đề và thông báo về server . Chọn bất cứ điều gì thích hợp ở đây:

/etc/phpldapadmin/config.php
$servers->setValue('server','name','Example LDAP'); 

Tiếp theo, di chuyển xuống dòng $servers->setValue('server','base' . Cấu hình này cho phpLDAPadmin biết root của cấu trúc phân cấp LDAP là gì. Điều này dựa trên giá trị mà ta đã nhập khi cấu hình lại gói slapd . Trong ví dụ của ta , ta đã chọn example.com và ta cần dịch điều này thành cú pháp LDAP bằng cách đặt từng thành phần domain (mọi thứ không phải là dấu chấm) thành một ký hiệu dc= :

/etc/phpldapadmin/config.php
$servers->setValue('server','base', array('dc=example,dc=com')); 

Bây giờ, hãy tìm dòng cấu hình bind_id đăng nhập và comment nó bằng dấu # ở đầu dòng:

/etc/phpldapadmin/config.php
#$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com'); 

Tùy chọn này điền trước chi tiết đăng nhập administrator trong giao diện web. Đây là thông tin ta không nên chia sẻ nếu trang phpLDAPadmin của ta có thể truy cập .

Điều cuối cùng mà ta cần điều chỉnh là cài đặt kiểm soát khả năng hiển thị của một số thông báo cảnh báo phpLDAPadmin. Mặc định ứng dụng sẽ hiển thị khá nhiều thông báo cảnh báo về các file mẫu. Những điều này không ảnh hưởng đến việc sử dụng phần mềm hiện tại của ta . Ta có thể ẩn chúng bằng cách tìm kiếm tham số hide_template_warning , bỏ comment chứa nó và đặt nó thành true :

/etc/phpldapadmin/config.php
$config->custom->appearance['hide_template_warning'] = true; 

Đây là điều cuối cùng mà ta cần điều chỉnh. Lưu file để hoàn tất. Ta không cần phải khởi động lại bất kỳ thứ gì để các thay đổi có hiệu lực.

Tiếp theo, ta sẽ đăng nhập vào phpLDAPadmin.

Bước 3 - Đăng nhập vào Giao diện web phpLDAPadmin

Sau khi áp dụng các thay đổi cấu hình cần thiết cho phpLDAPadmin, bây giờ ta có thể bắt đầu sử dụng nó. Điều hướng đến ứng dụng trong trình duyệt web . Đảm bảo thay thế domain của bạn cho vùng được đánh dấu bên dưới:

https://example.com/phpldapadmin 

Trang đích phpLDAPadmin sẽ tải. Nhấp vào liên kết đăng nhập trong menu bên trái của trang. Một biểu mẫu đăng nhập sẽ được trình bày:

phpLDAPadmin Trang đăng nhập

Đăng nhập DN là tên user mà bạn sẽ sử dụng. Nó chứa tên account dưới dạng phần cn= và domain bạn đã chọn cho server được chia thành các phần dc= như được mô tả trong các bước trước. Tài khoản administrator mặc định mà ta cài đặt trong quá trình cài đặt được gọi là admin , vì vậy đối với ví dụ của ta , ta sẽ nhập như sau:

cn=admin,dc=example,dc=com 

Sau khi nhập chuỗi thích hợp cho domain của bạn, hãy nhập password quản trị bạn đã tạo trong quá trình cấu hình, sau đó nhấp vào nút Xác thực .

Bạn sẽ được đưa đến giao diện chính:

trang chính của phpLDAPadmin

Đến đây, bạn đã đăng nhập vào giao diện phpLDAPadmin. Bạn có thể thêm user , đơn vị tổ chức, group và mối quan hệ.

LDAP linh hoạt trong cách bạn có thể cấu trúc dữ liệu và phân cấp folder của bạn . Bạn có thể tạo bất kỳ loại cấu trúc nào bạn muốn và cũng có thể tạo các luật về cách chúng tương tác.

Vì quá trình này trên Ubuntu 16.04 giống như trên các version trước, bạn có thể làm theo các bước được trình bày trong phần Thêm đơn vị tổ chức, group và user của bài viết cài đặt LDAP cho Ubuntu 12.04 .

Các bước đó sẽ hoạt động tốt trên cài đặt phpLDAPadmin này, vì vậy hãy làm theo để thực hành một số thao tác với giao diện và học cách cấu trúc dữ liệu .

Bây giờ ta đã đăng nhập và làm quen với giao diện web, hãy dành một chút thời gian để cung cấp bảo mật hơn cho server LDAP của ta .

Bước 4 - Cấu hình mã hóa LDAP StartTLS

Mặc dù ta đã mã hóa giao diện web của bạn , các ứng dụng LDAP bên ngoài vẫn đang kết nối với server và chuyển thông tin ở dạng văn bản thuần túy. Hãy sử dụng certificate SSL Let's Encrypt của ta để thêm mã hóa vào server LDAP của ta .

Sao chép certificate Let's Encrypt

Bởi vì slapd daemon chạy như OpenLDAP user , và các certificate Encrypt Hãy chỉ có thể được đọc bởi user root, ta cần phải thực hiện một vài điều chỉnh để cho phép slapd truy cập vào các certificate . Ta sẽ tạo một tập lệnh ngắn sẽ sao chép các certificate vào /etc/ssl/ , folder hệ thống tiêu chuẩn cho các khóa và certificate SSL. Lý do ta đang tạo một tập lệnh để thực hiện việc này, thay vì chỉ nhập các lệnh theo cách thủ công, là ta cần tự động lặp lại quy trình này khi nào certificate Let's Encrypt được gia hạn. Ta sẽ cập nhật công việc certbot cron sau để kích hoạt điều này.

Đầu tiên, hãy mở một file văn bản mới cho tập lệnh shell:

  • sudo nano /usr/local/bin/renew.sh

Thao tác này sẽ mở một file văn bản trống. Dán vào tập lệnh sau. Đảm bảo cập nhật phần SITE= example.com để phản ánh nơi lưu trữ certificate Let's Encrypt của bạn. Bạn có thể tìm thấy giá trị chính xác bằng cách liệt kê folder certificate với sudo ls /etc/letsencrypt/live .

/usr/local/bin/renew.sh
#!/bin/sh  SITE=example.com  # move to the correct let's encrypt directory cd /etc/letsencrypt/live/$SITE  # copy the files cp cert.pem /etc/ssl/certs/$SITE.cert.pem cp fullchain.pem /etc/ssl/certs/$SITE.fullchain.pem cp privkey.pem /etc/ssl/private/$SITE.privkey.pem  # adjust permissions of the private key chown :ssl-cert /etc/ssl/private/$SITE.privkey.pem chmod 640 /etc/ssl/private/$SITE.privkey.pem  # restart slapd to load new certificates systemctl restart slapd 

Tập lệnh này sẽ di chuyển vào folder certificate Let's Encrypt, sao chép file sang /etc/ssl , sau đó cập nhật các quyền của private key để group ssl-cert của hệ thống có thể đọc được. Nó cũng khởi động lại slapd , điều này sẽ đảm bảo các certificate mới được tải khi tập lệnh này được chạy từ công việc gia hạn certbot của ta .

Lưu file , sau đó làm cho nó có thể thực thi:

  • sudo chmod u+x /usr/local/bin/renew.sh

Sau đó chạy script với sudo :

  • sudo /usr/local/bin/renew.sh

Xác minh tập lệnh hoạt động bằng cách liệt kê các file mới trong /etc/ssl :

  • sudo su -c 'ls -al /etc/ssl/{certs,private}/example.com*'

Lệnh sudo ở trên hơi khác một chút so với bình thường. Các su -c ' . . . ' phần bao bọc toàn bộ ls trong một shell gốc trước khi thực thi nó. Nếu ta không làm điều này, phần mở rộng tên file * ký tự đại diện sẽ chạy với quyền của user không phải sudo của bạn và nó sẽ không thành công vì /etc/ssl/private không thể đọc được bởi user của bạn.

ls sẽ in chi tiết về ba file . Xác minh quyền sở hữu và quyền có đúng không:

Output
-rw-r--r-- 1 root root 1793 May 31 13:58 /etc/ssl/certs/example.com.cert.pem -rw-r--r-- 1 root root 3440 May 31 13:58 /etc/ssl/certs/example.com.fullchain.pem -rw-r----- 1 root ssl-cert 1704 May 31 13:58 /etc/ssl/private/example.com.privkey.pem

Tiếp theo, ta sẽ tự động hóa điều này với certbot .

Cập nhật Công việc Cron Gia hạn Certbot

Ta cần cập nhật công việc certbot cron của bạn để chạy tập lệnh này khi nào các certificate được cập nhật:

  • sudo crontab -e

Bạn đã có dòng certbot renew . Thêm phần được đánh dấu bên dưới:

crontab
15 3 * * * /usr/bin/certbot renew --quiet --renew-hook /usr/local/bin/renew.sh 

Lưu và đóng crontab. Bây giờ, khi nào certbot gia hạn certificate , tập lệnh của ta sẽ được chạy để sao chép file , điều chỉnh quyền và khởi động lại server slapd .

Cấu hình sld để cung cấp kết nối an toàn

Ta cần thêm user openldap vào group ssl-cert để slapd có thể đọc private key :

  • sudo usermod -aG ssl-cert openldap

Khởi động lại slapd để nó chọn group mới:

  • sudo systemctl restart slapd

Cuối cùng, ta cần phải cấu hình slapd để thực sự sử dụng các certificate và khóa này. Để làm điều này, ta đặt tất cả các thay đổi cấu hình của ta trong một file LDIF - viết tắt của định dạng trao đổi dữ liệu LDAP - và sau đó tải các thay đổi vào server LDAP của ta bằng lệnh ldapmodify .

Mở file LDIF mới:

  • cd ~
  • nano ssl.ldif

Thao tác này sẽ mở một file trống. Dán nội dung sau vào file , cập nhật tên file để phản ánh domain của bạn:

ssl.ldif
dn: cn=config changetype: modify add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ssl/certs/example.com.fullchain.pem - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/example.com.cert.pem - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/example.com.privkey.pem 

Lưu file , sau đó áp dụng các thay đổi với ldapmodify :

  • sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ssl.ldif
Output
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config"

Ta không cần phải reload slapd để tải các certificate mới, điều này xảy ra tự động khi ta cập nhật cấu hình với ldapmodify . Chạy lệnh ldapwhoami để xác minh. Lần này ta cần sử dụng tên server phù hợp và thêm tùy chọn -ZZ để buộc kết nối an toàn:

  • ldapwhoami -H ldap://example.com -x -ZZ

Ta cần tên server đầy đủ khi sử dụng kết nối an toàn vì client sẽ kiểm tra đảm bảo rằng tên server trùng với tên server trên certificate . Điều này ngăn chặn các cuộc tấn công man-in-the-middle trong đó kẻ tấn công có thể chặn kết nối của bạn và mạo danh server của bạn.

Lệnh ldapwhoami sẽ trả về anonymous , không có lỗi. Ta đã mã hóa thành công kết nối LDAP của bạn .

Kết luận

Trong hướng dẫn này, ta cài đặt và cấu hình OpenLDAP slapd server , và các trang web LDAP giao diện phpLDAPadmin. Ta cũng cài đặt mã hóa trên cả hai server , và cập nhật certbot để tự động xử lý slapd 's Hãy trình giấy chứng nhận đổi mới Encrypt.

Hệ thống mà ta đã cài đặt khá linh hoạt và bạn có thể thiết kế schemas tổ chức của riêng mình và quản lý các group tài nguyên theo nhu cầu của bạn. Để biết thêm thông tin về cách quản lý LDAP, bao gồm các công cụ và kỹ thuật dòng lệnh khác, hãy đọc hướng dẫn của ta Cách Quản lý và Sử dụng Server LDAP với Tiện ích OpenLDAP . Để biết thêm thông tin chuyên sâu về cách bảo mật server LDAP, bao gồm cách buộc tất cả client sử dụng kết nối an toàn, hãy đọc Cách mã hóa kết nối OpenLDAP bằng STARTTLS .


Tags:

Các tin liên quan

Cách bật SFTP mà không cần truy cập Shell trên Ubuntu 16.04
2017-05-31
Cách tạo Go Executables cho nhiều nền tảng trên Ubuntu 16.04
2017-05-30
Cách cài đặt Concourse CI trên Ubuntu 16.04
2017-05-26
Cách giám sát server và dịch vụ bằng Icinga trên Ubuntu 16.04
2017-05-05
Cách thiết lập đồng bộ hóa thời gian trên Ubuntu 16.04
2017-04-28
Cách quản lý log với Graylog 2 trên Ubuntu 16.04
2017-04-25
Cách cài đặt Webmin trên Ubuntu 16.04
2017-04-21
Cách cài đặt và cấu hình OrientDB trên Ubuntu 16.04
2017-03-24
how-to-monitor-system-metrics-with-the-tick-stack-on-ubuntu-16-04
2017-03-16
Cách cài đặt và cấu hình Postfix trên Ubuntu 16.04
2017-03-16