ラベル CentOS の投稿を表示しています。 すべての投稿を表示
ラベル CentOS の投稿を表示しています。 すべての投稿を表示

2014年8月9日土曜日

Linux用RDPクライアント(rdesktop)のインストール

Linux用のリモートデスクトップ接続クライアントとしてrdesktopをインストールする手順をまとめます。
前回Windows7 → CentOS6.5へリモートデスクトップ接続する手順をまとめましたが、今回はその環境を利用してさらに、Windows7 → CentOS6.5 → WindowsVista にリモートデスクトップ接続する検証を行いました。

OS: CentOS 6.5 (64-bit)
rdesktop: 1.7.1


■Linux用RDPクライアント(rdesktop)のインストール
[root@centos65 ~]# yum install rdesktop
(中略)
========================================================================
 Package                Arch       Version             Repository  Size
========================================================================
Installing:
 rdesktop               x86_64     1.7.1-1.el6         base       162 k
Installing for dependencies:
 ctapi-common           x86_64     1.1-6.1.el6         base       6.3 k
 openct                 x86_64     0.6.19-4.el6        base       207 k
 pcsc-lite              x86_64     1.5.2-13.el6_4      base       130 k
 pcsc-lite-libs         x86_64     1.5.2-13.el6_4      base        28 k
 pcsc-lite-openct       x86_64     0.6.19-4.el6        base        14 k

Transaction Summary
========================================================================
Install       6 Package(s)
(以下省略)


■LinuxからWindowsへリモートデスクトップ接続
CentOSのGnome画面上で端末を開き下記コマンドを実行。
[root@centos65 ~]# rdesktop -g 800x600 -a 32 -k ja 192.168.77.6 -u administrator -p xxxxxxxx
## オプションの説明
-g: 画面の解像度
-a: 色深度(bit)
-k: キーボード配列、jaは日本語を指定
-u: Windowsアカウント名
-p: Windowsパスワード

接続成功!!


こちらの情報が何かのお役に立てましたら幸いです。サイト継続ご協力のほどお願い致します。m(_ _)m

2014年8月8日金曜日

CentOS 6 xrdp を利用したリモートデスクトップ接続

xrdpを利用するとWindows端末からLinuxサーバへリモートデスクトップ接続が可能となります。
もちろんLinuxサーバ側にはGUIの準備が必要ですが、Windows端末側ではVNCクライアントが
不要で標準のリモートデスクトップクライアントで接続できるため大変便利です。

OS: CentOS 6.5 (64-bit)
xrdp: 0.5.0


■前提
SELinux、iptablesはあらかじめ無効化しておく。
[root@centos65 ~]# vi /etc/selinux/config
[root@centos65 ~]# grep disabled /etc/selinux/config
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
[root@centos65 ~]# chkconfig iptables off; chkconfig --list iptables
iptables        0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@centos65 ~]# chkconfig ip6tables off; chkconfig --list ip6tables
ip6tables       0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@centos65 ~]#
※もちろん、ちゃんと「3389/tcp」のみ解放する設定を行ってもよい。


■EPELリポジトリのインストール
[root@centos65 ~]# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm を取得中
警告: /var/tmp/rpm-tmp.CgUe03: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
準備中...                ########################################### [100%]
   1:epel-release           ########################################### [100%]
[root@centos65 ~]#

## yum実行時にEPELリポジトリをデフォルト参照しない設定
[root@centos65 ~]# sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/epel.repo


■xrdpのインストール
[root@centos65 ~]# yum --enablerepo=epel install xrdp
(中略)
=========================================================================
 Package              Arch       Version             Repository     Size
=========================================================================
Installing:
 xrdp                 x86_64     0.5.0-0.13.el6      epel          240 k
Installing for dependencies:
 tigervnc-server      x86_64     1.1.0-8.el6_5       updates       1.1 M

Transaction Summary
=========================================================================
Install       2 Package(s)
(以下省略)


■日本語キーボード対応
km-e0010411.iniをダウンロードしてシンボリックリンクを作成。
[root@centos65 ~]# cd /etc/xrdp/
[root@centos65 xrdp]# wget http://www.mail-archive.com/xrdp-devel@lists.sourceforge.net/msg00263/km-e0010411.ini
[root@centos65 xrdp]# mv km-e0010411.ini km-0411.ini
[root@centos65 xrdp]# ln -s km-0411.ini  km-e0010411.ini
[root@centos65 xrdp]# ln -s km-0411.ini  km-e0200411.ini
[root@centos65 xrdp]# ln -s km-0411.ini  km-e0210411.ini


■xrdp起動
[root@centos65 ~]# /etc/init.d/xrdp start
xrdp を起動中:                                             [  OK  ]
xrdp-sesman を起動中:                                      [  OK  ]
[root@centos65 ~]#

## vncserverが連動して自動起動される
[root@centos65 ~]# /etc/init.d/vncserver status
Xvnc (pid 8278 7730 7151 2678 2283) を実行中...
[root@centos65 ~]#
xrdpサービスは、vncserverサービスに依存関係があるようなので、tigervnc-serverもインストールしています。
/etc/sysconfig/vncserversの修正は不要でした。※全行コメントアウトのまま。


■リモートデスクトップ接続
Windows7のRDPクライアントから接続します。バージョンは、6.3.9600です。




なぜか1回目はログインに失敗します。
エラーダイアログのOKボタンをクリックして再度同じようにログインすると成功。

rootでも他ユーザでも2回目はログイン成功でした。
クリップボード経由でテキストデータのコピペは双方向で可能でした。
ただし、Gnome画面のPrintScreenのコピペはできませんでした。


■パフォーマンス
CentOS6.2で検証した時はRDP接続時にCPU使用率が跳ね上がり、重くて現実的ではなかったが、 今回のCentOS6.5ではそのような現象は発生していないようです。
[root@centos65 ~]# ps aux | grep -e xrdp -e PID | grep -v grep
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2281  0.0  0.0  16372   700 pts/0    S    18:34   0:00 /usr/sbin/xrdp-sessvc 2283 2282
root      2286  0.0  0.0 198780  1200 pts/0    Sl   18:34   0:00 xrdp-chansrv
root      2676  0.0  0.0  16372   696 pts/0    S    18:34   0:00 /usr/sbin/xrdp-sessvc 2678 2677
root      2683  0.0  0.0 198780  1196 pts/0    Sl   18:34   0:00 xrdp-chansrv
root      7149  0.0  0.0  16376   568 pts/0    S    19:44   0:00 /usr/sbin/xrdp-sessvc 7151 7150
root      7153  0.0  0.0 198784  1264 pts/0    Sl   19:45   0:00 xrdp-chansrv
root      7728  0.0  0.0  16376   568 pts/0    S    19:58   0:00 /usr/sbin/xrdp-sessvc 7730 7729
root      7732  0.0  0.0 198784  1264 pts/0    Sl   19:58   0:00 xrdp-chansrv
root      8267  0.3  0.4 269208  8404 pts/0    Sl   20:06   0:04 /usr/sbin/xrdp
root      8271  0.0  0.0 128568  1636 pts/0    S    20:06   0:00 /usr/sbin/xrdp-sesman
root      8276  0.0  0.0  16376   568 pts/0    S    20:06   0:00 /usr/sbin/xrdp-sessvc 8278 8277
root      8282  0.0  0.0 198784  1248 pts/0    Sl   20:06   0:00 xrdp-chansrv
[root@centos65 ~]#


こちらの情報が何かのお役に立てましたら幸いです。サイト継続ご協力のほどお願い致します。m(_ _)m

2014年8月2日土曜日

CentOS 7 yumリポジトリにisoファイルを指定

普通にyumコマンドを実行するとインターネット上のリポジトリから最新のモジュールを利用しますが、
CentOS7のインストールisoファイルのパッケージをインストールする手順です。

CentOS7のCD/DVDドライブにマウントしたisoファイルのマウント位置は下記となります。
/run/media/root/CentOS\ 7\ x86_64/

OS: CentOS 7.0 (64-bit)
isoファイル: CentOS-7.0-1406-x86_64-Everything.iso


■isoファイルの中身を確認
[root@centos70-example-com ~]# ll /run/media/root/CentOS\ 7\ x86_64/
total 1399
-rw-r--r--. 1 root root      14 Jul  5 01:01 CentOS_BuildTag
drwxr-xr-x. 3 root root    2048 Jul  5 00:59 EFI
-rw-r--r--. 1 root root     611 Jul  5 01:01 EULA
-rw-r--r--. 1 root root   18009 Jul  5 01:01 GPL
drwxr-xr-x. 2 root root    2048 Jul  5 00:59 LiveOS
drwxr-xr-x. 2 root root 1392640 Jul  5 00:59 Packages
-rw-r--r--. 1 root root    1690 Jul  5 01:01 RPM-GPG-KEY-CentOS-7
-rw-r--r--. 1 root root    1690 Jul  5 01:01 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--. 1 root root    2883 Jul  5 07:13 TRANS.TBL
drwxr-xr-x. 3 root root    2048 Jul  5 00:59 images
drwxr-xr-x. 2 root root    2048 Jul  5 00:59 isolinux
drwxr-xr-x. 2 root root    4096 Jul  5 01:01 repodata
[root@centos70-example-com ~]#


■yumレポジトリの設定
[root@centos70-example-com ~]# vi /etc/yum.repos.d/CentOS-7.0-x86_64-iso.repo
[root@centos70-example-com ~]# cat /etc/yum.repos.d/CentOS-7.0-x86_64-iso.repo
[centos70_iso]
name=CentOS-7.0-x86_64-iso
baseurl=file:///run/media/root/CentOS\ 7\ x86_64/
enabled=0
gpgcheck=1
gpgkey=file:///run/media/root/CentOS\ 7\ x86_64/RPM-GPG-KEY-CentOS-7
[root@centos70-example-com ~]#
1行目:レポジトリ名(適当に)
2行目:ラベル名(適当に)
3行目:isoファイルのパス
4行目:常に参照する場合は1。0の場合、yumオプションで"--enablerepo="を指定
5行目:GPG認証チェックを有効化する
6行目:GPG-KEYのファイルパスを指定


