rsyslog に *** Slice of root のログが出力される

【環境】

# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

# rpm -qa | grep rsyslog
rsyslog-8.24.0-12.el7.x86_64

# rpm -qa | grep systemd
systemd-libs-219-42.el7_4.4.x86_64
systemd-sysv-219-42.el7_4.4.x86_64
systemd-219-42.el7_4.4.x86_64


以下のようなログが定期的に出力される。

# cat /var/log/messages
・・・省略
Jan 10 22:30:01 hoge systemd: Created slice User Slice of root.
Jan 10 22:30:01 hoge systemd: Starting User Slice of root.
Jan 10 22:30:01 hoge systemd: Started Session 236 of user root.
Jan 10 22:30:01 hoge systemd: Starting Session 236 of user root.
Jan 10 22:30:01 hoge systemd: Removed slice User Slice of root.
Jan 10 22:30:01 hoge systemd: Stopping User Slice of root.


journald にも出力されているが、rsyslog 側で無視して、ファイルへ書き込まないようにする。
手順は、以前と同じ。
shobon.hatenablog.com


以下のようなファイルを作成する。

# cat /etc/rsyslog.d/ignore-systemd-session-slice.conf
if $programname == "systemd" and ($msg contains "Starting Session" or $msg contains "Started Session" or $msg contains "Created slice" or $msg contains "Starting user-" or $msg contains "Starting User Slice of" or $msg contains "Removed session" or $msg contains "Removed slice User Slice of" or $msg contains "Stopping User Slice of") then stop

rsyslogを再起動して反映し、/var/log/messages に出力されなくなった事を確認する。

# systemctl restart rsyslog


参考;
https://access.redhat.com/solutions/1564823

Packet send failed to や Failed to send packet trying to query name がログに出力される

【環境】

# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

# rpm -qa | grep samba
samba-client-libs-4.6.2-12.el7_4.x86_64
samba-common-tools-4.6.2-12.el7_4.x86_64
samba-common-4.6.2-12.el7_4.noarch
samba-libs-4.6.2-12.el7_4.x86_64
samba-4.6.2-12.el7_4.x86_64
samba-common-libs-4.6.2-12.el7_4.x86_64

/var/log/messages に次のようなログが頻繁に出力される。

Jan 10 21:07:40 hoge nmbd[1106]: [2018/01/10 21:07:40.837878,  0] ../source3/libsmb/nmblib.c:873(send_udp)
Jan 10 21:07:40 hoge nmbd[1106]:  Packet send failed to 192.168.10.255(138) ERRNO=許可されていない操作です
Jan 10 21:09:20 hoge nmbd[1106]: [2018/01/10 21:09:20.367062,  0] ../source3/libsmb/nmblib.c:873(send_udp)
Jan 10 21:09:20 hoge nmbd[1106]:  Packet send failed to 192.168.10.255(137) ERRNO=許可されていない操作です
Jan 10 21:09:20 hoge nmbd[1106]: [2018/01/10 21:09:20.367202,  0] ../source3/nmbd/nmbd_packets.c:179(send_netbios_packet)
Jan 10 21:09:20 hoge nmbd[1106]:  send_netbios_packet: send_packet() to IP 192.168.10.255 port 137 failed
Jan 10 21:09:20 hoge nmbd[1106]: [2018/01/10 21:09:20.367233,  0] ../source3/nmbd/nmbd_namequery.c:245(query_name)
Jan 10 21:09:20 hoge nmbd[1106]:  query_name: Failed to send packet trying to query name TEST<1d>

ホストのiptables等で、パケットの送信が遮断されているためと思われる。
iptablesで許可すると、journald/rsyslog いずれにも、上記のログは出なくなる)

iptables で制限を解除すれば良いけれど、何らかの事情でそれが出来ない場合の対処法。

CentOS 7の場合、ログはいったん journald が受け取り、rsyslog が受け取っている構造になっている。
ここで、journald → rsyslog へ渡される際に、rsyslog 側で無視するようにすれば、journald にログは残しつつ、rsyslog からファイルへの出力を抑制できる。
(但し、CentOS 7の journald の初期設定では、/var/run/log/journal 以下に書き込まれるので、OSを再起動すると消える)

rsyslog側で無視するには、以下のようなファイルを作成する。

