オラクる。

oracle専門ブログにしてみようかな~っと

2016年03月

openldapのインストールが完了したので、ユーザー、グループを作成します。
構成情報の元となるldifファイルを作成し、ldapaddコマンドでファイルを読み込み、ユーザー、グループなどのオブジェクトを格納します。

[root@ldap01 ~]# cat init.ldif
dn: dc=test,dc=local
objectClass: dcObject
objectClass: organization
o: myorganization
dc: test

dn: cn=Manager,dc=test,dc=local
objectClass: organizationalRole
cn: Manager

dn: ou=People,dc=test,dc=local
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=test,dc=local
objectClass: organizationalUnit
ou: Group

[root@ldap01 ~]# ldapadd -x -D "cn=manager,dc=test,dc=local" -W -f init.ldif
Enter LDAP Password:
adding new entry "dc=test,dc=local"

adding new entry "cn=Manager,dc=test,dc=local"

adding new entry "ou=People,dc=test,dc=local"

adding new entry "ou=Group,dc=test,dc=local"


まずはドメイン本体、OUを作成します。
test.localドメインにManager、People、GroupというOUが作成されました。

[root@ldap01 ~]# cat group.ldif
dn: cn=group01,ou=Group,dc=test,dc=local
objectClass: posixGroup
objectClass: top
cn: member01
gidNumber: 3001

dn: cn=group02,ou=Group,dc=test,dc=local
objectClass: posixGroup
objectClass: top
cn: member02
gidNumber: 3002

dn: cn=group03,ou=Group,dc=test,dc=local
objectClass: posixGroup
objectClass: top
cn: member03
gidNumber: 3003

[root@ldap01 ~]# ldapadd -x -D "cn=manager,dc=test,dc=local" -W -f group.ldif
Enter LDAP Password:
adding new entry "cn=group01,ou=Group,dc=test,dc=local"

adding new entry "cn=group02,ou=Group,dc=test,dc=local"

adding new entry "cn=group03,ou=Group,dc=test,dc=local"


続いてグループを作成します。
group01,02,03というグループが作成されました。

[root@ldap01 ~]# cat user.ldif

dn: uid=user01,ou=People,dc=test,dc=local
uid: user01
cn: Test User 01
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: {CRYPT}YDgPa.WUDLqp.
loginShell: /bin/bash
uidNumber: 5001
gidNumber: 3001
homeDirectory: /home/user01

dn: uid=user02,ou=People,dc=test,dc=local
uid: user01
cn: Test User 02
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: {CRYPT}YDgPa.WUDLqp.
loginShell: /bin/bash
uidNumber: 5002
gidNumber: 3002
homeDirectory: /home/user02

dn: uid=user03,ou=People,dc=test,dc=local
uid: user03
cn: Test User 03
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: {CRYPT}YDgPa.WUDLqp.
loginShell: /bin/bash
uidNumber: 5003
gidNumber: 3003
homeDirectory: /home/user03

[root@ldap01 ~]# ldapadd -x -D "cn=manager,dc=test,dc=local" -W -f user.ldif
Enter LDAP Password:
adding new entry "uid=user01,ou=People,dc=test,dc=local"

adding new entry "uid=user02,ou=People,dc=test,dc=local"

adding new entry "uid=user03,ou=People,dc=test,dc=local"


続いてユーザーを作成します。
user01,02,03というユーザーが作成されました。

以上で、openldapサーバー側の準備が整いました。
次回はクライアント側の設定をしてみます。

前回まででopenldapをインストールしたので、起動、停止を確認してみます。

[root@ldap01 ~]# id ldap
id: ldap: そのようなユーザは存在しません
[root@ldap01 ~]# groupadd ldap
[root@ldap01 ~]# useradd -g ldap -s /bin/false ldap


起動する前に専用のldapユーザーを作成します。

