CentOS 7 で PHP 7.2 を OpenLDAP 付きで configure/make するとエラーになる

【環境】

$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

$ rpm -qa | grep openldap
openldap-clients-2.4.44-20.el7.x86_64
openldap-devel-2.4.44-20.el7.x86_64
openldap-2.4.44-20.el7.x86_64

以下のようなオプションで、PHP 7.2 をconfigureすると、LDAPのところでエラーになる。

# ./configure \
--prefix=/usr/local/lib/php-7.2 \
--with-ldap \
・
・省略
・
checking size of long int... (cached) 8
configure: error: Cannot find ldap libraries in /usr/lib.


OpenLDAPのライブラリが入っているはずだが、状況を確認。

# ls -l /usr/lib64/libldap*
lrwxrwxrwx 1 root root     21 124 08:31 /usr/lib64/libldap-2.4.so.2 -> libldap-2.4.so.2.10.7
-rwxr-xr-x 1 root root 352624 1031 08:15 /usr/lib64/libldap-2.4.so.2.10.7
lrwxrwxrwx 1 root root     21 1216 14:43 /usr/lib64/libldap.so -> libldap-2.4.so.2.10.7
lrwxrwxrwx 1 root root     23 124 08:31 /usr/lib64/libldap_r-2.4.so.2 -> libldap_r-2.4.so.2.10.7
-rwxr-xr-x 1 root root 381440 1031 08:15 /usr/lib64/libldap_r-2.4.so.2.10.7
lrwxrwxrwx 1 root root     23 1216 14:43 /usr/lib64/libldap_r.so -> libldap_r-2.4.so.2.10.7


64bit用パッケージしか入っていないので、/usr/lib/ 以下には、libldap* のファイルは無い。
configure で /usr/lib 以下にライブラリを探しに行っているところを見ると、32bit用のパッケージがあれば良いのかもしれない。

# yum install openldap-devel.i686

でインストールしようとすると、他にも依存関係のあるパッケージが大量にリストアップされる。
この方法は危険な匂いがするので中止。



/usr/lib/libldap.so と /usr/lib/libldap_r.so を探しに行っていると思われるので、次のように /usr/lib 以下から /usr/lib64 のファイルへシンボリックリンクを作成。

# ln -s /usr/lib64/libldap.so /usr/lib/libldap.so
# ln -s /usr/lib64/libldap_r.so /usr/lib/libldap_r.so


確認

# ls -l /usr/lib/libldap*
lrwxrwxrwx 1 root root 21 1216 14:53 /usr/lib/libldap.so -> /usr/lib64/libldap.so
lrwxrwxrwx 1 root root 23 1216 14:53 /usr/lib/libldap_r.so -> /usr/lib64/libldap_r.so


再びconfigureしてみると、問題は回避される。

# ./configure \
--prefix=/usr/local/lib/php-7.2 \
--with-ldap \
・
・省略
・
Thank you for using PHP.

次に、make でも別なエラーに遭遇する。

# make
・
・省略
・
/usr/bin/ld: ext/ldap/.libs/ldap.o: undefined reference to symbol 
'ber_scanf'
/usr/lib64/liblber-2.4.so.2: error adding symbols: DSO missing from 
command line
collect2: error: ld returned 1 exit status
make: *** [sapi/cli/php] エラー 1


ber_scanf というシンボルが見えない事が原因というメッセージなので、これをネットで検索すると、man page が出る。
https://linux.die.net/man/3/ber_scanf

これによると、このシンボルは、
 OpenLDAP LBER (liblber, -llber)
に含まれるらしい。
liblber.so のこと。

configure 前に LDFLAGS で liblber.so を参照するように指定して、やり直し。

# export LDFLAGS=-llber
# configure 
・
・省略
・
# make

これで make できるようになった。

wkhtmltoimage/wkhtmltopdf コマンドで UserAgent を指定する

タイトルの通り、wkhtmltoimage/wkhtmltopdf コマンドで UserAgent を指定したくなったでのメモ。


【環境】
CentOS 6.x
wkhtmltoimage 0.12.5


デフォルトでは、wkhtmlto* コマンドでアクセスしたWebサーバのログに、以下のようなUserAgentが残った。

"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) wkhtmltoimage Safari/534.34"

wkhtmltoimage と表示されるのが嫌なら、任意のUserAgentを指定できる。

コマンドのオプションに、

 --custom-header 
 --custom-header-propagation

の両方を指定する。

両方指定しないと、適用されない。

    • custom-header の書式で、HTTPヘッダを追加できる。


