Thứ năm, 02/04/2020 | 00:00 GMT+7

Cách cài đặt và cấu hình SimpleSAMLphp để Xác thực SAML trên Ubuntu 18.04

SimpleSAMLphp là một ứng dụng xác thực PHP open-souce cung cấp hỗ trợ cho SAML 2.0 với quyền là Nhà cung cấp dịch vụ (SP) hoặc Nhà cung cấp danh tính (IdP).

SAML (Ngôn ngữ đánh dấu xác nhận bảo mật) là một cơ chế giao tiếp dựa trên XML an toàn để trao đổi dữ liệu xác thực và ủy quyền giữa các tổ chức và ứng dụng. Nó thường được sử dụng để triển khai Web SSO (Đăng nhập một lần). Điều này giúp loại bỏ nhu cầu duy trì nhiều thông tin xác thực trên nhiều tổ chức. Nói một cách đơn giản, bạn có thể sử dụng một danh tính, như tên user và password , để truy cập nhiều ứng dụng.

Một version của SimpleSAMLphp kết nối với nguồn xác thực , là nhà cung cấp danh tính như LDAP hoặc database user . Nó xác thực user dựa trên nguồn xác thực này trước khi cấp quyền truy cập vào các tài nguyên có sẵn từ các Nhà cung cấp dịch vụ được liên kết.

Trong hướng dẫn này, bạn sẽ cài đặt SimpleSamlPHP và cấu hình nó để sử dụng database MySQL làm nguồn xác thực. Bạn sẽ lưu trữ user và password được mã hóa trong database MySQL và kiểm tra xem bạn có thể sử dụng những user đó để đăng nhập hay không.

Yêu cầu

Bước 1 - Download và cài đặt SimpleSAMLphp

Cài đặt SimpleSAMLphp bao gồm một vài bước. Ta phải download chính phần mềm cũng như một số thành phần bổ sung và yêu cầu . Ta cũng cần thực hiện một số thay đổi đối với cấu hình Server ảo của bạn .

Đăng nhập vào server của bạn nếu bạn chưa đăng nhập.

Download SimpleSAMLphp từ trang web của dự án. SimpleSAMLphp luôn liên kết version ổn định mới nhất của phần mềm của họ với cùng một URL. Điều này nghĩa là ta có thể nhận được version mới nhất bằng lệnh sau:

  • wget https://simplesamlphp.org/download?latest

Thao tác này sẽ download file nén có tên là download?latest có chứa SimpleSAMLphp. Extract nội dung bằng lệnh tar :

  • tar zxf download?latest

Các file sẽ được extract vào một folder mới có nhãn simplesamlphp-1. xy , trong đó xy là số version hiện tại. Sử dụng ls để xác định file :

  • ls

Bạn sẽ thấy tên file được hiển thị:

Ouptut
simplesamlphp-1.18.5

Bây giờ, sao chép nội dung của folder vào /var/simplesamlphp bằng cách sử dụng lệnh cp . Đảm bảo thay thế số version bằng version bạn có:

  • sudo cp -a simplesamlphp-1.x.y/. /var/simplesamlphp/

Lựa chọn -a đảm bảo các quyền file được sao chép cùng với các file và folder . Dấu chấm ở cuối file nguồn đảm bảo mọi thứ trong folder nguồn bao gồm các file ẩn đều được sao chép vào folder đích.

Lưu ý: Nếu bạn cần cài đặt file ở một vị trí khác, bạn cần cập nhật một số file . Tham khảo tài liệu cài đặt chính thức của SimpleSAMLphp để biết thêm chi tiết.

Có một số gói phần mềm bổ sung mà SimpleSAMLphp cần, bao gồm các phần mở rộng PHP để hoạt động với XML, chuỗi nhiều byte, curl và LDAP. Nó cũng yêu cầu memcached . Cài đặt chúng bằng trình quản lý gói của bạn.

Trước tiên, hãy cập nhật danh sách gói của bạn:

  • sudo apt update

Sau đó cài đặt các gói:

  • sudo apt install php-xml php-mbstring php-curl php-memcache php-ldap memcached

Sau khi cài đặt hoàn tất, hãy khởi động lại Apache để kích hoạt các phần mở rộng PHP mới:

  • sudo systemctl restart apache2