[root@ldap01 ~]# cd /opt/openldap-2.4.44/
[root@ldap01 openldap-2.4.44]# ls -al
合計 40
drwxr-xr-x  10 root root 4096  3月 27 00:49 2016 .
drwxr-xr-x.  6 root root 4096  3月 27 00:49 2016 ..
drwxr-xr-x   2 root root 4096  3月 27 00:49 2016 bin
drwxr-xr-x   3 root root 4096  3月 27 00:49 2016 etc
drwxr-xr-x   2 root root 4096  3月 27 00:49 2016 include
drwxr-xr-x   2 root root 4096  3月 27 00:49 2016 lib
drwxr-xr-x   2 root root 4096  3月 27 00:49 2016 libexec
drwxr-xr-x   2 root root 4096  3月 27 00:49 2016 sbin
drwxr-xr-x   3 root root 4096  3月 27 00:49 2016 share
drwxr-xr-x   4 root root 4096  3月 27 00:49 2016 var

[root@ldap01 openldap-2.4.44]# chown root.ldap etc/openldap/slapd.conf
[root@ldap01 openldap-2.4.44]# chmod g+r etc/openldap/slapd.conf
[root@ldap01 openldap-2.4.44]# chown ldap.ldap -R var
[root@ldap01 openldap-2.4.44]# ls -al
合計 40
drwxr-xr-x  10 root root 4096  3月 27 00:49 2016 .
drwxr-xr-x.  6 root root 4096  3月 27 00:49 2016 ..
drwxr-xr-x   2 root root 4096  3月 27 00:49 2016 bin
drwxr-xr-x   3 root root 4096  3月 27 00:49 2016 etc
drwxr-xr-x   2 root root 4096  3月 27 00:49 2016 include
drwxr-xr-x   2 root root 4096  3月 27 00:49 2016 lib
drwxr-xr-x   2 root root 4096  3月 27 00:49 2016 libexec
drwxr-xr-x   2 root root 4096  3月 27 00:49 2016 sbin
drwxr-xr-x   3 root root 4096  3月 27 00:49 2016 share
drwxr-xr-x   4 ldap ldap 4096  3月 27 00:49 2016 var


作成したユーザーに対して、ファイルやフォルダの権限を与えます。

[root@ldap01 openldap-2.4.44]# vi ~/.bash_profile



export LD_LIBRARY_PATH=/usr/local/BerkeleyDB.5.1/lib


DBをソースからインストールした場合、環境変数LD_LIBRARY_PATHにDBライブラリのパスを指定します。

[root@ldap01 openldap-2.4.44]# cp -p var/openldap-data/DB_CONFIG.example var/openldap-data/DB_CONFIG
[root@ldap01 openldap-2.4.44]# ./sbin/slaptest -u
config file testing succeeded


openldap用DBの設定ファイルのサンプルファイルをコピーし、本ファイルとします。
そして、slaptestコマンドで、設定ファイルのテストを行ないます。
「succeeded」となることを確認します。

[root@ldap01 openldap-2.4.44]# ./libexec/slapd -u ldap
[root@ldap01 openldap-2.4.44]# ps -ef | grep [l]dap
ldap     32041     1  0 00:17 ?        00:00:00 ./libexec/slapd -u ldap


早速、openldapを起動します。

[root@ldap01 openldap-2.4.44]# ./bin/ldapsearch -x -h localhost -b dc=example,dc=com -LLL
No such object (32)


ldapsearchコマンドで、検索が行えることを確認します。

[root@ldap01 openldap-2.4.44]# kill -INT `cat var/run/slapd.pid`
[root@ldap01 openldap-2.4.44]# ps -ef | grep [l]dap
[root@ldap01 openldap-2.4.44]#


停止はkillコマンドで行ないます。

次回は実際にユーザーを作成したりをしたいと思います。

nginxの認証にopenldapを使う方法を検証してみます。
まずはopenldapのインストールから

[root@ldap01 ~]# yum install gcc
[root@ldap01 ~]# yum install openssl-devel
[root@ldap01 ~]# yum install cyrus-sasl-devel


必要なパッケージがインストールされているかを確認しています。