■インターネット上のリポジトリのhttpdを参照
[root@centos70-example-com ~]# yum info httpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Available Packages
Name        : httpd
Arch        : x86_64
Version     : 2.4.6
Release     : 18.el7.centos
Size        : 2.7 M
Repo        : updates/7/x86_64
Summary     : Apache HTTP Server
URL         : http://httpd.apache.org/
License     : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
            : web server.

[root@centos70-example-com ~]#


■isoファイル内のhttpdを参照
[root@centos70-example-com ~]# yum --disablerepo=\* --enablerepo=centos70_iso info httpd
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Available Packages
Name        : httpd
Arch        : x86_64
Version     : 2.4.6
Release     : 17.el7.centos.1
Size        : 2.7 M
Repo        : centos70_iso
Summary     : Apache HTTP Server
URL         : http://httpd.apache.org/
License     : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
            : web server.

[root@centos70-example-com ~]#
--disablerepo=\* オプションでインターネット上のリポジトリを参照しないようにしています。
Releaseがインターネット上のリポジトリより1つ前のバージョンとなっています。


■isoファイル内のhttpdをyumでインストール
[root@centos70-example-com ~]# yum --disablerepo=\* --enablerepo=centos70_iso install httpd
(中略)
==========================================================================
 Package          Arch        Version                 Repository     Size
==========================================================================
Installing:
 httpd            x86_64      2.4.6-17.el7.centos.1   centos70_iso  2.7 M
Installing for dependencies:
 apr              x86_64      1.4.8-3.el7             centos70_iso  103 k
 apr-util         x86_64      1.5.2-6.el7             centos70_iso   92 k
 httpd-tools      x86_64      2.4.6-17.el7.centos.1   centos70_iso   77 k

Transaction Summary
==========================================================================
Install  1 Package (+3 Dependent packages)

Total download size: 2.9 M
Installed size: 9.9 M
Is this ok [y/d/N]: y
Downloading packages:
--------------------------------------------------------------------------
Total                                      49 MB/s | 2.9 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : apr-1.4.8-3.el7.x86_64                             1/4
  Installing : apr-util-1.5.2-6.el7.x86_64                        2/4
  Installing : httpd-tools-2.4.6-17.el7.centos.1.x86_64           3/4
  Installing : httpd-2.4.6-17.el7.centos.1.x86_64                 4/4
  Verifying  : httpd-2.4.6-17.el7.centos.1.x86_64                 1/4
  Verifying  : apr-util-1.5.2-6.el7.x86_64                        2/4
  Verifying  : apr-1.4.8-3.el7.x86_64                             3/4
  Verifying  : httpd-tools-2.4.6-17.el7.centos.1.x86_64           4/4

Installed:
  httpd.x86_64 0:2.4.6-17.el7.centos.1

Dependency Installed:
  apr.x86_64 0:1.4.8-3.el7  apr-util.x86_64 0:1.5.2-6.el7
  httpd-tools.x86_64 0:2.4.6-17.el7.centos.1

Complete!
[root@centos70-example-com ~]#
依存関係も考慮してインストールされました。

## version確認
[root@centos70-example-com ~]# rpm -q httpd
httpd-2.4.6-17.el7.centos.1.x86_64
[root@centos70-example-com ~]#

## httpd起動
[root@centos70-example-com ~]# systemctl start httpd
[root@centos70-example-com ~]#
※CentOS 7 から起動方法が変更になっています。

こちらの情報が何かのお役に立てましたら幸いです。サイト継続のご協力ありがとうございます。m(_ _)m

2014年7月26日土曜日

CentOS 7 httpdの起動と停止

CentOS 6系まではプロセスの起動は init スクリプト (/etc/init.d/) を利用していましたが、
CentOS 7系では systemctl コマンドを利用する方針に変更されています。また、chkconfig 
コマンドも廃止され、systemctl コマンドに統合されました。このあたりの手順をhttpdを例として
確認します。