Bây giờ SimpleSAMLphp đã được cài đặt, hãy cấu hình Apache để phân phát các file .

Bước 2 - Cấu hình Apache để phục vụ SimpleSAMLphp

Bạn đã cấu hình một domain và chỉ vào server này và bạn đã cài đặt Server ảo để hoạt động với HTTPS bằng cách bảo mật Apache bằng Let's Encrypt. Hãy sử dụng nó để phục vụ SimpleSAMLphp.

Thư mục SimpleSAMLphp duy nhất cần hiển thị trên web là /var/simplesamlphp/www . Để hiển thị nó trên web, hãy chỉnh sửa file cấu hình Server ảo SSL Apache cho domain của bạn.

Nếu file cấu hình Server ảo của bạn có tên your_domain .conf , Let's Encrypt đã tạo một file cấu hình mới có tên your_domain -le-ssl.conf để xử lý các yêu cầu HTTPS cho domain của bạn. Mở file cấu hình SSL bằng lệnh sau để chỉnh sửa file . Đảm bảo thay thế your_domain bằng tên thực của file :

  • sudo nano /etc/apache2/sites-available/your_domain-le-ssl.conf

Tệp sẽ trông giống như sau, mặc dù file thực tế có thể có nhiều comment mô tả hơn:

your_domain-le-ssl.conf '> / etc / apache2 / sites-available / your_domain -le-ssl.conf
<IfModule mod_ssl.c> <VirtualHost *:443>         ServerName your_domain          ServerAdmin webmaster@localhost         DocumentRoot /var/www/html          ErrorLog ${APACHE_LOG_DIR}/error.log         CustomLog ${APACHE_LOG_DIR}/access.log combined  SSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/your_domain/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule> 

Lệnh ServerName ở đây xác định domain cơ sở phù hợp với định nghĩa server ảo này. Đây phải là domain mà bạn cài đặt certificate SSL trong phần Yêu cầu . Hãy thêm chỉ thị Alias cung cấp quyền kiểm soát cho SimpleSAMLphp cho tất cả các URL trùng với https:// your_domain /simplesaml/* . Làm điều đó bằng cách thêm dòng sau vào file cấu hình:

your_domain-le-ssl.conf '> / etc / apache2 / sites-available / your_domain -le-ssl.conf
...   ServerAdmin webmaster@localhost   DocumentRoot /var/www/html    Alias /simplesaml /var/simplesamlphp/www  ... 

