セルフサービス パスワードをインストールする目的は、LDAP または Windows AD 管理者がパスワードを手動で変更する際の問題点を解決することです。一般に、企業が展開する LDAP にはパスワード有効期限ポリシーがあり、ユーザーは指定された期間内にパスワードを変更する必要があります。パスワードの使用サイクルを更新します。

1、セルフサービスパスワード依存環境をインストールする

1.1 こちら では、必要な依存関係が紹介されています

  • Apache or another web server (これはNginxを使用しています)
  • php (>=7.4) (これはPHP8.0を使用しています)
  • php-curl (haveibeenpwned api)
  • php-filter
  • php-gd (captcha)
  • php-ldap
  • php-mbstring (reset mail) (これには、yum をインストールする前に epel ソースをインストールする必要があります)
  • php-openssl (token crypt, probably built-in)
  • Smarty (version >=3) (インストールする際はバージョンに注意し、デフォルトのphpライブラリファイルのパスを変更してください)

⚠️ 注意 以下のコンパイルとインストールは、gcc または gcc-c++ がインストールされているコンパイルの場合をデフォルトとしています。インストールされていない場合は、PHP のコンパイル > インストール時に対応するライブラリ ファイルが見つからない場合は、インストールする必要があります。状況に応じて、対応するインストール パッケージを選択してください。

1.2 openssl をコンパイルしてインストールする openssl の最新バージョンを openssl公式 Web サイト からダウンロードします

tar -xvf openssl-1.1.1v.tar.gz -C /usr/local/src/
cd /usr/local/src/openssl-1.1.1v
./config --prefix=/opt/openssl
make && make install

1.3 openldap をコンパイルしてインストールする 今回インストールしたのはTLS版です

tar -xvf openldap-2.5.16.tar.gz -C /usr/local/src/
cd /usr/local/src/openldap-2.5.16
export PKG_CONFIG_PATH=/opt/openssl/lib/pkgconfig
env CPPFLAGS="-I/opt/openssl/include" LDFLAGS="-L/opt/openssl/lib -D_GNU_SOURCE" ./configure --prefix=/opt/openldap
make && make install

1.4 Nginxをコンパイルしてインストールします

tar -xvf nginx-1.24.0.tar.gz -C /usr/local/src/
cd /usr/local/src/nginx-1.24.0
./configure \
--prefix=/usr/local/nginx \
--with-http_realip_module \
--with-http_sub_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_v2_module \
--with-openssl=/usr/local/src/openssl-1.1.1v \
--with-pcre=/usr/local/src/pcre-8.45 \
--with-zlib=/usr/local/src/zlib-1.2.12
make && make install

1.5 PHPをコンパイルしてインストールする

tar -xvf php-8.0.30.tar.gz -C /usr/local/src/
cd /usr/local/src/php-8.0.30
./configure \
--prefix=/usr/local/php8 \
--exec-prefix=/usr/local/php8 \
--bindir=/usr/local/php8/bin \
--sbindir=/usr/local/php8/sbin \
--includedir=/usr/local/php8/include \
--libdir=/usr/local/php8/lib/php \
--mandir=/usr/local/php8/php/man \
--with-config-file-path=/usr/local/php8/etc \
--enable-fpm \
--enable-fastcgi \
--with-curl \
--enable-filter \
--enable-gd \
--with-ldap=/opt/openldap \
--enable-mbstring \
--with-openssl=/opt/openssl
make && make install

1.5.1 php 拡張機能 gd.so モジュールをコンパイルしてインストールします 上記のように php をコンパイルすると、セルフサービス パスワード イメージ検証コード機能を使用するため、デフォルトでは gd.so モジュールが存在しません まずイメージ依存パッケージをインストールします

tar -xvf libpng-1.6.40.tar.gz -C /usr/local/src/
tar -xvf jpegsrc.v9e.tar.gz -C /usr/local/src/
tar -xvf freetype-2.13.1.tar.gz -C /usr/local/src/
cd /usr/local/src/libpng-1.6.40
./configure --prefix=/opt/libpng
make && make install
cd /usr/local/src/jpegsrc.v9e
./configure --prefix=/opt/jpeg
make && make install
cd /usr/local/src/freetype-2.13.1
./configure --prefix=/opt/freetype
make && make install

PHP拡張機能gdを再度コンパイルします

yum install autoconf
cd /usr/local/src/php-8.0.30/ext/gd
/usr/local/php/bin/phpize
./configure \
--with-php-config=/usr/local/php8/bin/php-config \
--with-libdir=/opt/libpng/lib \
--with-freetype=/opt/freetype/lib \
--with-jpeg=/opt/jpeg/lib
make && make install

現時点では、/usr/local/php8/lib/php/extensions/no-debug-non-zts-20200930 のようなディレクトリに gd.so モジュールがあります