■httpd起動(&起動確認)
[root@centos70 ~]# systemctl start httpd.service
[root@centos70 ~]# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: active (running) since Sat 2014-07-25 15:33:43 JST; 5s ago
 Main PID: 2750 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           |-2750 /usr/sbin/httpd -DFOREGROUND
           |-2751 /usr/sbin/httpd -DFOREGROUND
           |-2752 /usr/sbin/httpd -DFOREGROUND
           |-2753 /usr/sbin/httpd -DFOREGROUND
           |-2754 /usr/sbin/httpd -DFOREGROUND
           `-2755 /usr/sbin/httpd -DFOREGROUND

Jul 25 15:33:43 centos70 systemd[1]: Starting The Apache HTTP Server...
Jul 25 15:33:43 centos70 httpd[2750]: AH00558: httpd: Could not reliably determine the server's fully qualified...essage
Jul 25 15:33:43 centos70 systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@centos70 ~]#

## ブラウザでの確認
※事前にFireWallサービスを停止しておく
[root@centos70 ~]# systemctl stop firewalld.service


■httpd停止(&停止確認)
[root@centos70 ~]# systemctl stop httpd.service
[root@centos70 ~]# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: inactive (dead)

Jul 25 15:32:17 centos70 systemd[1]: Starting The Apache HTTP Server...
Jul 25 15:32:18 centos70 httpd[2713]: AH00558: httpd: Could not reliably determine the server's fully qualified...essage
Jul 25 15:32:18 centos70 systemd[1]: Started The Apache HTTP Server.
Jul 25 15:33:08 centos70 systemd[1]: Stopping The Apache HTTP Server...
(以下略)


■httpd自動起動設定(&設定確認)
[root@centos70 ~]# systemctl enable httpd.service
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
[root@centos70 ~]# systemctl list-unit-files | grep httpd
httpd.service                               enabled
[root@centos70 ~]#


■httpd自動起動解除(&設定確認)
[root@centos70 ~]# systemctl disable httpd.service
rm '/etc/systemd/system/multi-user.target.wants/httpd.service'
[root@centos70 ~]# systemctl list-unit-files | grep httpd
httpd.service                               disabled
[root@centos70 ~]#


こちらの情報が何かのお役に立てましたら幸いです。サイト継続ご協力のほどお願い致します。m(_ _)m

2014年7月12日土曜日

CentOS 7.0 インストール手順 画面一覧

CentOS7.0が2014年7月7日にリリースされました。VMware ESXi上に構築した手順を画面キャプチャ入りでまとめます。
Kernelに3.10系が採用され、ファイルシステムもXFSが採用されることにより、最大容量が500TBまで拡張されました。
0.5PBってどんだけよ…。
Dockerが正式サポートされたことによりコンテナ型仮想化に対応したのも注目ですね。

・VMware ESXi 5.0
・isoファイル CentOS-7.0-1406-x86_64-Everything.iso
・CentOS 7.0 (64-bit)
・Kernel: 3.10.0-123
・インストールパッケージタイプ: Server +α


■インストーラ起動


■Discチェック

escキーでインストールディスクチェックを省略可能。


■言語選択
英語のままにしようかと迷いましたが、迷わず日本語で。


■インストールの概要
インストールポータル画面が出現?
順番に縛られることがなくなって以前より設定しやすくなりました。


■インストール先デバイスの選択


■ソフトウェアの選択
今回は「サーバー(GUI使用)」をベースにいくつかアドオンを追加しました。


■ネットワークとホスト名

「オフ」→「オン」にして設定ボタンをクリック。

デフォルトではDHCPとなっている。
方式を「手動」に変更し、IPアドレスとゲートウェイ等を指定。


■インストールの開始
設定内容を確認して、インストールの開始ボタンをクリック。


パッケージインストール中に、rootパスワードの設定と、ユーザーの作成が可能です。




■インストール完了

ここで一度再起動が必要となります。


■初期セットアップ


ライセンス契約に同意せざるを得ません。


■Kdump

デフォルトのまま進みます。


■ログイン



■言語と入力リソース選択



■オンラインアカウント

ありませんので。スキップ。


■初期設定完了


■GNOMEヘルプ

迷わず×ボタンで省略。


■やっとデスクトップ

解像度や背景テーマを変更。


■OSの状況確認
[root@centos70-example-com ~]# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
[root@centos70-example-com ~]# uname -r
3.10.0-123.el7.x86_64
[root@centos70-example-com ~]# rpm -qa | wc -l
1284
[root@centos70-example-com ~]# df -hT
ファイルシス            タイプ   サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root xfs         18G  3.6G   14G   21% /
devtmpfs                devtmpfs   912M     0  912M    0% /dev
tmpfs                   tmpfs      921M   80K  921M    1% /dev/shm
tmpfs                   tmpfs      921M  8.8M  912M    1% /run
tmpfs                   tmpfs      921M     0  921M    0% /sys/fs/cgroup
/dev/sda1               xfs        497M  119M  379M   24% /boot
[root@centos70-example-com ~]#
パーティションの切り方がCentOS 6系から変更があったようです。
その他、どうでもいいですが、シャットダウンが異様に早くなりました。


こちらの情報が何かのお役に立てましたら幸いです。サイト継続のご協力お願いいたします。m(_ _)m

2014年6月22日日曜日

tshark(wiresharkのCUI)でBasic認証の安全性(危険性?)を検証

Basic認証が安全ではないと言われる所以をパケットキャプチャにより実証したい気分な方へ
tsharkをインストールしてパケットキャプチャする手順をお届けします。
Digest認証についてもどの程度安全性が確保されているのかも確認します。
Basic認証/Digest認証の設定方法は前回記事をどうぞ。

OS: CentOS 6.5 (64-bit)
TShark: 1.8.10


■tsharkインストール
CUIだけでいいので、wireshark-gnomeはインストールせず、tsharkだけインストールしたい。
[root@centos65 ~]# yum install tshark
(中略)
No package tshark available.
Error: Nothing to do
[root@cent63 ~]#
無いらしい。wiresharkでインストールすればGUIはインストールされないとのこと。


■wiresharkインストール
[root@centos65 ~]# yum install wireshark
==========================================================================
 Package            Arch          Version             Repository     Size
==========================================================================
Installing:
 wireshark          x86_64        1.8.10-7.el6_5      updates        11 M
Installing for dependencies:
 libsmi             x86_64        0.4.8-4.el6         base          2.4 M

Transaction Summary
==========================================================================
Install       2 Package(s)

## version確認
[root@centos65 ~]# tshark -v
TShark 1.8.10 (SVN Rev Unknown from unknown)

Copyright 1998-2013 Gerald Combs  and contributors.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Compiled (64-bit) with GLib 2.26.1, with libpcap, with libz 1.2.3, without POSIX
capabilities, with SMI 0.4.8, without c-ares, without ADNS, without Lua, without
Python, with GnuTLS 2.8.5, with Gcrypt 1.4.5, with MIT Kerberos, without GeoIP.

Running on Linux 2.6.32-431.el6.x86_64, with locale ja_JP.UTF-8, with libpcap
version 1.4.0, with libz 1.2.3.

Built using gcc 4.4.7 20120313 (Red Hat 4.4.7-4).
[root@centos65 ~]#


■192.168.77.149宛てのhttp通信だけをキャプチャ
[root@centos65 ~]# tshark -l host 192.168.77.149 and port http
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
  0.000000 192.168.77.1 -> 192.168.77.149 TCP 74 45248 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 TSval=587734266 TSecr=0 WS=4
  0.000055 192.168.77.149 -> 192.168.77.1 TCP 74 http > 45248 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=13298595 TSecr=587734266 WS=128
  0.000307 192.168.77.1 -> 192.168.77.149 TCP 66 45248 > http [ACK] Seq=1 Ack=1 Win=5840 Len=0 TSval=587734266 TSecr=13298595
  0.000338 192.168.77.1 -> 192.168.77.149 TCP 66 45248 > http [FIN, ACK] Seq=1 Ack=1 Win=5840 Len=0 TSval=587734266 TSecr=13298595
  0.000531 192.168.77.149 -> 192.168.77.1 TCP 66 http > 45248 [ACK] Seq=1 Ack=2 Win=14592 Len=0 TSval=13298596 TSecr=587734266
  0.000881 192.168.77.149 -> 192.168.77.1 TCP 66 http > 45248 [FIN, ACK] Seq=1 Ack=2 Win=14592 Len=0 TSval=13298596 TSecr=587734266
  0.001063 192.168.77.1 -> 192.168.77.149 TCP 66 45248 > http [ACK] Seq=2 Ack=2 Win=5840 Len=0 TSval=587734266 TSecr=13298596
  4.101061 192.168.77.1 -> 192.168.77.149 TCP 74 45252 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 TSval=587734676 TSecr=0 WS=4
  4.101095 192.168.77.149 -> 192.168.77.1 TCP 74 http > 45252 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1 TSval=13302696 TSecr=587734676 WS=128
  4.101334 192.168.77.1 -> 192.168.77.149 TCP 66 45252 > http [ACK] Seq=1 Ack=1 Win=5840 Len=0 TSval=587734676 TSecr=13302696
  4.101372 192.168.77.1 -> 192.168.77.149 TCP 66 45252 > http [FIN, ACK] Seq=1 Ack=1 Win=5840 Len=0 TSval=587734676 TSecr=13302696
  4.101532 192.168.77.149 -> 192.168.77.1 TCP 66 http > 45252 [ACK] Seq=1 Ack=2 Win=14592 Len=0 TSval=13302697 TSecr=587734676
  4.101720 192.168.77.149 -> 192.168.77.1 TCP 66 http > 45252 [FIN, ACK] Seq=1 Ack=2 Win=14592 Len=0 TSval=13302697 TSecr=587734676
  4.101931 192.168.77.1 -> 192.168.77.149 TCP 66 45252 > http [ACK] Seq=2 Ack=2 Win=5840 Len=0 TSval=587734676 TSecr=13302697
^C14 packets captured
[root@centos65 ~]#
Router(192.168.77.1)からのリクエストに対して応答しているパケットをキャプチャできている。
[root@centos65 ~]# tshark -l host 192.168.77.150 and port http
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
^C0 packets captured
[root@centos65 ~]#
自サーバ(192.168.77.149)へ来るアクセスまたは、自サーバから出るアクセスについてパケットキャプチャできるが、
同一セグメントでも他サーバから他サーバへのパケットはキャプチャできない。


■Basic認証とDigest認証のパケット確認
[root@centos65 ~]# tshark -i eth0 port http -V -w packet.log
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
(以下すごい量のログが出るので省略)
上記でキャプチャしている間にPC(192.168.77.2)のブラウザから下記URLにアクセス。
あえて、ID/Passを間違えたうえでログインしてみる。

http://192.168.77.149/basic/
1回目: test/password でログイン失敗。
2回目: basic/password でログイン失敗。
3回目: basic/secret でログイン成功。

http://192.168.77.149/digest/
1回目: test/password でログイン失敗。
2回目: basic/serect でログイン失敗。
3回目: digest/secret でログイン成功。

## ログの確認
[root@centos65 ~]# tshark -r packet.log | head
Running as user "root" and group "root". This could be dangerous.
  1 0.000000000 192.168.77.2 -> 192.168.77.149 TCP 66 51701 > http [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=4 SACK_PERM=1
  2 0.000083000 192.168.77.149 -> 192.168.77.2 TCP 66 http > 51701 [SYN, ACK] Seq=0 Ack=1 Win=14600 Len=0 MSS=1460 SACK_PERM=1 WS=128
  3 0.000397000 192.168.77.2 -> 192.168.77.149 TCP 60 51701 > http [ACK] Seq=1 Ack=1 Win=65700 Len=0
  4 0.000568000 192.168.77.2 -> 192.168.77.149 HTTP 317 GET /basic/ HTTP/1.1
  5 0.000621000 192.168.77.149 -> 192.168.77.2 TCP 54 http > 51701 [ACK] Seq=1 Ack=264 Win=15744 Len=0
  6 0.001667000 192.168.77.149 -> 192.168.77.2 HTTP 782 HTTP/1.1 401 Authorization Required  (text/html)
  7 0.001905000 192.168.77.2 -> 192.168.77.149 TCP 60 51701 > http [ACK] Seq=264 Ack=729 Win=64972 Len=0
  8 0.002000000 192.168.77.149 -> 192.168.77.2 TCP 54 http > 51701 [FIN, ACK] Seq=729 Ack=264 Win=15744 Len=0
  9 0.002114000 192.168.77.2 -> 192.168.77.149 TCP 60 51701 > http [FIN, ACK] Seq=264 Ack=729 Win=64972 Len=0
 10 0.002145000 192.168.77.149 -> 192.168.77.2 TCP 54 http > 51701 [ACK] Seq=730 Ack=265 Win=15744 Len=0
[root@centos65 ~]#
※packet.logファイルはバイナリ型のため、テキストエディタでは開けない。

## ログを詳細確認してパスワードを抽出
[root@centos65 ~]# tshark -r packet.log -V | grep -A 1 "Authorization:"
Running as user "root" and group "root". This could be dangerous.
    Authorization: Basic dGVzdDpwYXNzd29yZA==\r\n
        Credentials: test:password
--
    Authorization: Basic YmFzaWM6cGFzc3dvcmQ=\r\n
        Credentials: basic:password
--
    Authorization: Basic YmFzaWM6c2VjcmV0\r\n
        Credentials: basic:secret
--
    [truncated] Authorization: Digest username="test",realm="DigestAuth",nonce="EAlztCj+BAA=758b7f794981c8331f415d6704fc2a8bb77d83e3",uri="/digest/",cnonce="4430d9ffdb985f4fabaadc433807e111",nc=00000001,algorithm=MD5,response="70f240bec66c111b
    Connection: Keep-Alive\r\n
--
    [truncated] Authorization: Digest username="basic",realm="DigestAuth",nonce="RCu8tCj+BAA=0b496b71af1ce10978af063796f7316a88b0599a",uri="/digest/",cnonce="8cdc61e16b1ed3e79e513fa766a39a14",nc=00000001,algorithm=MD5,response="60a69776af7efe3
    \r\n
--
    [truncated] Authorization: Digest username="digest",realm="DigestAuth",nonce="gkCEtSj+BAA=297f68d0b65f9c6a14eddd0898edd59f1b560a1b",uri="/digest/",cnonce="09fab2b8fd4aae62d30d94e868a5719c",nc=00000001,algorithm=MD5,response="fa704ad0f10213
    Connection: Keep-Alive\r\n
[root@centos65 ~]#
Basic認証は入力されたパスワードが丸見え…。
Digest認証はパスワードが暗号化されているため少しはマシかもしれません。
公開Webサーバに不正にtsharkが仕掛けられないことを祈ります…。


こちらの情報が何かのお役に立てましたら幸いです。サイト継続ご協力のほどお願い致します。m(_ _)m

2014年4月27日日曜日

OpenLDAPのログ出力設定


■Linux SSHログイン認証をOpenLDAPで一元管理

LDAPサーバに登録したユーザでのSSHログインおよびパスワード変更をアプリ系サーバで実現するための流れを、下記のパートに分けて記載していきます。



■本編の概要
OpenLDAPサーバはデフォルト設定ではログを出力しません。
slapd.confにログレベルを記述すると、シスログ経由でログを出力します。
ログレベルおよびログの出力先の設定についての手順を記載します。

OS: CentOS 6.5 (64-bit)
openldap: 2.4.23
LDAPサーバホスト名: ty-ldap01
アプリ系サーバホスト名: ty-app01,ty-app02

■標準のログレベルだと出力量が多すぎるので変更
[root@ty-ldap01 ~]# vi /etc/openldap/slapd.conf
[root@ty-ldap01 ~]# grep -A 5  "EVERYTHING" /etc/openldap/slapd.conf
# rootdn can always read and write EVERYTHING!

# LogLevel
loglevel 512

# change own password ---- from ----
[root@ty-ldap01 ~]# change_slapd.sh
config file testing succeeded
slapd を停止中:                                            [  OK  ]
slapd を起動中:                                            [  OK  ]
[root@ty-ldap01 ~]#
※loglevelのデフォルト値は256です。詳細については他のサイトを参照ください。
※change_slapd.shは「OpenLDAPのインストールと起動」 で作成したスクリプトです。

■rsysylogにOpenLDAPのログ出力設定
openldap-servers、openldap-clients、nss-pam-ldapd を追加インストール
[root@ty-ldap01 ~]# echo "local4.*    /var/log/ldap.log" > /etc/rsyslog.d/ldaplog.conf
[root@ty-ldap01 ~]# cat /etc/rsyslog.d/ldaplog.conf
local4.*    /var/log/ldap.log
[root@ty-ldap01 ~]# /etc/init.d/rsyslog restart
システムロガーを停止中:                                    [  OK  ]
システムロガーを起動中:                                    [  OK  ]
[root@ty-ldap01 ~]#

■OpenLDAP登録ユーザでログインしたときのログ
## アプリ系サーバの操作
[root@ty-app01 ~]# su - user1001
-bash-4.1$ su - user1002
パスワード:
-bash-4.1$

## その時のLDAPサーバのログ
[root@ty-ldap01 ~]# tail -f /var/log/ldap.log

Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1000 op=1 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1001 op=1 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1002 op=1 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1003 op=1 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:07 ty-ldap01 slapd[2503]: <= bdb_equality_candidates: (uniqueMember) not indexed
Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1004 op=1 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1000 op=2 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1001 op=2 ENTRY dn="cn=team1000,ou=group,dc=open_ldap,dc=com"
Apr 20 03:20:07 ty-ldap01 slapd[2503]: conn=1002 op=2 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:18 ty-ldap01 slapd[2503]: conn=1003 op=3 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:18 ty-ldap01 slapd[2503]: conn=1004 op=2 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:18 ty-ldap01 slapd[2503]: conn=1001 op=3 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1002 op=3 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1005 op=1 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1003 op=4 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1004 op=3 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1000 op=5 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1001 op=4 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1002 op=4 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1003 op=5 ENTRY dn="uid=user1001,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1004 op=4 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: <= bdb_equality_candidates: (uniqueMember) not indexed
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1000 op=6 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1001 op=5 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1002 op=5 ENTRY dn="cn=team1000,ou=group,dc=open_ldap,dc=com"
Apr 20 03:20:21 ty-ldap01 slapd[2503]: conn=1003 op=6 ENTRY dn="uid=user1002,ou=people,dc=open_ldap,dc=com"
デフォルトのloglevelから一つ下げましたが、別ユーザにスイッチするだけで上記のログが出力されます。

以上で終了です。長文おつきあいありがとうございます。サイト継続ご協力のほどお願い申し上げます。m(_ _)m


Before << (3) LDAP登録ユーザでのSSHログイン認証とパスワード変更

2014年4月26日土曜日

LDAP登録ユーザでのSSHログイン認証とパスワード変更


■Linux SSHログイン認証をOpenLDAPで一元管理

LDAPサーバに登録したユーザでのSSHログインおよびパスワード変更をアプリ系サーバで実現するための流れを、下記のパートに分けて記載していきます。



■本編の概要
アプリ系サーバにLDAP認証モジュール(nss-pam-ldapd)を追加してLDAPサーバに接続します。 idコマンドでLDAPに登録したユーザを確認できるものの、ログインすることができません。 認証クライアントモジュールをsssdからnslcdに変更にすることで、SSHログインできるようになります。 homeDirectoryもLDAPサーバからNFSマウントする方式にした方が一元管理レベル感が高まります。 ここまで出来ればLDAPユーザのパスワードをアプリ系サーバから変更したいところですが、 またしてもエラーに出くわします。slapd.confをさらに修正することでLDAPサーバ上の パスワードも変更できるようなります。こちらの手順もまとめます。
OS: CentOS 6.5 (64-bit)
openldap: 2.4.23
nss-pam-ldapd: 0.7.5
LDAPサーバホスト名: ty-ldap01
アプリ系サーバホスト名: ty-app01,ty-app02

■アプリ系サーバにnss-pam-ldapdのインストール
[root@ty-app01 ~]# yum install nss-pam-ldapd.x86_64
(中略)
============================================================================
 Package                Arch        Version               Repository   Size
============================================================================
Installing:
 nss-pam-ldapd          x86_64      0.7.5-18.2.el6_4      base        152 k
Installing for dependencies:
 nscd                   x86_64      2.12-1.132.el6        base        219 k
 pam_ldap               x86_64      185-11.el6            base         88 k

Transaction Summary
============================================================================
Install       3 Package(s)
(以下略)

■authconfig-tuiによるクライアント側認証モジュール設定
authconfig-tuiのGUIの表示が崩れないように言語を英語に変更しておきます。
[root@ty-app01 ~]# LANG=C; authconfig-tui


↑Use LDAP にチェック。あとはデフォルトのまま。

↑ServerとBaseDNを設定。
[root@ty-app01 ~]# LANG=C; authconfig-tui
nslcd を起動中:                                            [  OK  ]
[root@ty-app01 ~]#
※sssdが自動起動される場合があります。
sssdの認証処理はTLSまたはLDAPSプロトコルが必須となり設定が複雑なので今回はnslcdを利用します。

## LANGを元に戻す
[root@ty-app01 ~]# LANG=ja_JP.UTF-8
## authconfig-tuiによりldap.confが修正されたことを確認
[root@ty-app01 ~]# grep -v "#\|^$" /etc/openldap/ldap.conf
TLS_CACERTDIR /etc/openldap/cacerts
URI ldap://ty-ldap01/
BASE dc=open_ldap,dc=com
[root@ty-app01 ~]#
## LDAPサーバ上のユーザ確認
[root@ty-app01 ~]# grep user1001 /etc/passwd
[root@ty-app01 ~]# id user1001
uid=1001(user1001) gid=1000(LDAP team1000) 所属グループ=1000(LDAP team1000)
[root@ty-app01 ~]#

■ホームディレクトリ準備
[root@ty-app01 ~]# mount -t nfs ty-ldap01:/home /home
[root@ty-app01 ~]# mkdir -m 700 /home/user1001; chown user1001: /home/user1001
[root@ty-app01 ~]# mkdir -m 700 /home/user1002; chown user1002: /home/user1002
[root@ty-app01 ~]# mkdir -m 700 /home/user2001; chown user2001: /home/user2001
[root@ty-app01 ~]# mkdir -m 700 /home/user2002; chown user2002: /home/user2002

■OpenLDAPサーバ上のユーザにスイッチ
[root@ty-app01 ~]# su - user1001
-bash-4.1$ su - user1002
パスワード:
su: パスワードが違います
-bash-4.1$
rootユーザからのスイッチはパスワードを聞かれないので可能ですが、
user1001 → user1002のスイッチ時に正しいパスワードを入力しても認証されません・・・。(T-T)

■認証クライアントモジュールの修正
[root@ty-app01 ~]# cd /etc/pam.d/
[root@ty-app01 pam.d]# ll | grep auth-ac
lrwxrwxrwx. 1 root root  19  3月 21 15:35 2014 fingerprint-auth -> fingerprint-auth-ac
-rw-r--r--. 1 root root 659  3月 21 15:35 2014 fingerprint-auth-ac
lrwxrwxrwx. 1 root root  16  3月 21 15:35 2014 password-auth -> password-auth-ac
-rw-r--r--. 1 root root 896  3月 21 15:35 2014 password-auth-ac
lrwxrwxrwx. 1 root root  17  3月 21 15:35 2014 smartcard-auth -> smartcard-auth-ac
-rw-r--r--. 1 root root 711  3月 21 15:35 2014 smartcard-auth-ac
lrwxrwxrwx. 1 root root  14  3月 21 15:35 2014 system-auth -> system-auth-ac
-rw-r--r--. 1 root root 937  3月 21 15:35 2014 system-auth-ac
[root@ty-app01 pam.d]#
## system-auth-acを修正
[root@ty-app01 pam.d]# cp -p system-auth-ac system-auth-ac.20140321
[root@ty-app01 pam.d]# vi system-auth-ac
[root@ty-app01 pam.d]# diff system-auth-ac system-auth-ac.20140321
7d6
< auth        sufficient    pam_ldap.so use_first_pass
15d13
< account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
19d16
< password    sufficient    pam_ldap.so use_authtok
23d19
< session     optional      pam_ldap.so
[root@ty-app01 pam.d]#
⇒適所に上記4レコードを追加。
※[pam_sss]になっている場合は[pam_ldap]に変更。

## OpenLDAPサーバ上のユーザにスイッチ
[root@ty-app01 pam.d]# /etc/init.d/nslcd restart
nslcd を停止中:                                            [  OK  ]
nslcd を起動中:                                            [  OK  ]
[root@ty-app01 pam.d]# su - user1001
-bash-4.1$ su - user1002
パスワード:
-bash-4.1$ id
uid=1002(user1002) gid=1000(LDAP team1000) 所属グループ=1000(LDAP team1000)
-bash-4.1$
成功!! (^o^)

## OpenLDAPサーバ上のユーザのパスワード変更
-bash-4.1$ passwd
ユーザー user1002 のパスワードを変更。
Enter login(LDAP) password:
新しいパスワード:
新しいパスワードを再入力してください:
LDAP password information update failed: Insufficient access
passwd: 認証トークン操作エラー
-bash-4.1$
認証されるようになったが、パスワードの変更は失敗する・・・。(T-T)


■LDAPサーバ側でパスワード変更権限追加設定
※LDAPサーバ側の設定です!!
[root@ty-ldap01 ~]# vi /etc/openldap/slapd.conf
[root@ty-ldap01 ~]# grep -A 20 "EVERYTHING" /etc/openldap/slapd.conf
# rootdn can always read and write EVERYTHING!

# change own password ---- from ----
access to attrs=userPassword
        by self write
        by dn="cn=Manager,dc=open_ldap,dc=com" write
        by anonymous auth
        by * none
access to *
        by self write
        by * read
# change own password ----- to -----

# enable on-the-fly configuration (cn=config)
database config
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
        by * none

# enable server status monitoring (cn=monitor)
database monitor
[root@ty-ldap01 ~]#
※ # change own password のくだりを追加する場所が大事です。

## 設定反映
[root@ty-ldap01 ~]# change_slapd.sh
config file testing succeeded
slapd を停止中:                                            [  OK  ]
slapd を起動中:                                            [  OK  ]
[root@ty-ldap01 ~]#
※change_slapd.shは (1) OpenLDAPのインストールと起動 で作成したスクリプトです。


■OpenLDAPサーバ上のユーザのパスワード変更
[root@ty-app01 ~]# su - user1001
-bash-4.1$ passwd
ユーザー user1001 のパスワードを変更。
Enter login(LDAP) password:
新しいパスワード:
新しいパスワードを再入力してください:
LDAP password information changed for user1001
passwd: 全ての認証トークンが正しく更新できました。
-bash-4.1$
成功!! (^o^)

## 念のため確認
[root@ty-app01 ~]# ldapsearch -x -h ty-ldap01 -D "cn=Manager,dc=open_ldap,dc=com" -w secret | grep -n userPassword
58:userPassword:: e2NyeXB0fSQxJEJTZGhaSm1hJEF0cjE1d3dGa1pLN1FNeHFOeVA5MC8=
67:userPassword:: e1NTSEF9dTFpWXlVbllKdGQ0dTMyTE4zRnZwRkVjMzR5Q1ZvRTU=
80:userPassword:: e1NTSEF9dTFpWXlVbllKdGQ0dTMyTE4zRnZwRkVjMzR5Q1ZvRTU=
93:userPassword:: e1NTSEF9dTFpWXlVbllKdGQ0dTMyTE4zRnZwRkVjMzR5Q1ZvRTU=
[root@ty-app01 ~]#
user1001のパスワードのエンコード文字列だけ変更となっています。

## パスワードのエンコード方式の確認
[root@ty-app01 ~]# echo "e2NyeXB0fSQxJEJTZGhaSm1hJEF0cjE1d3dGa1pLN1FNeHFOeVA5MC8=" | base64 -d
{crypt}$1$BSdhZJma$Atr15wwFkZK7QMxqNyP90/[root@ty-app01 ~]#
SSHAではなく、cryptでエンコードされているようです。

## うまくいかない場合
下記ファイルの設定も見直してください。
/etc/pam.d/password-auth-ac
/etc/nsswitch.conf



Before << (2) LDIFによるLDAPサーバへのデータ登録
Next >> (4) OpenLDAPのログ出力設定

2014年4月25日金曜日

LDIFによるLDAPサーバへのデータ登録


■Linux SSHログイン認証をOpenLDAPで一元管理

LDAPサーバに登録したユーザでのSSHログインおよびパスワード変更をアプリ系サーバで実現するための流れを、下記のパートに分けて記載していきます。



■本編の概要
LinuxのOSユーザは最低1つのグループに属しているので、それを踏襲したDIT(Directory Information Tree)を LDAP上に定義して、ユーザを登録する手順をまとめます。 LDAPサーバへデータを登録するにはLDIFファイルの利用が便利です。 登録したユーザの削除やパスワード変更、一連作業時によくあるエラーのメッセージもまとめてみます。
OS: CentOS 6.5 (64-bit)
openldap: 2.4.23
nss-pam-ldapd: 0.7.5
LDAPサーバホスト名: ty-ldap01
アプリ系サーバホスト名: ty-app01,ty-app02

■DIT(Directory Information Tree)概念図
●dc=open_ldap,dc=com
│
├---●ou=Group
│   │
│   ├---●cn=team1000
│   └---●cn=team2000
│
└---●ou=People
     │
     ├---●uid=user1001
     ├---●uid=user1002
     ├---●uid=user2001
     └---●uid=user2002

■オブジェクトクラスの確認
OSユーザに必要な属性をカバーする適当なオブジェクトクラスとして'posixAccount'を使用する。
スキーマに定義されている内容を確認する。
[root@ty-ldap01 ~]# grep -n -A 4 posixAccount /etc/openldap/schema/*.schema
/etc/openldap/schema/nis.schema:161:objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount'
/etc/openldap/schema/nis.schema-162-    DESC 'Abstraction of an account with POSIX attributes'
/etc/openldap/schema/nis.schema-163-    SUP top AUXILIARY
/etc/openldap/schema/nis.schema-164-    MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
/etc/openldap/schema/nis.schema-165-    MAY ( userPassword $ loginShell $ gecos $ description ) )
[root@ty-ldap01 ~]#
⇒homeDirectory が必須属性になっていることに注意!!

■LDIFファイル準備
## base.ldif
[root@ty-ldap01 ldif]# cat base.ldif
dn: dc=open_ldap,dc=com
objectClass: dcObject
objectClass: organization
dc: open_ldap
o: OpenLDAP Corporation

dn: cn=Manager,dc=open_ldap,dc=com
objectclass: organizationalRole
cn: Manager

dn: ou=Group,dc=open_ldap,dc=com
objectClass: organizationalUnit
ou: Group

dn: ou=People,dc=open_ldap,dc=com
objectClass: organizationalUnit
ou: People
[root@ty-ldap01 ldif]#
## group.ldif
[root@ty-ldap01 ldif]# cat group.ldif
dn: cn=team1000,ou=group,dc=open_ldap,dc=com
objectClass: posixGroup
objectClass: top
cn: LDAP team1000
gidNumber: 1000

dn: cn=team2000,ou=group,dc=open_ldap,dc=com
objectClass: posixGroup
objectClass: top
cn: LDAP team2000
gidNumber: 2000
[root@ty-ldap01 ldif]#
## people.ldif
[root@ty-ldap01 ldif]# cat people.ldif
dn: uid=user1001,ou=People,dc=open_ldap,dc=com
uid: user1001
cn: LDAP user1001
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: {SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1000
homeDirectory: /home/user1001

dn: uid=user1002,ou=People,dc=open_ldap,dc=com
uid: user1002
cn: LDAP user1002
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: {SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5
loginShell: /bin/bash
uidNumber: 1002
gidNumber: 1000
homeDirectory: /home/user1002

dn: uid=user2001,ou=People,dc=open_ldap,dc=com
uid: user2001
cn: LDAP user2001
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: {SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5
loginShell: /bin/bash
uidNumber: 2001
gidNumber: 2000
homeDirectory: /home/user2001

dn: uid=user2002,ou=People,dc=open_ldap,dc=com
uid: user2002
cn: LDAP user2002
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: {SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5
loginShell: /bin/bash
uidNumber: 2002
gidNumber: 2000
homeDirectory: /home/user2002
[root@ty-ldap01 ldif]#
※userPasswordには (1) OpenLDAPのインストールと起動 で作成した各ユーザ(共通)のエンコードされたパスワード文字列を指定。

■データ登録
## base.ldif 登録
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f ./base.ldif
adding new entry "dc=open_ldap,dc=com"

adding new entry "cn=Manager,dc=open_ldap,dc=com"

adding new entry "ou=Group,dc=open_ldap,dc=com"

adding new entry "ou=People,dc=open_ldap,dc=com"

[root@ty-ldap01 ldif]#
## group.ldif 登録
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f ./group.ldif
adding new entry "cn=team1000,ou=group,dc=open_ldap,dc=com"

adding new entry "cn=team2000,ou=group,dc=open_ldap,dc=com"

[root@ty-ldap01 ldif]#
## people.ldif 登録
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f ./people.ldif
adding new entry "uid=user1001,ou=People,dc=open_ldap,dc=com"

adding new entry "uid=user1002,ou=People,dc=open_ldap,dc=com"

adding new entry "uid=user2001,ou=People,dc=open_ldap,dc=com"

adding new entry "uid=user2002,ou=People,dc=open_ldap,dc=com"

[root@ty-ldap01 ldif]#
★LDIFに'homeDirectory'の記載を忘れたときのエラー
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f people-nohome.ldif
adding new entry "uid=user2003,ou=People,dc=open_ldap,dc=com"
ldap_add: Object class violation (65)
        additional info: object class 'posixAccount' requires attribute 'homeDirectory'

[root@ty-ldap01 ldif]#
★ユーザを重複登録したときのエラー
[root@ty-ldap01 ldif]# ldapadd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -f people-dual.ldif
adding new entry "uid=user2001,ou=People,dc=open_ldap,dc=com"
ldap_add: Already exists (68)

[root@ty-ldap01 ldif]#

■ldap.confの修正
[root@ty-ldap01 ~]# cp -p /etc/openldap/ldap.conf /etc/openldap/ldap.conf.org
[root@ty-ldap01 ~]# vi /etc/openldap/ldap.conf
[root@ty-ldap01 ~]# grep -v "#\|^$" /etc/openldap/ldap.conf
TLS_CACERTDIR   /etc/openldap/certs
URI ldap://127.0.0.1/
BASE dc=open_ldap,dc=com
[root@ty-ldap01 ~]#
※上記の修正を怠ると、ldapsearchコマンドでエントリがヒットしない場合がある。

■登録した情報を確認
[root@ty-ldap01 ~]# ldapsearch -x -h localhost -D "cn=Manager,dc=open_ldap,dc=com" -w secret | grep -n dn:
10:dn: dc=open_ldap,dc=com
17:dn: cn=Manager,dc=open_ldap,dc=com
22:dn: ou=Group,dc=open_ldap,dc=com
27:dn: ou=People,dc=open_ldap,dc=com
32:dn: cn=team1000,ou=group,dc=open_ldap,dc=com
40:dn: cn=team2000,ou=group,dc=open_ldap,dc=com
48:dn: uid=user1001,ou=People,dc=open_ldap,dc=com
61:dn: uid=user1002,ou=People,dc=open_ldap,dc=com
74:dn: uid=user2001,ou=People,dc=open_ldap,dc=com
87:dn: uid=user2002,ou=People,dc=open_ldap,dc=com
[root@ty-ldap01 ~]# 

■特定ユーザのパスワード変更
[root@ty-ldap01 ~]# ldappasswd -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret -s himitsu "uid=user1001,ou=People,dc=open_ldap,dc=com"
パスワードをプロンプトから入力する場合は[-s naisyo] → [-S]にする。

## パスワードが変更されたかの確認
[root@ty-ldap01 ~]# ldapsearch -x -h localhost -b "uid=user1001,ou=People,dc=open_ldap,dc=com" -LLL
dn: uid=user1001,ou=People,dc=open_ldap,dc=com
uid: user1001
cn: LDAP user1001
objectClass: account
objectClass: posixAccount
objectClass: top
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1000
homeDirectory: /home/user1001
userPassword:: e1NTSEF9WC9RTTFzVzhTSEpIYTdURUN1TENsRVpWMEhwbHIyVHQ=

[root@ty-ldap01 ~]#
## パスワードはbase64でエンコードされているのでデコード
[root@ty-ldap01 ~]# echo "e1NTSEF9WC9RTTFzVzhTSEpIYTdURUN1TENsRVpWMEhwbHIyVHQ=" | base64 -d
{SSHA}X/QM1sW8SHJHa7TECuLClEZV0Hplr2Tt[root@ty-ldap01 ~]#
⇒people.ldifに設定したパスワードは「{SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5」だったので確かに変更されているようです。

■特定ユーザエントリを削除
[root@ty-ldap01 ~]# ldapdelete -x -D "cn=Manager,dc=open_ldap,dc=com" -w secret "uid=user2002,ou=People,dc=open_ldap,dc=com"
[root@ty-ldap01 ~]# ldapsearch -x -h localhost -b "dc=open_ldap,dc=com" | grep -n "dn: uid"
48:dn: uid=user1001,ou=People,dc=open_ldap,dc=com
61:dn: uid=user1002,ou=People,dc=open_ldap,dc=com
74:dn: uid=user2001,ou=People,dc=open_ldap,dc=com
[root@ty-ldap01 ~]#

■登録したデータを全削除する場合
[root@ty-ldap01 ~]# rm -rf /var/lib/ldap/*
[root@ty-ldap01 ~]# cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@ty-ldap01 ~]# /etc/init.d/slapd restart
slapd を停止中:                                            [  OK  ]
slapd を起動中:                                            [  OK  ]
[root@ty-ldap01 ~]#
※以降の作業のために、全削除後もう一度ldifファイルでデータを登録しておきます。

■ホームディレクトリをNFSで公開
[root@ty-ldap01 ~]# vi /etc/exports
[root@ty-ldap01 ~]# cat /etc/exports
/home           *(rw,sync,no_root_squash)
[root@ty-ldap01 ~]# exportfs -a
[root@ty-ldap01 ~]# /etc/init.d/nfs start
NFS サービスを起動中:                                      [  OK  ]
NFS クォータを起動中:                                      [  OK  ]
NFS mountd を起動中:                                      [  OK  ]
NFS デーモンを起動中:                                      [  OK  ]
RPC idmapd を起動中:                                      [  OK  ]
[root@ty-ldap01 ~]#
## NFS自動起動設定
[root@ty-ldap01 ~]# chkconfig nfs on; chkconfig --list nfs
nfs             0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@ty-ldap01 ~]#


LDIFによるLDAPサーバへのデータ登録の手順は以上で終了です。
次回はいよいよアプリ系サーバからOpenLDAP上に登録したユーザでSSHログインを行います。


Before << (1) OpenLDAPのインストールと起動
Next >> (3) LDAP登録ユーザでのSSHログイン認証とパスワード変更

2014年4月24日木曜日

OpenLDAPのインストールと起動


■Linux SSHログイン認証をOpenLDAPで一元管理

LDAPサーバに登録したユーザでのSSHログインおよびパスワード変更をアプリ系サーバで実現するための流れを、下記のパートに分けて記載していきます。



■本編の概要
openldap-servers、openldap-clients、nss-pam-ldapdのインストールおよびslapd.confの 設定と変更方法、slapdサービスの起動およびLDAPサーバへの接続確認方法についてまとめます。 特に、CentOS 6系からslapdの設定はslapd.dディレクトリ以下のファイルで定義される方式に変更と なっているので注意が必要です。今回はDB_CONFIGを使用し、旧来のslapd.confに設定した内容を slapd.dディレクトリに出力する手順をまとめます。
OS: CentOS 6.5 (64-bit)
openldap: 2.4.23
nss-pam-ldapd: 0.7.5
LDAPサーバホスト名: ty-ldap01
アプリ系サーバホスト名: ty-app01,ty-app02

■インストール済みOpenLDAP関連パッケージの確認
[root@ty-ldap01 ~]# yum list installed '*ldap*'
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Installed Packages
apr-util-ldap.x86_64 1.3.9-3.el6_0.1    @anaconda-CentOS-201311272149.x86_64/6.5
openldap.x86_64      2.4.23-32.el6_4.1  @anaconda-CentOS-201311272149.x86_64/6.5
python-ldap.x86_64   2.3.10-1.el6       @anaconda-CentOS-201311272149.x86_64/6.5
[root@ty-ldap01 ~]#

■最低限必要なパッケージのインストール
openldap-servers、openldap-clients、nss-pam-ldapd を追加インストール
[root@ty-ldap01 ~]# yum install openldap-clients.x86_64 openldap-servers.x86_64 nss-pam-ldapd.x86_64
(中略)
===========================================================================
 Package                  Arch      Version             Repository    Size
===========================================================================
Installing:
 nss-pam-ldapd            x86_64    0.7.5-18.2.el6_4    base         152 k
 openldap-clients         x86_64    2.4.23-34.el6_5.1   updates      165 k
 openldap-servers         x86_64    2.4.23-34.el6_5.1   updates      2.0 M
Installing for dependencies:
 nscd                     x86_64    2.12-1.132.el6      base         219 k
 pam_ldap                 x86_64    185-11.el6          base          88 k
Updating for dependencies:
 openldap                 x86_64    2.4.23-34.el6_5.1   updates      265 k

Transaction Summary
===========================================================================
Install       5 Package(s)
Upgrade       1 Package(s)
(以下略)

■インストール済みOpenLDAP関連パッケージの再確認
[root@ty-ldap01 ~]# yum list installed '*ldap*'
(中略)
Installed Packages
apr-util-ldap.x86_64      1.3.9-3.el6_0.1     @anaconda-CentOS-201311272149.x86_64/6.5
nss-pam-ldapd.x86_64      0.7.5-18.2.el6_4    @base
openldap.x86_64           2.4.23-34.el6_5.1   @updates
openldap-clients.x86_64   2.4.23-34.el6_5.1   @updates
openldap-servers.x86_64   2.4.23-34.el6_5.1   @updates
pam_ldap.x86_64           185-11.el6          @base
python-ldap.x86_64        2.3.10-1.el6        @anaconda-CentOS-201311272149.x86_64/6.5
[root@ty-ldap01 ~]#

■DB_CONFIG準備
DB_CONFIGファイルは、OpenLDAPサーバが BerkeleyDB をドライブする際の環境定義を書いておくファイルであり、 slapd.confのdirectoryディレクティブで指定したディレクトリから探されます。
[root@ty-ldap01 ~]# cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

■slapd設定を変換
OpenLDAPサービスに必要となる設定がCentOS 6で変更になっています。 旧バージョンでは、slapdは /etc/openldap/slapd.conf から設定していました。 RedHatEnterpriseLinux 6のslapd設定は特殊なLDAPディレクトリ(/etc/openldap/slapd.d/) 内の事前定義済みのスキーマとDIT(ディレクトリ情報ツリー)と共に格納されるようになりました。 旧来の設定ファイルを新しいディレクトリで機能するように変換する方法を記述します。

## slapd.confの準備
[root@ty-ldap01 ~]# cp -p /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
## slapd.confのチェック
[root@ty-ldap01 ~]# slaptest -u -f /etc/openldap/slapd.conf
config file testing succeeded
[root@ty-ldap01 ~]#
## 新しいディレクトリの /etc/openldap/slapd.d/ の内容を削除
[root@ty-ldap01 ~]# rm -rf /etc/openldap/slapd.d/*
## slaptestを実行して設定ファイルの有効性をチェックし、新しい設定ディレクトリを指定
[root@ty-ldap01 ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
bdb_db_open: database "dc=my-domain,dc=com": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2).
backend_startup_one (type=bdb, suffix="dc=my-domain,dc=com"): bi_db_open failed! (2)
slap_startup failed (test would succeed using the -u switch)
[root@ty-ldap01 ~]#
## 新しいディレクトリ上でパーミッションを設定
[root@ty-ldap01 ~]# chmod -R 000 /etc/openldap/slapd.d
[root@ty-ldap01 ~]# chmod -R u+rwX /etc/openldap/slapd.d
[root@ty-ldap01 ~]# chown -R ldap: /etc/openldap/slapd.d
[root@ty-ldap01 ~]# chown -R ldap: /var/lib/ldap

■LDAPサーバの起動
[root@ty-ldap01 ~]# /etc/init.d/slapd start
slapd を起動中:                                            [  OK  ]
[root@ty-ldap01 ~]#
## 自動起動設定
[root@ty-ldap01 ~]# chkconfig slapd on; chkconfig --list slapd
slapd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@ty-ldap01 ~]#

■LDAPサーバへの接続確認
[root@ty-ldap01 ~]# ldapsearch -x -h localhost -b dc=my-domain,dc=com -LLL
No such object (32)
[root@ty-ldap01 ~]#
## オプション説明
"-x" 匿名ユーザーでの簡易認証
"-h" OpenLDAPサーバを指定
"-b" ディレクトリツリーの検索ベースを指定
"-LLL"最もシンプルなLDIFフォーマットへ出力を整形

## 結果補足
起動したばかりのOpenLDAPサーバからは、「検索条件に一致する結果はなし」との応答が返ります。
現時点ではまだエントリを登録していないため、これが正しい結果です。

■LDAPパスワードの作成
## 管理用
[root@ty-ldap01 ~]# slappasswd -s secret
{SSHA}XZY46aVGlCElS13dN4ryN0kwglZCVKqG
[root@ty-ldap01 ~]#
## 各ユーザ用(共通)
[root@ty-ldap01 ~]# slappasswd -s naisyo
{SSHA}u1iYyUnYJtd4u32LN3FvpFEc34yCVoE5
[root@ty-ldap01 ~]#

■slapd.confの設定とチェック
[root@ty-ldap01 ~]# cp -p /etc/openldap/slapd.conf /etc/openldap/slapd.conf.org
[root@ty-ldap01 ~]# vi /etc/openldap/slapd.conf
[root@ty-ldap01 ~]# egrep -n "^suffix|^rootdn|^rootpw" /etc/openldap/slapd.conf
115:suffix              "dc=open_ldap,dc=com"
117:rootdn              "cn=Manager,dc=open_ldap,dc=com"
123:rootpw              {SSHA}XZY46aVGlCElS13dN4ryN0kwglZCVKqG
[root@ty-ldap01 ~]# slaptest -u -f /etc/openldap/slapd.conf
config file testing succeeded
[root@ty-ldap01 ~]#
※rootpwには先ほど作成した管理者用のエンコードされたパスワード文字列を記述します。
※my-domain → open_ldap に変更してみました。

■slapd.confの設定変更反映
一連の作業をシェルスクリプト化しておきます。
[root@ty-ldap01 ~]# vi /usr/local/bin/change_slapd.sh
[root@ty-ldap01 ~]# cat /usr/local/bin/change_slapd.sh
#!/bin/sh
# /etc/openldap/slapd.conf の設定を反映するスクリプト

rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chmod -R 000 /etc/openldap/slapd.d
chmod -R u+rwX /etc/openldap/slapd.d
chown -R ldap: /etc/openldap/slapd.d
/etc/init.d/slapd restart

exit 0
[root@ty-ldap01 ~]# chmod 755 /usr/local/bin/change_slapd.sh
[root@ty-ldap01 ~]# change_slapd.sh
config file testing succeeded
slapd を停止中:                                            [  OK  ]
slapd を起動中:                                            [  OK  ]
[root@ty-ldap01 ~]#
slaptestコマンドでslapd.confの内容に基づきslapd.dディレクトリ以下にファイルを 出力したいが書き込み権限が無いため更新されません。よって事前に削除しておきます。

■管理者で接続確認
[root@ty-ldap01 ~]# ldapsearch -x -h localhost -D "cn=Manager,dc=open_ldap,dc=com" -w secret
# extended LDIF
#
# LDAPv3
# base <> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1
[root@ty-ldap01 ~]#
正しく接続できました。登録されたデータはまだないため上記のように表示されます。 OpenLDAPのインストールおよび起動、接続までの手順は以上となります。


Next >> (2) LDIFによるLDAPサーバへのデータ登録

2014年4月23日水曜日

Linux SSHログイン認証をOpenLDAPで一元管理


■概要
複数のユーザが複数のサーバにSSHでログインして作業する場合、各サーバごとにID/Passwordを準備して認証することも可能ですが、アカウント管理としては煩雑になっていしまいます。
LDAPサーバを導入してユーザのID/Passwordを一元管理することで、どのサーバにも同じPasswrodでログインでき、また、どこかのサーバでPasswordを変更しても他のサーバにログインする場合は変更後のPasswordでログインできるようになります。

OS: CentOS 6.4 (64-bit)
openldap: 2.4.23
nss-pam-ldapd: 0.7.5



■LinuxOSへのSSHログイン認証を一元管理するまでの流れ

LDAPサーバに登録したユーザでのSSHログインおよびパスワード変更をアプリ系サーバで
実現するための流れを、下記のパートに分けて記載していきます。

(1) OpenLDAPのインストールと起動 (⇒詳細ページ)
openldap-servers、openldap-clients、nss-pam-ldapdのインストールおよびslapd.confの
設定と変更方法、slapdサービスの起動およびLDAPサーバへの接続確認方法についてまとめます。
特に、CentOS 6系からslapdの設定はslapd.dディレクトリ以下のファイルで定義される方式に変更と
なっているので注意が必要です。今回はDB_CONFIGを使用し、旧来のslapd.confに設定した内容を
slapd.dディレクトリに出力する手順をまとめます。

(2) LDIFによるLDAPサーバへのデータ登録 (⇒詳細ページ)
LinuxのOSユーザは最低1つのグループに属しているので、それを踏襲したDIT
(Directory Information Tree)をLDAP上に定義して、ユーザを登録する手順をまとめます。
LDAPサーバへデータを登録するにはLDIFファイルの利用が便利です。登録したユーザの削除や
パスワード変更、一連作業時によくあるエラーのメッセージもまとめてみます。

(3) LDAP登録ユーザでのSSHログイン認証とパスワード変更 (⇒詳細ページ)
アプリ系サーバにLDAP認証モジュール(nss-pam-ldapd)を追加してLDAPサーバに接続します。
idコマンドでLDAPに登録したユーザを確認できるものの、ログインすることができません。
認証クライアントモジュールをsssdからnslcdに変更にすることで、SSHログインできるようになります。
homeDirectoryもLDAPサーバからNFSマウントする方式にした方が一元管理レベル感が高まります。

ここまで出来ればLDAPユーザのパスワードをアプリ系サーバから変更したいところですが、またしても
エラーに出くわします。slapd.confをさらに修正することでLDAPサーバ上のパスワードも変更できる
ようなります。こちらの手順もまとめてみたいと思います。

(4) OpenLDAPのログ出力設定 (⇒詳細ページ)
OpenLDAPサーバはデフォルト設定ではログを出力しません。
slapd.confにログレベルを記述すると、シスログ経由でログを出力します。
ログレベルおよびログの出力先の設定についての手順を記載します。

概要へ戻る

2014年4月9日水曜日

CentOS 6.5 OpenSSLの脆弱性対応手順

OpenSSL(オープンソースのSSL/TLS暗号化ライブラリ)のバージョン1.0.1/1.0.2系に、
秘密鍵などの漏えいにつながる恐れのある深刻な脆弱性(CVE-2014-0160)が2014年4月7日
(米国時間)に発見されたそうです。

CentOS6.5のインストールメディアに入っているOpenSSLのバージョンは確か1.0.1だったよ
うな・・・。さっそく確認すると見事にビンゴ!ほったらかすとSSLサーバー証明書の秘密鍵、
そしてユーザー名やパスワード、あるいはメールや重要な文書など、暗号化しているはずの
コンテンツが盗み出されてしまう可能性が・・・。((((;゜Д゜)))

ってことで対応手順をまとめてみます。
まぁうちのサーバにそんな重要な情報ありませんが。なにか。

OS: CentOS 6.5(64-bit)
OpenSSL: 1.0.1e-15.el6 → 1.0.1e-16.el6_5.7


■OpenSSLのバージョン確認
[root@centos65 ~]# rpm -q openssl
openssl-1.0.1e-15.el6.x86_64
[root@centos65 ~]#
Codenomiconが公開(http://heartbleed.com/)した詳細バージョンを確認してみる。
※上記サイトの一部抜粋

How about operating systems?

Some operating system distributions that have shipped with potentially vulnerable OpenSSL version:

  • Debian Wheezy (stable), OpenSSL 1.0.1e-2+deb7u4
  • Ubuntu 12.04.4 LTS, OpenSSL 1.0.1-4ubuntu5.11
  • CentOS 6.5, OpenSSL 1.0.1e-15
  • Fedora 18, OpenSSL 1.0.1e-4
  • OpenBSD 5.3 (OpenSSL 1.0.1c 10 May 2012) and 5.4 (OpenSSL 1.0.1c 10 May 2012)
  • FreeBSD 10.0 - OpenSSL 1.0.1e 11 Feb 2013
  • NetBSD 5.0.2 (OpenSSL 1.0.1e)
  • OpenSUSE 12.2 (OpenSSL 1.0.1c)
やっぱり完全アウトです…。(T-T)

■OpenSSLのアップデート
[root@centos65 ~]# yum update openssl
(中略)
============================================================================
 Package             Arch         Version              Repository     Size
============================================================================
Updating:
 openssl             x86_64      1.0.1e-16.el6_5.7     updates       1.5 M
Updating for dependencies:
 openssl-devel       x86_64      1.0.1e-16.el6_5.7     updates       1.2 M

Transaction Summary
============================================================================
Upgrade       2 Package(s)
(中略)
Updated:
  openssl.x86_64 0:1.0.1e-16.el6_5.7

Dependency Updated:
  openssl-devel.x86_64 0:1.0.1e-16.el6_5.7

Complete!
[root@centos65 ~]#

■バージョン再確認
[root@centos65 ~]# rpm -q openssl
openssl-1.0.1e-16.el6_5.7.x86_64
[root@centos65 ~]#
## 念のためビルドされた日時も確認
[root@centos65 ~]# openssl version -a
OpenSSL 1.0.1e-fips 11 Feb 2013
built on: Tue Apr  8 02:39:29 UTC 2014
platform: linux-x86_64
options:  bn(64,64) md2(int) rc4(8x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/etc/pki/tls"
engines:  dynamic
[root@centos65 ~]#
とりあえずこれで一安心。
ちなみに、OpenSSL 0.9.8系/1.0.0系については、この脆弱性は存在しないそうです。

こちらの情報が何かのお役に立てましたら幸いです。サイト継続ご協力のほどお願い申し上げます。m(_ _)m

2014年4月5日土曜日

CentOS 6系でVIP(仮想IP)を恒久的に設定する方法

1枚のNICに複数のIPアドレスを割り当てたい場合に重宝する設定です。
逆に複数のNICに1つのIPアドレスを割り当てる設定はNICチーミングです。
どちらも昔からある設定なので今更すぎますが・・・。
今回は恒久的に設定する方法を記載します。一時的に設定する方法はこちらです。
VIP(仮想IP)はWebサーバでVirtualHost設定時にIPを個別に割り当てたい場合等で便利です。

OS: CentOS 6.3(64-bit)


■VIP恒久設定用デバイスファイル作成
[root@cent63 ~]# cd /etc/sysconfig/network-scripts/
[root@cent63 network-scripts]# cp -p ifcfg-eth0 ifcfg-eth0:1
[root@cent63 network-scripts]# vi ifcfg-eth0:1
[root@cent63 network-scripts]# cat ifcfg-eth0:1
DEVICE="eth0:1"
BOOTPROTO=none
NM_CONTROLLED="yes"
ONBOOT=yes
TYPE="Ethernet"
HWADDR=00:0C:29:D1:73:7C
IPADDR=192.168.16.136
PREFIX=24
GATEWAY=192.168.16.254
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0:1"
[root@cent63 network-scripts]#
とりあえず、「DEVICE」と「IPADDR」と「NAME」を設定。その他は変更なし。
※ifcfg-eth0:2も同様に準備。

■設定反映
[root@cent63 network-scripts]# /etc/init.d/network restart
インターフェース eth0 を終了中:                          [  OK  ]
インターフェース eth1 を終了中:                          [  OK  ]
ループバックインターフェースを終了中                       [  OK  ]
ループバックインターフェイスを呼び込み中                   [  OK  ]
インターフェース eth0 を活性化中:                        [  OK  ]
インターフェース eth1 を活性化中:                        [  OK  ]
[root@cent63 network-scripts]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:D1:73:7C
          inet addr:192.168.16.36  Bcast:192.168.16.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:27ff:fad2:737c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:50 errors:0 dropped:0 overruns:0 frame:0
          TX packets:76 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:4380 (4.2 KiB)  TX bytes:12681 (12.3 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:D1:73:86
          inet addr:192.168.7.54  Bcast:192.168.7.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:27ff:fad2:7386/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:23 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:180 (180.0 b)  TX bytes:4011 (3.9 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)

[root@cent63 network-scripts]#
反映されない…。(T-T)
調べてみると、CentOS5系までは上記の設定だけでOKだったが、6系からはudevを使用する方式に変更となったらしい。

■udev設定
udev(userspace device management)とは、カーネルがパソコンへの接続を検出したデバイスに対して、 動的に「デバイス・ファイル」を作成して割り当てるための仕組みだそうです。
[root@cent63 ~]# cd /etc/udev/rules.d/
[root@cent63 rules.d]# cp -p 70-persistent-net.rules 70-persistent-net.rules.org
[root@cent63 rules.d]# vi 70-persistent-net.rules
[root@cent63 rules.d]# cat 70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x15ad:0x07b0 (vmxnet3)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:d1:73:7c", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:d1:73:7c", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0:1"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:d1:73:7c", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0:2"

# PCI device 0x15ad:0x07b0 (vmxnet3)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:d1:73:86", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
[root@cent63 rules.d]#
NAME="eth0"の行をマネして、NAME="eth0:1"とNAME="eth0:2"の行を追加。
設定を反映するにはOSの再起動が必要ですが、デバイスファイルを準備してからにしてください。

■NetworkManagerの停止
NetworkManager (ネットワークマネージャ) は、ネットワークデバイスと接続が利用可能な時に それらをアクティブに維持するよう試行する動的ネットワーク制御及び設定システムです。
⇒ので、サーバOSではほぼ不要です。っというか邪魔。
[root@cent63 ~]# /etc/init.d/NetworkManager stop
NetworkManager デーモンを停止中:                           [  OK  ]
[root@cent63 ~]# chkconfig NetworkManager off; chkconfig --list NetworkManager
NetworkManager  0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@cent63 ~]#

■VIP恒久設定用デバイスファイル再作成
[root@cent63 ~]# cd /etc/sysconfig/network-scripts/
[root@cent63 network-scripts]# cp -p ifcfg-eth0 ifcfg-eth0:1
[root@cent63 network-scripts]# vi ifcfg-eth0:1
[root@cent63 network-scripts]# cat ifcfg-eth0:1
DEVICE="eth0:1"
BOOTPROTO=static
NM_CONTROLLED="no"
ONBOOT=yes
TYPE="Ethernet"
# UUID="43f82f1f-073f-4494-8500-8f211ec8ede2"
# HWADDR=00:0C:29:D1:73:7C
IPADDR=192.168.16.136
PREFIX=24
# GATEWAY=192.168.16.254
# DNS1=192.168.16.10
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
# NAME="System eth0"
[root@cent63 network-scripts]#
70-persistent-net.rulesに記載したデバイスファイルは必ず準備してください。 でないと再起動後にネットワークに接続できなくなります。
NetworkManager関連等、不要な設定はコメントアウトとしました。
※ifcfg-eth0:2も同様に準備。

■ifcfg-ethxxの説明
## BOOTPROTO
BOOTPROTO には static というオプションはなく、dhcp、bootp、それ以外 となります。
明示的にアドレスを指定する場合は static、アドレスを与えないインターフェスの場合 none としておくのが慣例です。

## NM_CONTROLLED
yesにするとNetwork Managerの管理下に置かれる。今回は停止しているのでこの行をコメントアウトしてもよいが、明示的に"no"としています。

## ONBOOT
起動時にNICを有効化します。

## UUID
NetworkManagerでの識別子に使われるので、設定不要です。

## HWADDR
MACとインターフェースの関連付け。書いておいても問題ないが、udevとの二重管理になるのでコメントアウトしています。

## IPADDR
IPアドレスを指定しています。

## PREFIX
NETMASKと記載してもよいですが、RHEL6(CentOS6系)からはPREFIXが推奨されています。

## GATEWAY
NICごとに個別にゲートウェイを指定する場合はここに記載します。
今回はGateWayが1つなので、/etc/sysconfig/network の設定に従うということでコメントアウト。

## DNS1
NICごとに個別にDNSを指定する場合はここに記載します。
今回はDNSを個別設定しないので、/etc/resolv.conf の設定に従うということでコメントアウト。

## DEFROUTE
このオプションは複数NICを備えるサーバで、デフォルトの通信に利用されるインターフェースを指定します。
yesとしたインターフェースがデフォルト通信用になります。1NICの場合は指定してもしなくてもOK。

## IPV4_FAILURE_FATAL
IPv4の設定に失敗した場合、IPv6の設定を行う。
noで有効(IPv6を設定する)、yesで無効(IPv6を設定しない)

## IPV6INIT
IPv6を利用するか。今回は使用しません。

## NAME
NetworkManagerでの識別子に使われるので、設定不要です。

■設定反映と確認
[root@cent63 network-scripts]# /etc/init.d/network restart
インターフェース eth0 を終了中:                          [  OK  ]
ループバックインターフェースを終了中                       [  OK  ]
ループバックインターフェイスを呼び込み中                   [  OK  ]
インターフェース eth0 を活性化中:                        [  OK  ]
インターフェース eth1 を活性化中:                        [  OK  ]
[root@cent63 network-scripts]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:D1:73:7C
          inet addr:192.168.16.36  Bcast:192.168.16.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:27ff:fad2:737c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:17 errors:0 dropped:0 overruns:0 frame:0
          TX packets:49 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1434 (1.4 KiB)  TX bytes:7410 (7.2 KiB)

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:D1:73:7C
          inet addr:192.168.16.136  Bcast:192.168.16.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth0:2    Link encap:Ethernet  HWaddr 00:0C:29:D1:73:7C
          inet addr:192.168.16.236  Bcast:192.168.16.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1      Link encap:Ethernet  HWaddr 00:0C:29:D1:73:86
          inet addr:192.168.7.54  Bcast:192.168.7.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:27ff:fad2:7386/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:23 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:120 (120.0 b)  TX bytes:3894 (3.8 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)

[root@cent63 network-scripts]#
udevを設定することにより、OSを再起動しても設定は保持されるようになります。

こちらの情報が何かのお役に立てましたら幸いです。サイト継続のご協力ありがとうございます。m(_ _)m