[root@ldap01 src]# wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.44.tgz
--2016-03-27 00:34:27--  ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.44.tgz
           => `openldap-2.4.44.tgz'
ftp.openldap.org をDNSに問いあわせています... 23.92.27.230, 2600:3c01::f03c:91ff:fedb:ad59
ftp.openldap.org|23.92.27.230|:21 に接続しています... 接続しました。
anonymous としてログインしています... ログインしました!
==> SYST ... 完了しました。    ==> PWD ... 完了しました。
==> TYPE I ... 完了しました。  ==> CWD (1) /pub/OpenLDAP/openldap-release ... 完了しました。
==> SIZE openldap-2.4.44.tgz ... 5658830
==> PASV ... 完了しました。    ==> RETR openldap-2.4.44.tgz ... 完了しました。
長さ: 5658830 (5.4M) (確証はありません)

100%[======================================>] 5,658,830   2.78M/s 時間 1.9s

2016-03-27 00:34:35 (2.78 MB/s) - `openldap-2.4.44.tgz' へ保存終了 [5658830]


公式サイトよりopenldapのソースをダウンロードしてきます。

[root@ldap01 src]# tar zxvf openldap-2.4.44.tgz
[root@ldap01 src]# cd openldap-2.4.44
[root@ldap01 openldap-2.4.44]# less README



    SLAPD:
        BDB and HDB backends require Oracle Berkeley DB 4.4 - 4.8,
        or 5.0 - 5.1.  It is highly recommended to apply the
        patches from Oracle for a given release.


解凍してreadmeを開きます。
必要なBerkeleyDBのバージョンを確認します。

[root@ldap01 src]# wget http://download.oracle.com/berkeley-db/db-5.1.29.tar.gz
--2016-03-27 00:41:30--  http://download.oracle.com/berkeley-db/db-5.1.29.tar.gz
download.oracle.com をDNSに問いあわせています... 202.229.2.123, 202.229.2.98
download.oracle.com|202.229.2.123|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 32188074 (31M) [application/x-gzip]
`db-5.1.29.tar.gz' に保存中

100%[======================================>] 32,188,074  2.72M/s 時間 9.2s

2016-03-27 00:41:40 (3.34 MB/s) - `db-5.1.29.tar.gz' へ保存完了 [32188074/32188074]


指定されていたバージョンで最新のバージョンをoracleサイトよりダウンロードします。

[root@ldap01 src]# tar zxvf db-5.1.29.tar.gz
[root@ldap01 src]# cd db-5.1.29
[root@ldap01 db-5.1.29]# cd build_unix/
[root@ldap01 build_unix]# ../dist/configure
[root@ldap01 build_unix]# make && make install

ソースを解凍
コンパイル、インストールを行ないます。
BerkeleyDBのインストール後、openldapのインストールです。

[root@ldap01 openldap-2.4.44]# export LD_LIBRARY_PATH=/usr/local/BerkeleyDB.5.1/lib/

インストール前に環境変数にBerkeleyDBのライブラリのパスを指定します。

[root@ldap01 openldap-2.4.44]# CPPFLAGS=-I/usr/local/BerkeleyDB.5.1/include \
> LDFLAGS=-L/usr/local/BerkeleyDB.5.1/lib \
> ./configure --prefix=/opt/openldap-2.4.44

[root@ldap01 openldap-2.4.44]# make depend
[root@ldap01 openldap-2.4.44]# make && make install


ライブラリとインクルードファイルのパスを指定して、コンフィグレーション、コンパイル、インストールを行ないます。

[root@ldap01 openldap-2.4.44]# ldd /opt/openldap-2.4.44/libexec/slapd | grep Berkeley
        libdb-5.1.so => /usr/local/BerkeleyDB.5.1/lib/libdb-5.1.so (0x00007f222e2d1000)


インストール後、dbのライブラリが読み込まれていることを確認します。

==
次回はopenldapの動作確認です。

Nginxを利用したBasic Auth(認証)の設定をしてみます。

[root@nginx01 ~]# yum install httpd-tools
読み込んだプラグイン:product-id, refresh-packagekit, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
インストール処理の設定をしています
rhel-dvd                                                 | 4.1 kB     00:00 ...
パッケージ httpd-tools-2.2.15-45.el6.x86_64 はインストール済みか最新バージョンです
何もしません


まずはhttpd-toolsパッケージがインストールされているかを確認します。
今回の環境ではインストールされていました。

[root@nginx01 ~]# htpasswd -c /etc/nginx/.htpasswd username
New password:
Re-type new password:
Adding password for user username