Điều này nghĩa là tất cả các URL trùng với domain_name /simplesaml/* sẽ được chuyển hướng đến folder /var/simplesamlphp/www cho phép kiểm soát SimpleSAMLphp.

Tiếp theo, ta sẽ cấp quyền truy cập vào folder /var/simplesamlphp/www bằng cách chỉ định Require all granted điều khiển truy cập Require all granted cho nó. Điều này sẽ làm cho dịch vụ SimpleSAMLphp có thể truy cập được qua Web. Làm điều đó bằng cách thêm phần sau vào file cấu hình:

your_domain-le-ssl.conf '> / etc / apache2 / sites-available / your_domain -le-ssl.conf
...   Alias /simplesaml /var/simplesamlphp/www   <Directory /var/simplesamlphp/www/>       Require all granted   </Directory> ... 

Lưu và đóng file . Khởi động lại Apache để các thay đổi có hiệu lực:

  • sudo systemctl restart apache2

Bây giờ Apache đã được cấu hình để phục vụ các file ứng dụng, hãy cấu hình SimpleSAMLphp.

Bước 3 - Cấu hình SimpleSAMLphp

Tiếp theo, ta cần thực hiện một số thay đổi đối với cấu hình SimpleSAMLphp cốt lõi nằm tại / /var/simplesamlphp/config/config.php . Mở file trong editor :

  • nano /var/simplesamlphp/config/config.php

Đặt password administrator bằng cách tìm dòng 'auth.adminpassword' và thay thế giá trị mặc định là 123 bằng một password an toàn hơn. Mật khẩu này cho phép bạn truy cập một số trang trong giao diện web cài đặt SimpleSAMLphp của bạn:

/var/si samplesamlphp/config/config.php
. . . 'auth.adminpassword'        => 'your_admin_password', . . . 

Tiếp theo, đặt muối bí mật, phải là một chuỗi ký tự được tạo ngẫu nhiên. Một số phần của SimpleSAMLphp sử dụng muối này để tạo các hàm băm an toàn bằng mật mã. Bạn sẽ gặp lỗi nếu muối không được thay đổi từ giá trị mặc định.

Bạn có thể sử dụng hàm rand OpenSSL để tạo một chuỗi ngẫu nhiên để sử dụng làm chuỗi muối bí mật của bạn . Mở một terminal mới, kết nối lại với server của bạn và chạy lệnh sau để tạo chuỗi này:

  • openssl rand -base64 32

Tùy chọn -base64 32 đảm bảo một chuỗi được mã hóa Base64 dài 32 ký tự.

Sau đó, trong file cấu hình, tìm mục nhập 'secretsalt' và thay thế defaultsecretsalt bằng chuỗi bạn đã tạo:

/var/si samplesamlphp/config/config.php
. . . 'secretsalt' => 'your_generated_salt', . . . 

Sau đó đặt thông tin liên hệ kỹ thuật. Thông tin này sẽ có sẵn trong metadata đã tạo và SimpleSAMLphp sẽ gửi báo cáo lỗi được tạo tự động đến địa chỉ email bạn chỉ định. Tìm phần sau:

/var/si samplesamlphp/config/config.php
. . . 'technicalcontact_name'     => 'Administrator', 'technicalcontact_email'    => 'na@example.org', . . . 

Thay thế Administratorna@example.org bằng các giá trị thích hợp.

Sau đó, đặt múi giờ bạn muốn sử dụng. Tìm phần này:

/var/si samplesamlphp/config/config.php
. . . 'timezone' => null, . . . 

Thay thế null bằng múi giờ ưa thích từ danh sách múi giờ này cho PHP . Đảm bảo đặt giá trị trong dấu ngoặc kép:

/var/si samplesamlphp/config/config.php
. . . 'timezone' => 'America/New_York', . . . 

Lưu và đóng file . Bây giờ, bạn có thể truy cập trang web trong trình duyệt của bạn bằng cách truy cập https:// your_domain /simplesaml . Bạn sẽ thấy màn hình sau trong trình duyệt của bạn :

giao diện web simplesaml

Để đảm bảo cài đặt PHP của bạn đáp ứng tất cả các yêu cầu để SimpleSAMLphp chạy trơn tru, hãy chọn tab Cấu hình và nhấp vào liên kết Đăng nhập với quyền administrator . Sau đó, sử dụng password administrator mà bạn đã đặt trong file cấu hình ở Bước 3.

Sau khi đăng nhập, bạn sẽ thấy danh sách các phần mở rộng PHP bắt buộc và tùy chọn được SimpleSAMLphp sử dụng. Kiểm tra xem bạn đã cài đặt mọi tiện ích mở rộng ngoại trừ phần mở rộng predis/predis :

Đã cài đặt tất cả các tiện ích mở rộng

Nếu thiếu bất kỳ thành phần bắt buộc nào, hãy xem lại hướng dẫn này và cài đặt các thành phần bị thiếu trước khi bạn tiếp tục.

Bạn cũng sẽ thấy một liên kết có nội dung Kiểm tra tình trạng cài đặt SimpleSAMLphp của bạn . Nhấp vào liên kết này để xem danh sách các kiểm tra được áp dụng cho cài đặt của bạn để xem liệu chúng có thành công hay không.

Hãy chuyển sang cấu hình nguồn xác thực cho SimpleSAMLphp.

Bước 4 - Cấu hình nguồn xác thực

Bây giờ ta đã cài đặt và cài đặt SimpleSAMLphp, hãy cấu hình nguồn xác thực để ta có thể xác thực user . Ta sẽ sử dụng database MySQL để lưu trữ danh sách tên user và password để xác thực.

Để bắt đầu, hãy đăng nhập vào account gốc MySQL:

  • mysql -u root -p

Bạn sẽ được yêu cầu nhập password account root MySQL. Cung cấp nó để tiếp tục.

Tiếp theo, tạo một database sẽ hoạt động như nguồn xác thực. Ta sẽ gọi nó là auth . Hãy đặt tên khác cho bạn:

  • CREATE DATABASE auth DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Bây giờ, hãy tạo một user MySQL riêng để hoạt động độc quyền trên database auth của ta . Từ quan điểm quản lý và bảo mật, bạn nên tạo database và account một chức năng. Ta sẽ đặt tên AUTHUSER user của ta . Thực thi lệnh sau để tạo user , đặt password và cấp cho người đó quyền truy cập vào database auth của ta . Hãy nhớ cung cấp một password mạnh tại đây cho user database mới của bạn.

  • GRANT ALL ON auth.* TO 'authuser'@'localhost' IDENTIFIED BY 'your_mysql_auth_user_password';

Bây giờ, hãy tạo một bảng users , bảng này sẽ được tạo thành từ hai trường: usernamepassword . Đối với một số bảo mật bổ sung, ta sẽ sử dụng hàm MySQL AES_ENCRYPT() để mã hóa chuỗi password để ta không lưu trữ password dưới dạng văn bản thuần túy. Hàm này mã hóa một chuỗi và trả về một chuỗi binary .

  • CREATE TABLE auth.users(username VARCHAR(30), password VARBINARY(30));

Sau đó, chèn ba user vào bảng mới tạo. Đây là nơi ta sẽ sử dụng hàm AES_ENCRYPT() để mã hóa các giá trị cho trường password . Bạn cần cung cấp một chuỗi được sử dụng làm khóa mã hóa. Đảm bảo thay thế chuỗi này bằng chuỗi của bạn , có thể là bất kỳ chuỗi nào bạn muốn, miễn là nó phức tạp.

  • INSERT INTO auth.users(username, password) VALUES
  • ('user1', AES_ENCRYPT('user1pass','your_secret_key')),
  • ('user2', AES_ENCRYPT('user2pass','your_secret_key')),
  • ('user3', AES_ENCRYPT('user3pass','your_secret_key'));

Sử dụng cùng một khóa cho mỗi user và nhớ nhớ khóa để bạn có thể sử dụng lại khóa đó để tạo thêm user trong tương lai. Bạn cũng sẽ sử dụng khóa bí mật này trong cấu hình SimpleSAMLphp để bạn có thể giải mã password và so sánh chúng với password mà user nhập.

Ta cần xóa các quyền để version hiện tại của MySQL biết về những thay đổi quyền gần đây mà ta đã thực hiện:

  • FLUSH PRIVILEGES;

Thoát khỏi dấu nhắc MySQL bằng lệnh :

  • exit

Để bật chức năng của nhà cung cấp danh tính trong SimpleSAMLphp, ta cần chỉnh sửa file / /var/simplesamlphp/config/config.php . Có một số tùy chọn khả dụng nhưng vì hướng dẫn này tập trung vào hỗ trợ SAML 2.0, ta muốn bật tùy chọn enable.saml20-idp . Để làm điều đó, hãy mở / /var/simplesamlphp/config/config.php và bật hỗ trợ SAML 2.0:

  • nano /var/simplesamlphp/config/config.php

Tìm phần này của file và thay thế false bằng true . :

/var/si samplesamlphp/config/config.php
... 'enable.saml20-idp' => true, ... 

Sau đó, lưu file và thoát khỏi editor .

Bây giờ ta đã bật chức năng nhà cung cấp danh tính, ta cần chỉ ra module xác thực sẽ được sử dụng. Vì ta có một bảng user trên database MySQL, ta sẽ sử dụng Mô-đun Xác thực SQL. Mở file cấu hình authsources:

  • nano /var/simplesamlphp/config/authsources.php

Xác định vị trí khối sau, được comment :

/var/si samplesamlphp/config/authsources.php
...     /*     'example-sql' => array(         'sqlauth:SQL',         'dsn' => 'pgsql:host=sql.example.org;port=5432;dbname=simplesaml',         'username' => 'simplesaml',         'password' => 'secretpassword',         'query' => 'SELECT uid, givenName, email, eduPersonPrincipalName FROM users WHERE uid = :username AND password = SHA2(CONCAT((SELECT salt FROM users WHERE uid = :username), :password),256);',     ),     */ ... 