例)

wkhtmltoimage \
  --custom-header "User-Agent" "${USER_AGENT}" \
  --custom-header-propagation \
  ${URL} \
  ${OURPUT_FILE}

${...} は、シェルの変数。

なお、wkhtmltopdf コマンドでも同様。


wkhtmltoimage/wkhtmltopdf コマンドの基本的な使い方は、2014年に書いてた。

shobon.hatenablog.com

2019年1月のWindowsUpdate後、Windows7へのリモートデスクトップに失敗する

【環境】
リモートホスト側:Windows 7 Pro SP1
クライアント側:Windows 10 Pro 1809


リモートホスト側とクライアント側の両方に対して、2019年1月のロールパッチを適用したら、Windows7リモートデスクトップに失敗する(繋がらない)ようになった。

エラーメッセージは以下の通り。

f:id:savakan:20190110202122p:plain

認証エラーが発生しました
ローカル セキュリティ機関にアクセスできません


リモートホスト側のリモートデスクトップ接続のオプションを見直して、セキュリティレベルを低くすると、接続できるようになった。(根本的な解決法ではない)

f:id:savakan:20190110202146p:plain

再びセキュリティレベルを高い設定に直すと、やはり接続に失敗する。

リモートホスト側とクライアント側の片方だけWindowsUpdate未更新の状態で検証できないので、どちらに原因があるかは不明。