htpasswdコマンドを利用し、パスワードファイルを作成します。

[root@nginx01 ~]# vi /etc/nginx/nginx.conf



                location / {
                        auth_basic "Restricted";
                        auth_basic_user_file /etc/nginx/.htpasswd;


作成したパスワードファイルを設定ファイル内で指定します。

basic_auth

ブラウザでアクセスし、認証ダイアログが表示されることを確認しました。

NginxではSSL Terminateと言う、front側でSSLの検証を行ない、frontとbackendの通信はnon-SSLで行なうというロードバランスを行なうことが出来ます。

[root@nginx01 ~]# openssl req -new -x509 -sha256 -newkey rsa:2048 -days 365 -nodes -out /etc/nginx/ssl/nginx.pem -keyout /etc/nginx/ssl/nginx.key
Generating a 2048 bit RSA private key
.......+++
....+++
writing new private key to '/etc/nginx/ssl/nginx.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Chiyoda
Organization Name (eg, company) [Internet Widgits Pty Ltd]:test company
Organizational Unit Name (eg, section) []:System
Common Name (e.g. server FQDN or YOUR name) []:nginx01
Email Address []:test@test.com


まずは、opensslで証明書と鍵を作成します。

http {
        upstream mywebapp1 {
                server 192.168.200.2;
                server 192.168.200.3;
        }


続いて、nginx設定ファイルの編集です。
まずはupstreamで、backendのIPアドレスを記載します。

        server {
                listen 80;
                listen 443 ssl;
                server_name localhost;

                ssl on;
                ssl_certificate         /etc/nginx/ssl/nginx.pem;
                ssl_certificate_key     /etc/nginx/ssl/nginx.key;


さらに、443で待ち受け、SSLを有効化します。
作成した証明書と鍵はこちらで指定します。

                location / {
                        proxy_pass              http://mywebapp1;
                        proxy_set_header        Host    $host;
                        proxy_set_header        X-Real-IP $remote_addr;
                        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header        X-Forwarded-Proto $scheme;
                }

さらに、locationで転送先の名前、ここではupstreamで指定した名前を指定します。
backend側に渡す、proxyのヘッダーも指定します。

    server {
        listen       80;
        server_name  localhost;


backend側では普通にhttp(80)を待ち受けます。

        location ~ \.php$ {
            root           /var/www;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
            include        fastcgi_params;
        }


さらに添付のようにphpも実行できるようにしています。

<?php
    header( 'Content-Type: text/plain' );
    echo 'Host: ' . $_SERVER['HTTP_HOST'] . "\n";
    echo 'Remote Address: ' . $_SERVER['REMOTE_ADDR'] . "\n";
    echo 'X-Forwarded-For: ' . $_SERVER['HTTP_X_FORWARDED_FOR'] . "\n";
    echo 'X-Forwarded-Proto: ' . $_SERVER['HTTP_X_FORWARDED_PROTO'] . "\n";
    echo 'Server Address: ' . $_SERVER['SERVER_ADDR'] . "\n";
    echo 'Server Port: ' . $_SERVER['SERVER_PORT'] . "\n\n";
?>


検証用にphpスクリプトを作成しています。

[root@nginx01 ~]# curl https://localhost/index.php -k
Host: localhost
Remote Address: 192.168.200.1
X-Forwarded-For: 127.0.0.1
X-Forwarded-Proto: https
Server Address: 192.168.200.3
Server Port: 80

[root@nginx01 ~]# curl https://localhost/index.php -k
Host: localhost
Remote Address: 192.168.200.1
X-Forwarded-For: 127.0.0.1
X-Forwarded-Proto: https
Server Address: 192.168.200.2
Server Port: 80

[root@nginx01 ~]# curl https://localhost/index.php -k
Host: localhost
Remote Address: 192.168.200.1
X-Forwarded-For: 127.0.0.1
X-Forwarded-Proto: https
Server Address: 192.168.200.3
Server Port: 80


設定ファイルを再読み込みし、phpスクリプトを実行します。
frontからbackendに転送されていることがわかります。
さらにfrontではhttpsで受け、http(80)で転送されていることもわかります。


このページのトップヘ