Mã này xác định kết nối database và truy vấn mà SimpleSAMLphp có thể sử dụng để tra cứu user trong bảng database được gọi là users . Ta cần bỏ ghi chú nó và thay đổi truy vấn để tìm kiếm user từ bảng của ta bằng cách sử dụng hàm AES_DECRYPT() của MySQL. Ta cần cung cấp cho hàm AES_DECRYPT() cùng một khóa mà ta đã sử dụng để mã hóa password trong truy vấn.

Sửa đổi phần của file để chỉ định chi tiết kết nối database và truy vấn:

/var/si samplesamlphp/config/authsources.php
...     'example-sql' => array(         'sqlauth:SQL',         'dsn' => 'mysql:host=localhost;port=5432;dbname=auth',         'username' => 'authuser',         'password' => 'your_mysql_auth_user_password',         'query' => 'SELECT username FROM users WHERE username = :username AND AES_DECRYPT(password,"your_secret_key") = :password',     ), ... 

Đảm bảo đặt khóa bí mật bạn đã chỉ định thay cho your_secret_key .

Lưu và đóng file . Hãy kiểm tra nhà cung cấp danh tính của ta .

Bước 5 - Kiểm tra Nhà cung cấp danh tính với Bản trình diễn SAML 2.0 SP

Bạn có thể kiểm tra nguồn xác thực MySQL mà bạn vừa cài đặt bằng cách chuyển đến tab Xác thực và nhấp vào liên kết Kiểm tra nguồn xác thực đã cấu hình . Bạn sẽ thấy danh sách các nguồn xác thực đã được cấu hình .