2、サービス構成ファイルの編集

2.1 PHPサービス php.iniをコンパイルする

###### PHP 情報が http ヘッダーで公開されるのを防ぐ
expose_php = Off
###### php が mysql を呼び出すときにエラー メッセージが表示されないようにする
display_errors = Off
###### display_errors をオフにした後、PHP エラー ログをオンにします (パスは php-fpm.conf で構成されます)
log_errors = On
###### PHP拡張ライブラリのパスを設定する
extension_dir = "/usr/local/php8/lib/php/extensions/no-debug-non-zts-20200930/"
###### PHP の opcache および mysql ダイナミック ライブラリをセットアップする
zend_extension=opcache.so
extension=gd.so
###### PHPのタイムゾーンを設定する
date.timezone = PRC
###### opcache を有効にする
[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1
###### PHPスクリプトがアクセスできるディレクトリを設定します(実際の状況に応じて設定する必要があります)
;open_basedir = /usr/local/nginx/www;

php-fpm.confをコンパイルする

error_log = /var/log/php-fpm/error.log
###### www.conf ファイルに設定をインポートします
include=/usr/local/php8/etc/php-fpm.d/*.conf

www.conf を編集する

###### ユーザーとユーザーグループを設定する
user = nginx
group = nginx
###### nginx.conf の fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; の設定に従って PHP リスニングを設定します
; listen = 127.0.0.1:9000 ##### 推奨されません
listen = /var/run/php-fpm/php-fpm.sock
###### 低速ロギングを有効にする
slowlog = /var/log/php-fpm/$pool-slow.log
request_slowlog_timeout = 10s
###### phpのセッションディレクトリを設定します(ユーザー、ユーザーグループともにnginx)
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session

2.2 Nginxサービス nginx.confを編集する

user nginx nginx;
worker_processes auto;
...省略...
events {
use epoll;
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
server_tokens off;
...省略...
server {
listen 80;
server_name localhost;
root www/self/htdocs;
index index.php index.html index.htm;
location ~* \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED /usr/local/nginx/www/self/htdocs$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/www/self/htdocs$fastcgi_script_name;
fastcgi_index index.php;
try_files $fastcgi_script_name =404;
fastcgi_read_timeout 600;
include fastcgi_params;
}
...省略...
}
}

⚠️ 注意 /sbin/nologin 属性を持つ nginx ユーザーを使用し、Web プロジェクト ディレクトリの権限を nginx:nginx として定義しているため、GET 経由でアクセスするとページに 403 というプロンプトが表示されます。Web プロジェクト ディレクトリは nginx インストール ディレクトリの下に置くことしかできません。通常どおり GET を通じてページにアクセスします

2.3 セルフサービス パスワード サービス Smarty ライブラリを構成する 現時点では、self-service-password PHP サービスには通常アクセスできません。デフォルトの Smarty ライブラリ ファイルが /usr/share/ ディレクトリを指しているため、サービスが見つからず、最新バージョンをダウンロードする必要があります。この ページ はマークされています>対応するバージョンは指定された php バージョンを使用します。ダウンロードするには、ここ をクリックしてください。スマーティ/リリース)

tar -xvf smarty-4.3.2.tar.gz
cd smarty-4.3.2
mv libs /usr/local/nginx/www/self/smarty

编辑/usr/local/nginx/www/self/conf/config.inc.php

### 約410行を修正
if (!defined("SMARTY")) {
define("SMARTY", "/usr/share/self/smarty/Smarty.class.php");
}
に変更します
if (!defined("SMARTY")) {
define("SMARTY", "/usr/local/nginx/www/self/smarty/Smarty.class.php");
}
397~398行目あたりのコメントをキャンセルします
$smarty_compile_dir = "/usr/local/nginx/www/self/templates_c";
$smarty_cache_dir = "/usr/local/nginx/www/self/cache";
パスを設定したパスに変更します

3、セルフサービスパスワードサービスを構成する

/usr/local/nginx/www/self/conf/config.inc.php を編集します

$keyphrase # このパラメータの後にランダムな文字列を入力します。入力しない場合、ページは正しく表示されません
$use_questions = false; # 問題の回復を無効にする
$use_sms = false; # SMS 取得を無効にする
use_tokens = false; # 電子メールの取得を無効にする
# 上記の機能は使用しないので、必要に応じてオンにして設定できます
$use_captcha = true; # 画像検証コードを有効にする
$pwd_min_length = 8; # パスワードの最小長
$pwd_max_length = 32; # パスワードの最大長
$pwd_complexity = 3; # パスワードには複数の文字タイプが含まれています
$pwd_show_policy = "always"; # パスワードポリシーを示すページ
最後のステップは、対応するパラメータを入力するだけです。

4、最終製品写真