# cat /etc/rsyslog.d/ignore-nmbd-query.conf
if $programname == "nmbd" and ($msg contains "Packet send failed to" or $msg contains "query_name" or $msg contains "send_netbios_packet" or $msg contains "send_udp") then stop

ここには、rsyslog の条件式である「contains」を利用して、特定のプロセスにおいて特定キーワードを含むログを無視するよう記載している。
rsyslog で他に利用可能な値や条件は、以下の通り。
http://www.rsyslog.com/doc/v8-stable/configuration/properties.html
http://www.rsyslog.com/doc/v8-stable/configuration/filters.html


また、CentOS 7のrsyslog は、/etc/rsyslog.d/*.conf を起動時に読み込むので、同様のものがあれば、別ファイルに作成すると管理しやすい。

読み込み箇所↓
# cat /etc/rsyslog.conf | grep '*.conf'
$IncludeConfig /etc/rsyslog.d/*.conf

rsyslogを再起動して反映し、/var/log/messages に出力されなくなった事を確認する。

# systemctl restart rsyslog

journald に記録されたログを見たい場合は、以下のようにする。

# journalctl -u nmb

pecl の oci8 を更新する

pecl/oci8の新しいのが出ていたので、更新した話。

バージョンとしては、oci8/2.0.11 → 2.0.12 への更新。

リリース日は、2016-08-18 だったので、1年も気づいていなかった(´・ω・`)

PECL oci8
https://pecl.php.net/package/oci8

Changelog for oci8
https://pecl.php.net/package-changelog.php?package=oci8


【環境】
CentOS 6.9/7.4(PHPは標準リポジトリ


現在のバージョン

# pecl list
Installed packages, channel pecl.php.net:
=========================================
Package Version  State
oci8    2.0.11   stable


バージョンを指定して更新(バージョン2.1以降は、PHP7が必要)

# pecl upgrade oci8-2.0.12
downloading oci8-2.0.12.tgz ...
Starting to download oci8-2.0.12.tgz (191,954 bytes)
......................................done: 191,954 bytes
11 source files, building
running: phpize
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
・
・省略
・
Build process completed successfully
Installing '/usr/lib64/php/modules/oci8.so'
upgrade ok: channel://pecl.php.net/oci8-2.0.12
configuration option "php_ini" is not set to php.ini location
You should add "extension=oci8.so" to php.ini
Segmentation fault

CentOS 7の方だけ、何故か最後に「Segmentation fault」が出た。
気持ち悪いので、一度アンインストールして再インストールすることに。

# pecl uninstall oci8
Unable to remove "extension=oci8.so" from php.ini
uninstall ok: channel://pecl.php.net/oci8-2.0.12


バージョンを指定して再インストール・・・したらエラーが出なかったので良し。

# pecl install oci8-2.0.12


バージョンの確認

# pecl list
Installed packages, channel pecl.php.net:
=========================================
Package Version  State
oci8    2.0.12   stable


モジュールを読み直すために、httpdを再起動

CentOS 7
# systemctl restart httpd.service

CentOS 6
# /etc/init.d/httpd restart

cifsマウントのオプションが間違っていた事に気が付いた

CentOS 7.3→7.4に更新した後から、cifsで接続しているNASへ繋がらなくなった。


autofs で自動マントの設定をしているものの、接続しようとすると、次のようなメッセージが出た。

# ls /mnt/nas

Broadcast message from root@xxxxxxx (Fri 2017-09-15 05:33:14 JST):

Password entry required for 'Password for root@//nas/path:' (PID 8688).
Please enter password with the systemd-tty-ask-password-agent tool!

/var/log/messages には、オプションが違う旨のログが出ていた。
(ここで、/path/credential_file はNASの認証情報を記載したファイル)

Sep 15 05:33:14 localhost kernel: CIFS: Unknown mount option "credential=/path/credential_file"


autofs や mount の man でオプションを確認しても、「credential」が無い。

これは cifs-utils のものだと思い出して、そのマニュアルを参照、
https://linux.die.net/man/8/mount.cifs

すると、「credential」が無くて、「credentials」がある。

今まで正常に動作していたのに?と思ったが、とりあえず、

autofs の設定ファイルにて、以下のようにマウントのオプションを修正したら接続できた。

 credential=/path/credential_file
  ↓
 credentials=/path/credential_file


前に使っていた「credential」というオプションで動作していた方が異常だったと思われる。
なお、CentOS 6.x では、このオプションで動作していた。(2017/9/15時点)

どういう訳か調べる事にした。

まずは、RPMソースを入手

# yumdownloader --enablerepo=base-source --source cifs-utils

展開してファイルを確認。

$ rpm -ivh cifs-utils-6.2-10.el7.src.rpm
$ cd ~/rpmbuild/SOURCES
$ ls -1
0001-asn1-fix-use-after-free-in-asn1_write.patch
0001-autoconf-Use-DEFS-when-building-idmapwb.so.patch
0001-autoconf-fix-link-of-libwbclient.patch
0001-cifs-use-krb5_kt_default-to-determine-default-keytab.patch
0001-get-setcifsacl-fix-bad-bit-shifts.patch
0002-getcifsacl-remove-some-dead-code.patch
0002-mount.cifs-on-2nd-try-mount.cifs-must-also-uppercase.patch
0003-asn1-remove-some-usused-functions.patch
0003-mtab.c-include-paths.h-for-_PATH_MOUNTED.patch
0004-data_blob-clean-out-unused-functions.patch
0004-manpage-clarify-use-of-backupuid-and-backupgid-in-mo.patch
0005-mount.cifs-fix-bad-free-of-string-returned-by-dirnam.patch
0005-mount.cifs-ignore-x-mount-options.patch
0007-aclocal-fix-typo-in-idmap.m4.patch
0008-mount.cifs-Removed-extra-comma-in-front-of-domain.patch
0009-mount.cifs-Accept-empty-domains-on-the-command-line.patch
0010-mount.cifs-Fixed-command-line-parsing-and-aligned-wi.patch
0011-mount.cifs-Remove-unneeded-stdbool-header-include.patch
0012-manpage-document-mfsymlinks-in-the-mount.cifs-man-pa.patch
cifs-utils-6.2.tar.bz2


grepで関係しそうなものを検索

$ grep -rl 'cred' ./
./0001-autoconf-Use-DEFS-when-building-idmapwb.so.patch
./0010-mount.cifs-Fixed-command-line-parsing-and-aligned-wi.patch

バージョン6.2.9の方では、パッチが0005-* までしか含まれていないので、「0010-mount~」が該当する。

該当行を表示

$ grep 'cred' ./0010-mount.cifs-Fixed-command-line-parsing-and-aligned-wi.patch
-       if (strncmp(token, "cred", 4) == 0)
+       if (strcmp(token, "cred") == 0 || /* undocumented */
+               strcmp(token, "credentials") == 0)