これは困った(´・ω・`)


【2019.1.11 追記】

ニュースにもあったので貼っておく。
forest.watch.impress.co.jp

MSのBlog
2019 年 1 月 8 日の更新プログラムを適用すると、ファイル サーバーへの通信やリモート デスクトップ接続が不可能となる – Ask the Network & AD Support Team


【2019.2.14 追記】
2月の月例パッチで修正されました。
shobon.hatenablog.com

改竄検知システム(AIDE)の導入と設定

AIDE は、ホスト型の侵入検知システムであり、ファイルの改竄を検知することができる。

公式サイト
AIDE - Advanced Intrusion Detection Environment

公式サイトによると、Advanced Intrusion Detection Environment の略らしい。
読み方は、「エイド」なのか「アイーデ」なのか不明。


【環境】
CentOS 7

CentOS 6でも、同等の手順で導入、設定できる。

導入

CentOS 6/7 なら、yum でインストールできる。

# yum install aide

インストールされるものは以下。

# rpm -ql aide
/etc/aide.conf
/etc/logrotate.d/aide
/usr/sbin/aide
/usr/share/doc/aide-0.15.1
/usr/share/doc/aide-0.15.1/AUTHORS
/usr/share/doc/aide-0.15.1/COPYING
/usr/share/doc/aide-0.15.1/ChangeLog
/usr/share/doc/aide-0.15.1/NEWS
/usr/share/doc/aide-0.15.1/README
/usr/share/doc/aide-0.15.1/README.quickstart
/usr/share/doc/aide-0.15.1/contrib
/usr/share/doc/aide-0.15.1/contrib/aide-attributes.sh
/usr/share/doc/aide-0.15.1/contrib/bzip2.sh
/usr/share/doc/aide-0.15.1/contrib/gpg2_check.sh
/usr/share/doc/aide-0.15.1/contrib/gpg2_update.sh
/usr/share/doc/aide-0.15.1/contrib/gpg_check.sh
/usr/share/doc/aide-0.15.1/contrib/gpg_update.sh
/usr/share/doc/aide-0.15.1/contrib/sshaide.sh
/usr/share/doc/aide-0.15.1/manual.html
/usr/share/man/man1/aide.1.gz
/usr/share/man/man5/aide.conf.5.gz
/var/lib/aide
/var/log/aide

設定

設定ファイルは、/etc/aide.conf である。

最初の方に、参照するデータベースやレポートの出力先などの定義がある。

@@define DBDIR /var/lib/aide
@@define LOGDIR /var/log/aide

# The location of the database to be read.
database=file:@@{DBDIR}/aide.db.gz

# The location of the database to be written.
#database_out=sql:host:port:database:login_name:passwd:table
#database_out=file:aide.db.new
database_out=file:@@{DBDIR}/aide.db.new.gz

# Whether to gzip the output to database.
gzip_dbout=yes

# Default.
verbose=5

report_url=file:@@{LOGDIR}/aide.log
report_url=stdout
#report_url=stderr
#NOT IMPLEMENTED report_url=mailto:root@foo.com
#NOT IMPLEMENTED report_url=syslog:LOG_AUTH


デフォルトでは、次のようになっている。

データベース:/var/lib/aide/aide.db.gz
新しく書き込むデータベース:/var/lib/aide/aide.db.new.gz
ログファイル:/var/log/aide/aide.log

「NOT IMPLEMENTED」とあるが、メールやsyslogへ出力する機能を予定しているのかもしれない。
(AIDE の最終更新が2016年だけど・・・)


設定ファイルでは、監視対象と除外のディレクトリ/ファイルを列挙する。
例えば、デフォルトでは、下記のディレクトリが監視対象になっている。

/boot   NORMAL
/bin    NORMAL
/sbin   NORMAL
/lib    NORMAL
/lib64  NORMAL
/opt    NORMAL
/usr    NORMAL
/root   NORMAL

デフォルトでは、下記のディレクトリが監視対象から除外されている。
(先頭に ! を付けると除外になる)

# These are too volatile
!/usr/src
!/usr/tmp


「NORMAL」は、検査ルールであり、設定ファイルのコメントに記載がある。
<ルールの一覧>

# These are the default rules.
#
#p:      permissions
#i:      inode:
#n:      number of links
#u:      user
#g:      group
#s:      size
#b:      block count
#m:      mtime
#a:      atime
#c:      ctime
#S:      check for growing size
#acl:           Access Control Lists
#selinux        SELinux security context
#xattrs:        Extended file attributes
#md5:    md5 checksum
#sha1:   sha1 checksum
#sha256:        sha256 checksum
#sha512:        sha512 checksum
#rmd160: rmd160 checksum
#tiger:  tiger checksum

#haval:  haval checksum (MHASH only)
#gost:   gost checksum (MHASH only)
#crc32:  crc32 checksum (MHASH only)
#whirlpool:     whirlpool checksum (MHASH only)

FIPSR = p+i+n+u+g+s+m+c+acl+selinux+xattrs+sha256

#R:             p+i+n+u+g+s+m+c+acl+selinux+xattrs+md5
#L:             p+i+n+u+g+acl+selinux+xattrs
#E:             Empty group
#>:             Growing logfile p+u+g+i+n+S+acl+selinux+xattrs

# You can create custom rules like this.
# With MHASH...
# ALLXTRAHASHES = sha1+rmd160+sha256+sha512+whirlpool+tiger+haval+gost+crc32
ALLXTRAHASHES = sha1+rmd160+sha256+sha512+tiger
# Everything but access time (Ie. all changes)
EVERYTHING = R+ALLXTRAHASHES

# Sane, with multiple hashes
# NORMAL = R+rmd160+sha256+whirlpool
NORMAL = FIPSR+sha512

# For directories, don't bother doing hashes
DIR = p+i+n+u+g+acl+selinux+xattrs

# Access control only
PERMS = p+i+u+g+acl+selinux

# Logfile are special, in that they often change
LOG = >

# Just do sha256 and sha512 hashes
LSPP = FIPSR+sha512

# Some files get updated automatically, so the inode/ctime/mtime change
# but we want to know when the data inside them changes
DATAONLY =  p+n+u+g+s+acl+selinux+xattrs+sha256


上記によると、
 FIPSR = p+i+n+u+g+s+m+c+acl+selinux+xattrs+sha256
 NORMAL = FIPSR+sha512
である。
それぞれの識別子の意味は、以下の通り。

p:パーミッション
i:i-node番号
n:対象のファイルを指すリンク数
u:所有者
g:グループ
s:サイズ
m:修正日時
c:アクセス日時
acl:アクセスコントロール
selinuxSELinuxセキュリティ・コンテキスト
xattrs:拡張ファイル属性
sha256:チェックサム
sha512:チェックサム



例えば、/var/log/lastlog ファイルは、デフォルトで LSPP がセットされているが、これではユーザがログインする度に変更が発生する。
パーミッションだけチェックするように変更するには、次のようにする。

/var/log/lastlog LSPP
 ↓
/var/log/lastlog PERMS

使い方

最初に、データベースの初期化を以下のコマンドで行う。

# aide -i

AIDE, version 0.15.1

### AIDE database at /var/lib/aide/aide.db.new.gz initialized.


表示される通り、DBは「aide.db.new.gz」として作成される。
実際にAIDEによる検査を行う際は、ここで作成した新しい定義を参照する用のファイルへコピーする必要がある。

データベースのファイル名は設定ファイルに定義があるが、デフォルトでは次のように上書きする。

# cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

検査

以下のコマンドで行う。

# aide -C

AIDE, version 0.15.1

### All files match AIDE database. Looks okay!


試しに、「/bin/aide-dummy」というダミーファイルを作成し、AIDEに検出させてみる。

# touch /bin/aide-dummy
# aide -C
AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2018-11-03 13:23:39

Summary:
  Total number of files:        68462
  Added files:                  1
  Removed files:                0
  Changed files:                1


---------------------------------------------------
Added files:
---------------------------------------------------

added: /usr/bin/aide-dummy

---------------------------------------------------
Changed files:
---------------------------------------------------

changed: /usr/bin

---------------------------------------------------
Detailed information about changes:
---------------------------------------------------


Directory: /usr/bin
 Mtime    : 2018-11-03 08:35:57              , 2018-11-03 13:23:37
 Ctime    : 2018-11-03 08:35:57              , 2018-11-03 13:23:37


チェック結果はコマンドの戻り値でも確認できる。

変更がある場合

# echo $?
5

変更が無い場合

# echo $?
0


結果は、/var/log/aide/aide.log にも出力されるが、追記ではなく上書きされる模様。
CentOS 7.x/AIDE Ver-0.15.1 の場合)

また、/etc/logrotate.d/aide にはログローテーションの設定があるが、ログファイルは追記ではなく上書きなので、デフォルトのままではローテーションされにくい。
必要に応じて、daily などを設定して、ローテーションすると良い。

データベースの更新

セキュリティパッチを適用した後などは、AIDE のデータベースを更新する必要がある。

更新は、以下のコマンドで行う。

# aide -u
# cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz


実際の運用では、
 ・定期的にAIDEによる改竄チェックを実行
 ・セキュリティパッチ適用前には、改竄チェックを行い、異常が無い事を確認後に適用する
 ・セキュリティパッチ適用後には、AIDE のデータベースを更新
のようになると思われる。

定期的にAIDE でチェックを行うには、シェルスクリプトをcronなどで実行する方法が考えられる。


簡単なチェックスクリプトの例(変更があった場合のみ、root へメールする。AIDE のデータベースを更新するまで通知し続ける)

#!/bin/bash

MAIL_TO="root"
MAIL_SUBJECT="AIDE detected warning"
MAIL_TEXT=`mktemp /tmp/temp.XXXXXX`

aide -C > $MAIL_TEXT

if [ $? -gt 0 ]; then
  mail -s "$MAIL_SUBJECT" $MAIL_TO < $MAIL_TEXT
fi

rm -rf $MAIL_TEXT

参考

RHEL セキュリティ: ファイル監視による侵入検知 AIDE
http://aikotobaha.blogspot.jp/2011/11/rhel-aide.html

OpenSUSE - 第12章 AIDE を利用した侵入検知
http://manual.geeko.cpon.org/ja/cha.aide.html

CIFSマウント時の SMB バージョンのデフォルトが 1.0 ではなくなった

【環境】
CentOS Linux release 7.6.1810 (Core)
kernel-3.10.0-957.1.3.el7.x86_64
util-linux-2.23.2-59.el7.x86_64


CentOS 7.5 → 7.6 へ更新したら、CentOS からNASをCIFSマウントできなくなった。

/var/log/messages へ次のようなエラーが出力される。

Dec  8 08:22:16 host_name kernel: No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3 (or SMB2.1) specify vers=1.0 on mount.

バージョンが上がった事で、SMB接続する際のデフォルトバージョンが1.0→2.1 になったらしい。

どのパッケージが影響したか分からない。
 ・カーネル(cifs.ko.xz?)
 ・util-linux(mountコマンドが入っている)
あたり?


SMB1.0で接続したければ、マウント時に vers=1.0 オプションを指定しろとの事。

autofs でマウントする場合も同様に、このオプションの指定がなければマウントエラーになる。

マウントするNASが古いなどで、SMB 1.0にしか対応していない場合は、このオプションが必要。

手元のNASLinuxベース)も古いので、「ついに使えなくなったか!?」と一瞬焦った。

光コラボらしき勧誘が来て困る

ネットにも多くの情報があるのですが、我が家にも光コラボと思われる勧誘の電話がありました。

せっかくなのでメモ。

「」:会話
():心の声


相手「NTTフレッツ光の料金の件でご案内の御電話となります」

私「えっ?は、はい?」

相手「来月以降もNTTフレッツ光りをご利用の場合、来月から料金が安くなります」

私「そうなんですかー」

相手の社名を聞き逃したかと思って、

私「NTTさんでしょうか?ハガキなどで以前にもご案内頂いていましたか?」

相手「NTTから委託されています、○○サポートと申します。今回はお電話での案内となります」

続けて、

相手「今は6000円~7000円くらいの月額かと思われますが、これがもっと安くなります」

私「ご案内頂いているものは、ホームページでも確認できますか?」

相手「いいえ、このお電話でのご案内となります。フレッツ光をご利用の方に特別のご案内をしております」

私(!?怪しい・・・)

私「は、はぁ」

相手「NTTフレッツ光りのホームページから、転用承諾番号をご確認頂くと、すぐに手続きが可能となります」

私「この部屋にはパソコンがありませんので、確認できないのですが・・・」

相手「それでは、お部屋をご移動頂いて、5分後くらいにもう一度お電話いたします」

私「すみません。パソコンはデスクトップで移動できませんし、この固定電話は、有線なので移動できません」

相手「それでは携帯電話を教えて頂ければ、そちらへお掛けしますが」

私「携帯電話番号を教えるのはちょっと・・・。こちらから掛け直す電話番号はありますか?」

相手「ございません。発信専用の電話となっております」

私(相手も情報を出さないなぁ・・・)

私「料金は今のもので不満はありませんし、他社へ変更するつもりはありません。すみませんが、お断りいたします」


といった感じでした。


この手の勧誘電話は、総務省からも注意が出ています。

光コラボレーションモデル 不適切な電話勧誘にご注意ください! - 総務省
http://www.soumu.go.jp/main_content/000388714.pdf


何度か同じような電話を受けているのですが、今はもう面倒なので、「光コラボの勧誘ですか?不要ですので」と言って終わります。

いつも思うのは、以下の点。

  • 相手の社名を聞きとれない(もしくは最初に名乗らない)
  • やたら使われる「NTT」という名前に意識が行ってしまう(NTTからの電話に思ってしまう人がいるかもしれない)
  • どうにかして転用承諾番号を確認、取得させようとする(NTTからの電話だと思った人は、教えてしまいそう)
  • ホームページや問い合わせ先の情報を要求しても、教えてくれない


ADSLだった頃、「光へ移行しませんか」という電話が多く掛って来た時期がありました。

光を使っていると、今度は「コラボへ移行しませんか?」な勧誘が来るのです。

光コラボそのものや自社のサービスの案内をせず、とりあえず転用承諾番号を確認、取得させようとするところも不審な訳ですが、

そもそも「フレッツ光を使っているという事を知って勧誘電話してくる」のが嫌で、

こういうの何とかならないのかなぁと思った次第でした。


で、調べてみると・・・NTT東西にて、勧誘停止登録受付窓口なるものがあるらしい。

www.ntt-east.co.jp

www.ntt-west.co.jp


読んでみると、

勧誘を停止するにあたり、停止登録頂いた電話番号及び住所・氏名等お客さま情報を弊社代理店等へ提供いたしますので、予めご了承願います。

えーーーーー、でも停止するための情報を伝えるとなると、そうなるか・・・。

これの効果がどれほどか分かりませんが、もう暫し様子を見たり調べたりして考えよう。


と、光コラボそのものが悪いと言っている訳ではありません。

ユーザによっては、プロバイダやdocomoなどの光コラボがマッチするケースもあり、サービスそのものが悪い訳ではありません。

得体の知れない変な勧誘が悪いのです。



最後に、光コラボらしき勧誘には気をつけましょう。

もし、同居していない実家に勧誘電話がかかってきたら、両親が契約してしまうかもしれません。

気をつけましょう。

VMware vCenter Converter Standalone 5.5.3 のダウンロード

止められない古い仮想マシンがあり、そのパーティションサイズを変更したかったが、Converter 6.x では出来なかった。

古いバージョン(5.5)を使おうと思ったものの、公式サイトでリンクを辿っても、6.x へリダイレクトされてしまい、ダウンロードリンクが見つけられなかった。


色々探していたら、コミュニティで直リンクを見かけた。
communities.vmware.com



以下は、2018/11/5時点では有効なダウンロードリンクだが、いつか消えると思われる。
ダウンロード先は公式サイトのURLだけど、サイト検索しても辿り着けないので直リンクを。

https://my.vmware.com/group/vmware/get-download?downloadGroup=CONV553_GA

ダウンロードには、VMwareアカウントが必要。


同じ境遇の人がいるかもしれないので、メモ。