Danh sách các nguồn xác thực đã  cấu hình

Nhấp vào example-sql , vì đây là nhà cung cấp mà bạn đã cấu hình ở bước trước. Một dấu nhắc nhập tên user và password sẽ xuất hiện. Nhập bất kỳ kết hợp user và password thử nghiệm nào bạn đã chèn vào bảng user MySQL. Hãy thử user1 với password user1pass .

Với một lần thử thành công, bạn sẽ được xem trang Ví dụ về Bản trình diễn SAML 2.0 SP :

Trang Demo thành công

Nếu bạn không thể đăng nhập và biết password chính xác, hãy đảm bảo bạn đã sử dụng cùng một khóa với cả hàm AES_ENCRYPT() khi tạo user và hàm AES_DECRYPT() khi bạn tra cứu user .

Như vậy, bạn có thể tích hợp SimpleSAMLphp với các ứng dụng của riêng mình theo tài liệu API SimpleSAMLphp .

Kết luận

Đến đây bạn đã cài đặt và cấu hình ứng dụng SimpleSAMLphp một cách thích hợp trên VPS Ubuntu 18.04 của bạn . SimpleSAMLphp cũng cho phép tùy biến giao diện user rộng rãi thông qua các chủ đề. Bạn có thể tham khảo tài liệu chuyên đề của họ để biết thêm về điều đó.


Tags:

Các tin liên quan

Cách sử dụng Vuls làm máy quét lỗ hổng bảo mật trên Ubuntu 18.04
2020-04-01
Cách tạo người dùng mới hỗ trợ Sudo trên Ubuntu 18.04 [Quickstart]
2020-03-23
Cách cài đặt và cấu hình SNMP Daemon và Client trên Ubuntu 18.04
2020-03-17
Cách lưu trữ một trang web với Caddy trên Ubuntu 18.04
2020-03-13
Cách sử dụng nsh để chạy các lệnh từ xa an toàn trên Ubuntu 18.04
2020-03-04
Cách đóng gói và xuất bản ứng dụng Snap trên Ubuntu 18.04
2020-02-25
Cách thiết lập Nền tảng Eclipse Theia Cloud IDE trên Ubuntu 18.04 [Khởi động nhanh]
2020-02-10
Cách sử dụng Cron để tự động hóa công việc trên Ubuntu 18.04
2020-01-31
Cách cài đặt và sử dụng Radamsa để Fuzz kiểm tra các chương trình và dịch vụ mạng trên Ubuntu 18.04
2020-01-30
Cách cài đặt Tinc và thiết lập VPN cơ bản trên Ubuntu 18.04
2020-01-21