前のバージョンでは、

-       if (strncmp(token, "cred", 4) == 0)

のように、先頭4文字だけチェックしていた模様。

今回のバージョンでは、

+       if (strcmp(token, "cred") == 0 || /* undocumented */
+               strcmp(token, "credentials") == 0)

のように、"cred" または "credentials" の完全一致をチェックするようになっている。
但し、"cred"はドキュメント化されていない旨がコメントに書いてある。


従って、先頭4文字が一致していた「credential」という存在しないオプション名でも、動作していた事になる。

なお、これは autofs に限らず、mountコマンドで cifs をマウントする時も同じ。

まだ修正されていないCentOS 6.x で、以下を試してみた。

成功:
# mount -t cifs -o cred123=/path/credential_file //host/path /mnt

失敗:
# mount -t cifs -o cre=/path/credential_file //host/path /mnt

といったように、先頭4文字だけで判定されていた。
(そのうち修正されるかも)

mail コマンドで送信したメールが添付になる

【環境】
$ cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

$ mail -V
12.5 7/5/10


やりたかったのは、diff の結果で差分があった時だけメールを送る事。

実査にmailコマンドでdiffの結果をメールしたら、受信側で添付ファイルになってしまった。

テキストメールのつもりが、メールヘッダを見ると、次のようになっていた。

Content-Type: application/octet-stream

diffの結果は何もないはずなのに、見えない何かがある?

となると、怪しいのは制御コードが思い付く。

調べてみると、diff対象のテキストファイルの行末にCRが入っている事がある模様で、diffの結果に改行コード(CR:^M)が含まれてしまうようだった。

diff対象のファイルを出力する側は修正できないため、こちら側で対処するしかない・・・

という訳で、次のようにしてdiffの結果から制御コード(^M)を削除する。

sed -e 's/^M//g' > output.txt

ここで、^M は、ハットと大文字のMではなく、vi で

 Ctrl + v
 Ctrl + m

を入力する。

動作確認には、cat コマンドに -v オプションを付けて制御コードを表示して確認した。

プリンタが壊れたので新しいのを買った

以前、長年連れ添ってきたプリンタ(Canon MP500)の調子が悪くなった記事を書いた。

shobon.hatenablog.com

掃除したら復活したが、その後、何度か使っている間に、ついにダメになった。

そこで、新しいプリンタを買うべく、製品を調査していた。

まず、要件は以下の通り。

  • 主に印刷するのはテキスト(デジカメで撮影したものはショップで印刷する)
  • スキャナがあること
  • A4印刷ができること(A3は不要)
  • 両面が自動で印刷できること(手作業で紙を入れ替えるのはダメ)
  • カラーで独立したインクであること(カラーが無くなっても、白黒印刷できると良い)
  • 設置場所の都合上、既存のMP500より小さいこと
  • 給紙は前面・背面の両方が理想。大きさ(高さ)よっては、背面だけでも可。
  • ネットワーク接続可能なこと(有線・無線どちらでも可)

Canonのプリンタを利用していたので、Canonを中心に探していた訳だけど、途中でブラザーの製品が目にとまり、比較してみたところ良い感じだった。

Canon MP500 Canon MG5730 Canon TS5030 Canon TS6030 brother DCP-J567N
W[mm] 448 455 372 372 400
D[mm] 426 369 315 315 341
H[mm] 205 148 126 139 151
重さ[kg] 9.6 6.3 5.5 6.2 7.1
両面 ×
給紙 F/B F/B F F/B F/B

MG5730は安価なものの、他製品に比べるとサイズが大きい。
TS5030は自動両面が無い。

TS6030とDCP-J567Nを比較すると、TS6030の方がサイズ的に良かったが、要件を満たすDCP-J567Nと価格を比べると、2倍だった。

TS6030:15,000円くらい
DCP-J567N:7,500円くらい

※2017/6中旬頃

brother インクジェットプリンター複合機 PRIVIO DCP-J567N

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

A4薄型インクジェット複合機 DCP-J567N
価格:7285円(税込、送料無料) (2017/8/14時点)



という事で、DCP-J567N を購入した。

セットアップは容易だし、サイズ的にも以前より小さくなったので不満は無い。

インクの交換も、MP500のように上部パネルを開ける必要はなく、手前の蓋を開けるだけなので、高さに制限のある場所でも使える。

10年前のプリンタと比べるのも変だが、起動時間や印刷速度、印刷音なども良くなっているので、良い買い物だった。

LinkStation / TeraStation の Samba バージョンの確認方法

もし LinkStation / TeraStationSSH/telnet でログインできる環境なら、それで確認。

そうでないならなら、以下の方法で確認する。


1.機器のWeb管理画面へログインして、機器の型番とファームウェアのバージョンを調べる。

2.バッファローソースコードページへアクセスする。

Source Code Download - BUFFALO INC.


上記のページは、以下に書いてある通り、GPL/LGPLの定めに従い公開されている。
ダウンロードサービス ドライバ ダウンロード | BUFFALO バッファロー


3.「Network Storage」の隣にある「LinkStation」「TeraStation」のリンクへ行き、型番/ファームウェアバージョンのリンクへ行く。

4.「samba」のキーワードで、パッケージのバージョンを確認する。


Samba の CVE-2017-7494 への対応で、各社から修正バージョンがリリースされてるけど、TeraStation のはリリースされない?

のか、情報を探せない(´・ω・`)

QNAP
Security advisory for the CVE-2017-7494 vulnerability - QNAP NAS Community Forum

Synology
セキュリティ勧告 - サポート | Synology Inc.

Netgear / ReadyNAS
https://kb.netgear.com/000038779/Security-Advisory-for-CVE-2017-7494-Samba-Remote-Code-Execution


==2017/6/19 追記==

TeraStation なども対応されたファームがリリースされる模様。
http:// http://buffalo.jp/support_s/s20170531.html