Quantcast
Channel: Linux –俺的備忘録 〜なんかいろいろ〜
Viewing all 743 articles
Browse latest View live

CentOS 7にメモリダンプから情報を取得するためのメモリフォレンジックツール「Volatility tool」をインストールする

$
0
0

メモリダンプからいろいろと情報を取得するフォレンジックツール「Volatility tool」というものがあるようなので、CentOS 7に試しにインストールしてみる。
メモリダンプを解析できるOSは結構種類があるようで、LinuxだけではなくWindows、Mac OS Xも解析可能なようだ。

1.インストール

まずは、以下のコマンドで前提となるパッケージ類を導入する。

yum install git

 

以下のコマンドでVolatility toolをインストールする。

git clone https://github.com/volatilityfoundation/volatility.git
cd volatility/
python ./setup.py install

 

2.メモリダンプの解析

インストールが完了したら、実際にメモリダンプの解析をしてみよう。
こちらに各OSのサンプルがあるので、適当に好きなファイルをダウンロードしてこよう。

vol.py imageinfo -f メモリダンプPATH
[root@BS-PUB-WEBTOOL-TEST01 volatility]# wget http://amnesia.gtisc.gatech.edu/~moyix/ds_fuzz_hidden_proc.img.bz2
--2016-08-22 18:26:11--  http://amnesia.gtisc.gatech.edu/~moyix/ds_fuzz_hidden_proc.img.bz2
amnesia.gtisc.gatech.edu (amnesia.gtisc.gatech.edu) をDNSに問いあわせています... 143.215.130.152
amnesia.gtisc.gatech.edu (amnesia.gtisc.gatech.edu)|143.215.130.152|:80 に接続しています... 接 続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 60878947 (58M) [application/x-bzip2]
`ds_fuzz_hidden_proc.img.bz2' に保存中

100%[=====================================================>] 60,878,947  3.35MB/s 時間 23s

2016-08-22 18:26:35 (2.52 MB/s) - `ds_fuzz_hidden_proc.img.bz2' へ保存完了 [60878947/60878947]

[root@BS-PUB-WEBTOOL-TEST01 volatility]# bzip2 -dc ds_fuzz_hidden_proc.img.bz2 > ds_fuzz_hidden_proc.img
[root@BS-PUB-WEBTOOL-TEST01 volatility]# vol.py imageinfo -f ds_fuzz_hidden_proc.img
Volatility Foundation Volatility Framework 2.5
*** Failed to import volatility.plugins.registry.shutdown (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.getservicesids (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.timeliner (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.malware.apihooks (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.malware.servicediff (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.userassist (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.getsids (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.shellbags (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.evtlogs (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.tcaudit (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.dumpregistry (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.lsadump (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.malware.threads (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.mac.apihooks_kernel (ImportError: No module named distorm3)
*** Failed to import volatility.plugins.registry.amcache (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.mac.check_syscall_shadow (ImportError: No module named distorm3)
*** Failed to import volatility.plugins.malware.svcscan (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.auditpol (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.ssdt (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.registry.registryapi (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.mac.apihooks (ImportError: No module named distorm3)
*** Failed to import volatility.plugins.envars (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.shimcache (ImportError: No module named Crypto.Hash)
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : WinXPSP2x86, WinXPSP3x86 (Instantiated with WinXPSP2x86)
                     AS Layer1 : IA32PagedMemoryPae (Kernel AS)
                     AS Layer2 : FileAddressSpace (/root/volatility/ds_fuzz_hidden_proc.img)
                      PAE type : PAE
                           DTB : 0x319000L
                          KDBG : 0x80545b60L
          Number of Processors : 1
     Image Type (Service Pack) : 3
                KPCR for CPU 0 : 0xffdff000L
             KUSER_SHARED_DATA : 0xffdf0000L
           Image date and time : 2008-11-26 07:46:02 UTC+0000
     Image local date and time : 2008-11-26 02:46:02 -0500

上のコマンドで、メモリダンプからOSの種類とCPUの数などが読み取れる。
ここで分かったOSの種類を指定して、動作していたプロセスなどを確認する。

vol.py --profile=OS種類 pslist -f メモリダンプPATH
[root@BS-PUB-WEBTOOL-TEST01 volatility]# vol.py --profile=WinXPSP3x86 pslist -f ds_fuzz_hidden_proc.img
Volatility Foundation Volatility Framework 2.5
*** Failed to import volatility.plugins.registry.shutdown (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.getservicesids (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.timeliner (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.malware.apihooks (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.malware.servicediff (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.userassist (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.getsids (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.shellbags (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.evtlogs (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.tcaudit (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.dumpregistry (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.lsadump (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.malware.threads (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.mac.apihooks_kernel (ImportError: No module named distorm3)
*** Failed to import volatility.plugins.registry.amcache (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.mac.check_syscall_shadow (ImportError: No module named distorm3)
*** Failed to import volatility.plugins.malware.svcscan (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.auditpol (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.ssdt (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.registry.registryapi (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.mac.apihooks (ImportError: No module named distorm3)
*** Failed to import volatility.plugins.envars (ImportError: No module named Crypto.Hash)
*** Failed to import volatility.plugins.registry.shimcache (ImportError: No module named Crypto.Hash)
Offset(V)  Name                    PID   PPID   Thds     Hnds   Sess  Wow64 Start                          Exit
---------- -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------
0x819cc830 System                    4      0     51      254 ------      0
0x817e4670 smss.exe                360      4      3       19 ------      0 2008-11-26 07:38:11 UTC+0000
0x8181bd78 csrss.exe               596    360     10      322      0      0 2008-11-26 07:38:13 UTC+0000
0x8182b100 winlogon.exe            620    360     16      503      0      0 2008-11-26 07:38:14 UTC+0000
0x8183ba78 services.exe            672    620     15      245      0      0 2008-11-26 07:38:15 UTC+0000
0x817dbc30 lsass.exe               684    620     21      347      0      0 2008-11-26 07:38:15 UTC+0000
0x81859d70 svchost.exe             844    672     19      198      0      0 2008-11-26 07:38:18 UTC+0000
0x8183d360 svchost.exe             932    672     10      229      0      0 2008-11-26 07:38:18 UTC+0000
0x818a2300 svchost.exe            1064    672     63     1308      0      0 2008-11-26 07:38:20 UTC+0000
0x817f7da0 svchost.exe            1164    672      5       77      0      0 2008-11-26 07:38:23 UTC+0000
0x8180e6f0 svchost.exe            1264    672     14      209      0      0 2008-11-26 07:38:25 UTC+0000
0x817ca478 explorer.exe           1516   1452     12      362      0      0 2008-11-26 07:38:27 UTC+0000
0x816e75e8 spoolsv.exe            1648    672     12      112      0      0 2008-11-26 07:38:28 UTC+0000
0x816af860 VMwareTray.exe         1896   1516      1       26      0      0 2008-11-26 07:38:31 UTC+0000
0x816af448 VMwareUser.exe         1904   1516      1       28      0      0 2008-11-26 07:38:31 UTC+0000
0x816a13c0 VMwareService.e        1756    672      3       45      0      0 2008-11-26 07:38:45 UTC+0000
0x816557e0 alg.exe                 512    672      6      105      0      0 2008-11-26 07:38:53 UTC+0000
0x81643b28 wuauclt.exe            1372   1064      8      225      0      0 2008-11-26 07:39:38 UTC+0000
0x8164e3a8 wscntfy.exe             560   1064      1       31      0      0 2008-11-26 07:44:57 UTC+0000

 

…VMwareとか動かしてたのかな?
そのほか、pstree(プロセスツリー)、connscan(netstatに相当する情報)、connections(プロセスの接続情報)などを指定して情報が得られる。

[root@BS-PUB-WEBTOOL-TEST01 volatility]# vol.py --profile=WinXPSP3x86 pstree -f ds_fuzz_hidden_proc.img | grep -v Failed
Volatility Foundation Volatility Framework 2.5
Name                                                  Pid   PPid   Thds   Hnds Time
-------------------------------------------------- ------ ------ ------ ------ ----
 0x819cc830:System                                      4      0     51    254 1970-01-01 00:00:00 UTC+0000
. 0x817e4670:smss.exe                                 360      4      3     19 2008-11-26 07:38:11 UTC+0000
.. 0x8182b100:winlogon.exe                            620    360     16    503 2008-11-26 07:38:14 UTC+0000
... 0x8183ba78:services.exe                           672    620     15    245 2008-11-26 07:38:15 UTC+0000
.... 0x816e75e8:spoolsv.exe                          1648    672     12    112 2008-11-26 07:38:28 UTC+0000
.... 0x81859d70:svchost.exe                           844    672     19    198 2008-11-26 07:38:18 UTC+0000
.... 0x8180e6f0:svchost.exe                          1264    672     14    209 2008-11-26 07:38:25 UTC+0000
.... 0x818a2300:svchost.exe                          1064    672     63   1308 2008-11-26 07:38:20 UTC+0000
..... 0x8164e3a8:wscntfy.exe                          560   1064      1     31 2008-11-26 07:44:57 UTC+0000
..... 0x81643b28:wuauclt.exe                         1372   1064      8    225 2008-11-26 07:39:38 UTC+0000
.... 0x817f7da0:svchost.exe                          1164    672      5     77 2008-11-26 07:38:23 UTC+0000
.... 0x816557e0:alg.exe                               512    672      6    105 2008-11-26 07:38:53 UTC+0000
.... 0x8183d360:svchost.exe                           932    672     10    229 2008-11-26 07:38:18 UTC+0000
.... 0x816a13c0:VMwareService.e                      1756    672      3     45 2008-11-26 07:38:45 UTC+0000
... 0x817dbc30:lsass.exe                              684    620     21    347 2008-11-26 07:38:15 UTC+0000
.. 0x8181bd78:csrss.exe                               596    360     10    322 2008-11-26 07:38:13 UTC+0000
 0x817ca478:explorer.exe                             1516   1452     12    362 2008-11-26 07:38:27 UTC+0000
. 0x816af448:VMwareUser.exe                          1904   1516      1     28 2008-11-26 07:38:31 UTC+0000
. 0x816af860:VMwareTray.exe                          1896   1516      1     26 2008-11-26 07:38:31 UTC+0000
[root@BS-PUB-WEBTOOL-TEST01 volatility]# vol.py --profile=WinXPSP3x86 connscan -f ds_fuzz_hidden_proc.img | grep -v Failed
Volatility Foundation Volatility Framework 2.5
Offset(P)  Local Address             Remote Address            Pid
---------- ------------------------- ------------------------- ---
0x019cfbf0 192.168.101.128:1035      192.168.101.1:445         4
0x01a4abd0 192.168.101.128:1040      192.168.101.1:139         4
0x01a52b38 192.168.101.128:31337     192.168.101.1:1158        1696
[root@BS-PUB-WEBTOOL-TEST01 volatility]# vol.py --profile=WinXPSP3x86 connections -f ds_fuzz_hidden_proc.img | grep -v Failed
Volatility Foundation Volatility Framework 2.5
Offset(V)  Local Address             Remote Address            Pid
---------- ------------------------- ------------------------- ---
0x81852b38 192.168.101.128:31337     192.168.101.1:1158        1696
0x817cfbf0 192.168.101.128:1035      192.168.101.1:445         4

 

問題の発生した際にメモリダンプを取るような運用が必要にはなるけど、いろいろなOSに対応しててこれだけ見れるなら中々よさそう。

Windows/Linuxのトラブル追跡実践ノウハウ エンジニア必携 Windows/Linuxのトラブル追跡実践ノウハウ エンジニア必携

第24回シェル芸勉強会に参加してきました(復習)

$
0
0

第24回シェル芸勉強会に参加してきたので、その復習。
今回はLLOTと同日開催のためか、少し人数が少なめ?だった様子。ベテラン勢が少し少数になってた…のかな?
まぁ、いつも通り復習。模範解答と問題はこちら

Q1.

各行に2種類の文字列(卵、玉子)があるので、それの数を算出する。
awkのみで回答するのがキレイな解き方なんだけど、あんまりawkに自信ないので以前やった行の内容をソートさせる方法にちょい手を加えて回答した。

cat Q1 | while read line; do echo $line | sed 's/ /\n/g' | sort | uniq -c | awk '{line=line " " $0} END {print line}' ; done
[root@BS-PUB-CENT7-01 vol.24]# cat Q1
玉子 卵 玉子 玉子 玉子 玉子
玉子 玉子 卵 卵 卵 玉子
卵 玉子 卵 玉子 玉子 玉子
卵 玉子 卵 卵 卵 卵
玉子 卵 玉子
[root@BS-PUB-CENT7-01 vol.24]# cat Q1 | while read line; do echo $line | sed 's/ /\n/g' | sort | uniq -c | awk '{line=line " " $0} END {print line}' ; done
       5 玉子       1 卵
       3 玉子       3 卵
       4 玉子       2 卵
       1 玉子       5 卵
       2 玉子       1 卵

が、こちらの@ebanさんのツイートのように書くことでawk単体でシンプルに対応することができるようだ。 やはりawk大事。もうちょい勉強しないと…

awk '{for(i=1;i<=NF;i++)a[$i]++;for(k in a)printf "%s ", k":"a[k];delete(a);print ""}' Q1
[root@BS-PUB-CENT7-01 vol.24]# cat Q1
玉子 卵 玉子 玉子 玉子 玉子
玉子 玉子 卵 卵 卵 玉子
卵 玉子 卵 玉子 玉子 玉子
卵 玉子 卵 卵 卵 卵
玉子 卵 玉子
[root@BS-PUB-CENT7-01 vol.24]# # ※わかりやすくするために、改行処理をちゃんと入れるまではxargsで無理やり改行させてる。
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 連想配列に突っ込んでprintfで変数と連想配列の値をくっつけていく
[root@BS-PUB-CENT7-01 vol.24]# awk '{for(i=1;i<=NF;i++)a[$i]++;for(k in a)printf "%s ", k":"a[k]}' Q1 | xargs
玉子:5 卵:1 玉子:8 卵:4 玉子:12 卵:6 玉子:13 卵:11 玉子:15 卵:12
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 変数がどんどん足されていくので、行の最後に変数の値をクリアする(「delete(a)」のとこ)
[root@BS-PUB-CENT7-01 vol.24]# awk '{for(i=1;i<=NF;i++)a[$i]++;for(k in a)printf "%s ", k":"a[k];delete(a)}' Q1 | xargs
玉子:5 卵:1 玉子:3 卵:3 玉子:4 卵:2 玉子:1 卵:5 玉子:2 卵:1
[root@BS-PUB-CENT7-01 vol.24]# # 各行で処理が終わったら改行させる(「print ""」のとこ)
[root@BS-PUB-CENT7-01 vol.24]# awk '{for(i=1;i<=NF;i++)a[$i]++;for(k in a)printf "%s ", k":"a[k];delete(a);print ""}' Q1
玉子:5 卵:1
玉子:3 卵:3
玉子:4 卵:2
玉子:1 卵:5
玉子:2 卵:1

 

Q2.

同じ文字が2つ以上出てきた場合、最初の文字以外は表示させないようにする。 (「あいあうい」なら「あいう」へ、問題の「へのへのもへじ」なら「へのもじ」へ変換する) これは結構簡単な方だったかも。 uniqコマンドを使うとソートさせないといけないので、awkで対応する。

cat Q2 | grep -o . | awk '!a[$0]++' | tr -d '\n' | xargs
[root@BS-PUB-CENT7-01 vol.24]# cat Q2
へのへのもへじ
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 「grep -o .」でヒットする文字列(「.」のみで任意のすべての1文字)の場合は改行して出力させる処理を追加
[root@BS-PUB-CENT7-01 vol.24]# cat Q2 | grep -o .
へ
の
へ
の
も
へ
じ
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # awkで2個目以降の文字列はすべて出力させない処理を追加
[root@BS-PUB-CENT7-01 vol.24]# cat Q2 | grep -o . | awk '!a[$0]++'
へ
の
も
じ
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 改行を削除
[root@BS-PUB-CENT7-01 vol.24]# cat Q2 | grep -o . | awk '!a[$0]++' | tr -d '\n' | xargs
へのもじ

 

これについても、@ebanさんの回答のように「paste -sd ”」を使うことで、改行を削除して、かつ最後の出力の改行はちゃんと出してくれるようになる。

grep -o . Q2 | awk '!a[$0]++' | paste -sd ''
grep -o . Q2 | awk '!a[$0]++{printf $1}END{print""}' # paste部分もawkだけでやった場合
[root@BS-PUB-CENT7-01 vol.24]# grep -o . Q2 | awk '!a[$0]++' | paste -sd ''
へのもじ
[root@BS-PUB-CENT7-01 vol.24]# grep -o . Q2 | awk '!a[$0]++{printf $1}END{print""}' # paste部分もawkだけでやった場合
へのもじ

 

Q3.

ファイルをソートして、1列目の内容に応じて「%%」を挿入してグループ分けするよ、という問題。
awkでやると簡単にできるようだけど、いかんせんまだawk力が高くないので、模範解答から。

sort Q3 | awk '{if($1!=a){print "%%";print;a=$1}else{print}}END{print "%%"}'
[root@BS-PUB-CENT7-01 vol.24]# cat Q3
金 日成
キム ワイプ
金 正日
キム タオル
金 正男
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # まずはソート
[root@BS-PUB-CENT7-01 vol.24]# sort Q3
キム タオル
キム ワイプ
金 正男
金 正日
金 日成
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # もし$1の値が直前と違った場合は、「%%」出力後に値をprintする(if($1!=a){print "%%";print;a=$1})
[root@BS-PUB-CENT7-01 vol.24]# # それ以外はそのままprint(else{print})
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk '{if($1!=a){print "%%";print;a=$1}else{print}}'
%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 最後に「%%」を付け足す(END{print "%%"})
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk '{if($1!=a){print "%%";print;a=$1}else{print}}END{print "%%"}'
%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
%%

 

そのほか、@ebanさんや@kunst1080さん、あと@mutz0623さんの解答がよかったので分解して理解しとく。

●@ebanさん

[root@BS-PUB-CENT7-01 vol.24]# # 変数aが$1でない場合、%%をプリントして変数aに$1を代入する
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk 'a!=$1{print "%%";a=$1}'
%%
%%
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # もちろん、代入しただけじゃ何も出ないので変数aをプリントさせる
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk 'a!=$1{print "%%";a=$1};1'
%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 最後に「echo %%」で%%を出力して終わり。(「END{print "%%"}」で もいけるけど、そっちのほうが長くなるようだ)
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk 'a!=$1{print "%%";a=$1};1';echo %%
%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
%%
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk 'l!=$1{print "%%";l=$1};1;END{print "%%"}'
%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
%%

 

●@kunst1080さん

[root@BS-PUB-CENT7-01 vol.24]# # 変数aが前の行と同じでない場合、%%を出力する
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk '!a[$1]++{print "%%"}'
%%
%%
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # そうでない場合、行を出力する処理を追加
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk '!a[$1]++{print "%%"}{print}'
%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 最後に%%を出力
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk '!a[$1]++{print "%%"}{print}END{print "%%"}'
%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
%%

 

●@mutz0623さん

[root@BS-PUB-CENT7-01 vol.24]# # グルーピングして、各列の一列名を別途echoする。
[root@BS-PUB-CENT7-01 vol.24]# (cat Q3 ;echo "キム";echo "金")
金 日成
キム ワイプ
金 正日
キム タオル
金 正男
キム
金
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # sortする
[root@BS-PUB-CENT7-01 vol.24]# (cat Q3 ;echo "キム";echo "金") | sort
キム
キム タオル
キム ワイプ
金
金 正男
金 正日
金 日成
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 「キム」「金」のみの行を置換する
[root@BS-PUB-CENT7-01 vol.24]# (cat Q3 ;echo "キム";echo "金") | sort | sed -r "s/^( キム|金)$/%%/"
キム
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 最後に「%%」を出力
[root@BS-PUB-CENT7-01 vol.24]# (cat Q3 ;echo "キム";echo "金") | sort | sed -r "s/^( キム|金)$/%%/";echo %%
キム
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
%%

 

Q4.

xlsxファイルの中身を見て、セルA1の値を取得するというもの。
とりあえずxlsx2csvコマンドがあったので、それで取得した。(推奨はxlsxが圧縮されたファイルだから、そこを踏まえての対応を求められている)

[root@BS-PUB-CENT7-01 vol.24]# xlsx2csv Q4/Q4.xlsx
114514,シェル芸バイブ
危険シェル芸,ドラゴン曲線
キュアエンジニア,素数
エクシェル芸,変態シェル芸
[root@BS-PUB-CENT7-01 vol.24]# xlsx2csv Q4/Q4.xlsx | awk -F, 'NR==1{print $1}'
114514
[root@BS-PUB-CENT7-01 vol.24]# xlsx2csv Q4/Q4.xlsx | awk -F, 'NR==1{print $2}'
シェル芸バイブ

Q5.

ファイルに記述されている数式を、値を代入して計算させる問題。 echoで値を渡す場合はxargsをうまく使うといいようだ。bcについては、「-l」オプションを付与して浮動小数点計算をさせないといけないので注意。

sed 's/x/3/g' Q5 | bc -l
[root@BS-PUB-CENT7-01 vol.24]# cat Q5
x + x^2
x + 1/x
x*x*x
[root@BS-PUB-CENT7-01 vol.24]# sed 's/x/3/g' Q5
3 + 3^2
3 + 1/3
3*3*3
[root@BS-PUB-CENT7-01 vol.24]# sed 's/x/3/g' Q5 | bc -l
12
3.33333333333333333333
27

  echoで値を渡す場合は以下。

echo 3 | xargs -I{} sh -c "sed 's/x/{}/g' Q5 | bc -l"
[root@BS-PUB-CENT7-01 vol.24]# echo 3
3
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # xargsを使って、パイプから得た値を元にsedで置換する
[root@BS-PUB-CENT7-01 vol.24]# echo 3 | xargs -I{} sed 's/x/{}/g' Q5
3 + 3^2
3 + 1/3
3*3*3
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # xargsで実行させるコマンドでパイプを利用する場合はshコマンドで"(ダブルクォーテーション)で囲ったコマンドを指定してやればよいので、それでbcを実行させる
[root@BS-PUB-CENT7-01 vol.24]# echo 3 | xargs -I{} sh -c "sed 's/x/{}/g' Q5 | bc -l"
12
3.33333333333333333333
27

 

Q6.

ファイルの中で一行になってる文字列から、”卵”と”玉子”に分けて数が少ない方を削除して、多いほうに置換する(卵が2、玉子が5なら、変換して玉子が7個並ぶようにすればいい)。
なので、まずは”卵”と”玉子”の数をそれぞれ数えてやるところから始めればいい。

 

grep -Eo "卵|玉子" Q6 | sort | uniq -c | sort -k1nr | awk 'NR==1{print $2}' | xargs -I{} sed -r 's/玉子|卵/{}/g' Q6
[root@BS-PUB-CENT7-01 vol.24]# # 卵と玉子を分割する
[root@BS-PUB-CENT7-01 vol.24]# grep -Eo "卵|玉子" Q6
卵
卵
玉子
玉子
玉子
玉子
玉子
卵
卵
卵
玉子
玉子
卵
玉子
玉子
玉子
玉子
卵
卵
玉子
卵
玉子
卵
卵
玉子
卵
玉子
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # ソートして数をカウントする()
[root@BS-PUB-CENT7-01 vol.24]# grep -Eo "卵|玉子" Q6 | sort | uniq -c | sort -k1nr
     15 玉子
     12 卵
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 数の多い方だけ取得する
[root@BS-PUB-CENT7-01 vol.24]# grep -Eo "卵|玉子" Q6 | sort | uniq -c | sort -k1nr | awk 'NR==1{print $2}'
玉子
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # xargsで、数の多いほうですべて置換をさせる
[root@BS-PUB-CENT7-01 vol.24]# grep -Eo "卵|玉子" Q6 | sort | uniq -c | sort -k1nr | awk 'NR==1{print $2}' | xargs -I{} sed -r 's/玉子|卵/{}/g' Q6
玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉 子玉子玉子玉子
[root@BS-PUB-CENT7-01 vol.24]#

 

Q7.

5桁の数字を出して、それぞれを構成する数字が同じものを除外する(11122と22111は1が3つ、2が2つなので重複とみなす)。 数字の構成要素をすべて分割して、行レベルでソート、ユニークな行のみを残すことで対応できる。   なお、回答考えてるときに使ってたのが2桁だったのだけど、Twitterに挙げたのだと5桁は処理重すぎて計算できなかった。 残念…

 

で、じゃあどうすればいいのかというと、模範解答のようにawkのasortを用いる方法があるらしい。
(知らなかった…)

[root@BS-PUB-CENT7-01 vol.24]# # ※長いから頭の10行のみ出力させている
[root@BS-PUB-CENT7-01 vol.24]# seq -w 00000 99999 | head -10
00000
00001
00002
00003
00004
00005
00006
00007
00008
00009
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # まず、行の要素をすべて空白で分割する
[root@BS-PUB-CENT7-01 vol.24]# seq -w 00000 99999 | sed 's/./& /g' | head -10
0 0 0 0 0
0 0 0 0 1
0 0 0 0 2
0 0 0 0 3
0 0 0 0 4
0 0 0 0 5
0 0 0 0 6
0 0 0 0 7
0 0 0 0 8
0 0 0 0 9
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # awkで、すべての行の要素をソートさせる
[root@BS-PUB-CENT7-01 vol.24]# seq -w 00000 99999 | sed 's/./& /g' | awk '{for(i=1;i<=NF;i++)a[i]=$i;asort(a);for(k in a){printf a[k]}print ""}' | head -10
00000
01000
02000
03000
04000
05000
06000
07000
08000
09000
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 各行をソート・ユニークなもののみを出力させる
[root@BS-PUB-CENT7-01 vol.24]# seq -w 00000 99999 | sed 's/./& /g' | awk '{for(i=1;i<=NF;i++)a[i]=$i;asort(a);for(k in a){printf a[k]}print ""}' | sort -u | head -10
00000
01000
02000
03000
04000
05000
06000
07000
08000
09000

 

@ebanさんのような解き方もある。
これは、最初から各桁で同じorより小さい値のみを出力させる方法(例えば199は出るけど、911とか191は最初から表示させないようにする)だ。
問題が出てから数分で回答されたのがこれという。すごい…
なお、処理速度も上のものより早かった。

seq -w 0 99999 | awk -F "" '$1<=$2&&$2<=$3&&$3<=$4&&$4<=$5'

 

Q8.

数学オリンピックの問題をカスタマイズした問題。
最初に、”1~7までの数字をすべて含む7桁の数字”を抽出し、相異なる7以下の正の整数a,b,c,d,e,f,gを用いて「a*b*c*d + e*f*g」という計算を行って求められる素数の数を求める。
地味に最初のとこでちゃんと問題を読解できずに変な方向に突っ走ってしまった…反省

まず、”1~7までの数字をすべて含む7桁の数字”を抽出させる。
これについては、grepやawkでのアンド検索が必要となる。

seq -w 0000000 9999999 | grep 1 | grep 2 | grep 3 | grep 4 | grep 5 | grep 6 | grep 7 # grepでやる場合
seq -w 0000000 9999999 | awk '/1/ && /2/ && /3/ && /4/ && /5/ && /6/ && /7/' # awkでやる場合

 

次に、相異なる7以下の~の箇所については、以下のように対応した。

cat tmp | sed 's/./& /g' | awk '{print $1*$2*$3*$4"+"$5*$6*$7}' | bc | factor | sed 's/://g' | awk '$1==$2' | wc -l
[root@BS-PUB-CENT7-01 vol.24]# seq -w 0000000 9999999 | awk '/1/ && /2/ && /3/ && /4/ && /5/ && /6/ && /7/' | sed 's/./& /g' | awk '{print $1*$2*$3*$4"+"$5*$6*$7}' | bc | factor | sed 's/://g' | awk '$1==$2' | wc -l
144

 

Q8、結構難しかった気が…

 

LTとか

LTでは、uniqコマンドのバージョンの違いによって「–group」オプションの有無が違ってたりとか、薬を作成する実験には大量の実験が必要で大変だという話を聞けた。
知らない内容だったりしたので大変勉強になったのだが、最後に行われた某図書館のオープンデータにいろいろなものがあることを知れたので良かった。

今までに出版された多くの図書データについての情報(出版社や著者など)のほか、国会の議事録なんかもあるらしい。
例えば、以下のコマンドで国会の議事録からヤジの内容を得ることができるようだ。
(「と呼ぶ声あり」は途中までで、途中から「と呼ぶ者あり」になったらしい。どういう違いが…?)

curl -s <span class="pl-s"><span class="pl-pds">"</span>http://kokkai.ndl.go.jp/api/1.0/speech?<span class="pl-s"><span class="pl-pds">$(</span><span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">"</span>maximumRecords=100&any=と呼ぶ声あり<span class="pl-pds">"</span></span> <span class="pl-k">|</span> nkf -MQ <span class="pl-k">|</span> tr -d <span class="pl-s"><span class="pl-pds">'</span>\n<span class="pl-pds">'</span></span> <span class="pl-k">|</span> gsed <span class="pl-s"><span class="pl-pds">'</span>s/=\+/%/g<span class="pl-pds">'</span></span><span class="pl-pds">)</span></span><span class="pl-pds">"</span></span> <span class="pl-k">|</span> grep -o <span class="pl-s"><span class="pl-pds">"</span>「.*」<span class="pl-pds">"</span></span>
[root@BS-PUB-CENT7-01 vol.24]# curl -s "http://kokkai.ndl.go.jp/api/1.0/speech?$(echo "maximumRecords=100&any=と呼ぶ声あり" | nkf -MQ | tr -d '\n' | sed 's/=\+/%/g')" | grep -o "「.*」" | sort | uniq -c
      1 「いるぞ」
      1 「じようだん言うなよ。朝鮮事変以後だよ」
      1 「そんなことないよ」と呼ぶ者あり)そんなことないと言ったって、政策を発表するビラのほう は制限してしまって、政治資金は幾らでも自由に入るということになれば、政策で対決できないというこ とになれば、残るのは、(「政策以外のところに使うんだよ、そこが肝心なところだ」と呼ぶ者あり)そ れは政策以外のところに金を使うことになるんじゃないですか。結局今度の法案は、金のかからないのは 政策発表のビラにはかからないけれども、買収のほうへ金を回すためにこういう法案を出すのだ、そうい うことになるんじゃないですか。そうでないなら、財界から金の入る道を閉ざすような政治資金規正法を きちっと通す、そのことのほうが重要じゃないですか。そうでなければ、三回しかビラが出せない、そう してお互いに各選挙区で政策的な対決のビラを出すことができないということになれば、もう情実か金か 、そういうものしか選挙運動がなくなってしまうじゃないですか。三種類のビラが出た、ビラはもうこれ で終わりだということになってしまう。だからかえって金がかかって、金で対決する選挙になるんじゃな いですか。(「使わなければいいんだよ」と呼ぶ者あり)使わなければいいといったって、使うのだから しようがない。それで、先ほどの愛媛のあの例のように、たとえばシンボル・マークで応募した方には一 万円金をやるとか、お礼を上げますとか、こうやっているじゃないですか。現に皆さんのほうではそうな りませんか。政治資金規正法を出してその根源をとめてしまえば、そのビラにかかる金なんてたいしたこ とはありませんよ。また、それにかかる金なら本来選挙の正しいあり方なんですから……。政策の対決点 を明らかにする、これは参議院の公職選挙特別委員会が京都へ行って調べたら、京都の府民の人たちが言 っていることなんですが、選挙の政策のビラをたくさん出していただいたおかげで対決点がはっきりした 、それから中傷と政策というものの違いもはっきりしたと言っているのですから、こっちへ金のかかるこ とは、これは本来選挙民自身も望んでいることであるし、そうしてそんなに金がかかるはずがない。こっ ちのほうをとめてしまえば、行く道というのは、もう買収か汚職かそっちしかないことになるじゃないで すか。(「公害と同じだよ、発生源と同じだよ」
      1 「だれが」
     17 「異議なし」
      1 「偽りその他不正の行為により酒類の製造免許を受けた場合」
      1 「行政管理庁だ」
      1 「国会はどうだ」
      1 「財政部長じゃない」
      1 「三倍じゃだめだ」

 

議事録も、これだけ情報がそろってれば遊べるものになるんだなー
やはり、awkをもっと勉強しないといけないと思った勉強会だった。

シェルプログラミング実用テクニック シェルプログラミング実用テクニック

xargsで実行させるコマンドにパイプを用いる

$
0
0

xargsで実行させるコマンドにパイプを利用したい場合は、「sh -c」で実行させればよい。

コマンド | xargs -I{} sh -c "コマンド {} | コマンド ..."

[root@BS-PUB-CENT7-01 ~]# find ./ -maxdepth 1 -name "test1*"
./test1
./test10
./test11
./test12
./test13
./test14
./test15
./test16
./test17
./test18
./test19
[root@BS-PUB-CENT7-01 ~]# find ./ -maxdepth 1 -name "test1*" | xargs -I {} -n 1 sh -c "echo {} | mv {} {}.bk"
[root@BS-PUB-CENT7-01 ~]# find ./ -maxdepth 1 -name "test1*"
./test10.bk
./test12.bk
./test14.bk
./test16.bk
./test18.bk
./test1.bk
./test11.bk
./test13.bk
./test15.bk
./test17.bk
./test19.bk
シェルプログラミング実用テクニック シェルプログラミング実用テクニック

Linuxでネットワーク内に重複、衝突しているIPアドレス(競合IPアドレス)を調べる方法

$
0
0

人間なので、時折IPアドレスの設定時に誤って重複したアドレスを振ってしまう、設定してしまうこともある(DHCPサーバの範囲内のアドレスで固定IP設定しちゃったりとか)。
そんな時すぐに気づければいいのだが、結構気づかずにそのままにしてしまって対象のホストのネットワークが不安定になった段階でようやく気付くこともあるだろう。

そんなときは、以下のいずれかの方法で重複したIPアドレスを調べて修復してやるといいだろう。

1.arpingで調べる

重複しているであろうIPアドレスに当たりがついている状態であれば、apringコマンドで確認ができる。
そのIPアドレスが重複している場合、返ってくるMACアドレスが交互に出てくるので、そこで判断する。

sudo arping -I eth0 -c 2 重複しているであろうIPアドレス
blacknon@BS-PUB-UBUNTU-01:~$ sudo arping -I eth0 -c 2 192.168.0.121
ARPING 192.168.0.121
60 bytes from 36:33:62:65:63:36 (192.168.0.121): index=0 time=10.202 msec
60 bytes from 66:66:63:65:34:36 (192.168.0.121): index=1 time=10.742 msec
60 bytes from 36:33:62:65:63:36 (192.168.0.121): index=2 time=3.603 msec
60 bytes from 66:66:63:65:34:36 (192.168.0.121): index=3 time=4.433 msec

--- 192.168.0.121 statistics ---
2 packets transmitted, 4 packets received,   0% unanswered (2 extra)
rtt min/avg/max/std-dev = 3.603/7.245/10.742/3.246 ms

ただ、前にWindowsと混合してて、かつWindowsファイアウォールが動いてるとpingが返ってこないことがあった。
その場合は、次の方法で調べるといいだろう。

2.arp-scanで調べる

前にこちらでも触れていた、指定したインターフェイスの所属するネットワークからすべてのIPアドレスを抽出するarp-scanコマンドを利用することで、重複しているIPアドレスを調べることができる。
以下のコマンドを実行することで、重複しているIPアドレスとMACアドレスのみを抽出する。

sudo arp-scan -I eth0 -l | awk 'match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) {print $2,$1}' | uniq -D -f 1
blacknon@BS-PUB-UBUNTU-01:~$ sudo arp-scan -I eth0 -l | awk 'match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) {print $2,$1}' | uniq -D -f 1
36:33:62:65:63:36 192.168.0.121
66:66:63:65:34:36 192.168.0.121

 

とりあえず、この2通りの方法を把握していれば対応はできるだろう。
なお、一応LinuxにもIPwatchDというIPアドレスの衝突を検知するデーモンが作られているようなのだけど、どうもクライアント用みたいでログに出せなかった(Ubuntu Server 16.04検証)。

インフラエンジニアの教科書2 スキルアップに効く技術と知識 インフラエンジニアの教科書2 スキルアップに効く技術と知識

CentOS 7にOracleJDKをインストールする(wgetでダウンロード)

$
0
0

OracleJDKをCentOS 7にインストールする場合、yumなどではなく、こちらからOracleJDKのrpmパッケージをダウンロードしてインストールしてやる必要があるのだが、これをwgetでダウンロードしてくる方法がある。具体的には、以下のようにwgetコマンドを実行、インストールしてやればよい。

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u101-b13/jdk-8u101-linux-x64.rpm
rpm -ihv jdk-8u101-linux-x64.rpm
Deep Learning Javaプログラミング 深層学習の理論と実装 (impress top gear) Deep Learning Javaプログラミング 深層学習の理論と実装 (impress top gear)

CentOS 7に脆弱性スキャンツール「OpenVAS」をインストールする

$
0
0

リモートから脆弱性をスキャンする方法はいろいろあるが、その中でも比較的有名なのがOpenVASだ。
コマンドや管理画面から指定したホストに対しホストの外部・内部からスキャンを実施することで脆弱性をスキャン、検知させることが可能だ。
細かくはこちらの記事が非常に詳しく書かれているので、一読するとよいだろう。

今回は、このOpenVASをCentOS 7にインストールする。

1.インストール

まずは、以下のコマンドを実行してリポジトリを追加する。

wget -q -O - http://www.atomicorp.com/installers/atomic |sh
[root@BS-PUB-WEBTOOL-TEST01 ~]# wget -q -O - http://www.atomicorp.com/installers/atomic |sh

Atomic Free Unsupported Archive installer, version 3.0.1

BY INSTALLING THIS SOFTWARE AND BY USING ANY AND ALL SOFTWARE
PROVIDED BY ATOMICORP LIMITED YOU ACKNOWLEDGE AND AGREE:

THIS SOFTWARE AND ALL SOFTWARE PROVIDED IN THIS REPOSITORY IS
PROVIDED BY ATOMICORP LIMITED AS IS, IS UNSUPPORTED AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ATOMICORP LIMITED, THE
COPYRIGHT OWNER OR ANY CONTRIBUTOR TO ANY AND ALL SOFTWARE PROVIDED
BY OR PUBLISHED IN THIS REPOSITORY BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.

For supported software packages please contact us at:

  sales@atomicorp.com

Do you agree to these terms? (yes/no) [Default: yes] yes

Configuring the [atomic] repo archive for this system

Installing the Atomic GPG keys: OK

Downloading atomic-release-1.0-21.el7.art.noarch.rpm: Preparing...                             ################################# [100%]
Updating / installing...
   1:atomic-release-1.0-21.el7.art    ################################# [100%]
OK

Enable repo by default? (yes/no) [Default: yes]: yes


The Atomic repo has now been installed and configured for your system
The following channels are available:
  atomic          - [ACTIVATED] - contains the stable tree of ART packages
  atomic-testing  - [DISABLED]  - contains the testing tree of ART packages
  atomic-bleeding - [DISABLED]  - contains the development tree of ART packages

 

リポジトリ導入後、以下のコマンドでOpenVASをインストールする。

yum -y install openvas

 

これで、OpenVASのインストールが完了した。

 

2.設定

インストールが完了したら、以下のコマンドでOpenVASの初期セットアップを実施する。
なお、bzip2が必要なので事前にインストールしている。入力を求められる箇所については、すべてデフォルトで進めていく。

yum -y install bzip2
openvas-setup
[root@BS-PUB-WEBTOOL-TEST01 ~]# openvas-setup

Openvas Setup, Version: 1.0


Step 1: Update NVT, CERT, and SCAP data
Please note this step could take some time.
Once completed, this will be updated automatically every 24 hours

Select download method
* wget (NVT download only)
* curl (NVT download only)
* rsync

  Note: If rsync requires a proxy, you should define that before this step.
Downloader [Default: rsync]
Updating NVTs....
[i] This script synchronizes an NVT collection with the 'OpenVAS NVT Feed'.
[i] The 'OpenVAS NVT Feed' is provided by 'The OpenVAS Project'.
[i] Online information about this feed: 'http://www.openvas.org/openvas-nvt-feed.html'.
[i] NVT dir: /var/lib/openvas/plugins
[w] Could not determine feed version.
[i] rsync is not recommended for the initial sync. Falling back on http.
[i] Will use wget

.....

Updating OpenVAS Manager database....
Pausing while openvas-scanner loads NVTs...Done

Step 2: Configure GSAD
The Greenbone Security Assistant is a Web Based front end
for managing scans. By default it is configured to only allow
connections from localhost.

Allow connections from any IP? [Default: yes]
Redirecting to /bin/systemctl restart  gsad.service

Step 3: Choose the GSAD admin users password.
The admin user is used to configure accounts,
Update NVT's manually, and manage roles.

Enter administrator username [Default: admin] :
Enter Administrator Password:
Verify Administrator Password:

Redirecting to /bin/systemctl start  redis.service

Setup complete, you can now access GSAD at:
  https://<IP>:9392

Created symlink from /etc/systemd/system/multi-user.target.wants/openvas-scanner.service to /usr/lib/systemd/system/openvas-scanner.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/openvas-manager.service to /usr/lib/systemd/system/openvas-manager.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/gsad.service to /usr/lib/systemd/system/gsad.service.

 

これで、初期セットアップが完了した。
念のため、Firewalld、SELinuxを停止しておく。

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i.bak "/SELINUX/s/enforcing/disabled/g" /etc/selinux/config

 

SSL用の証明書を作成する。

openvas-mkcert-client -n om -i
[root@BS-PUB-WEBTOOL-TEST01 ~]# openvas-mkcert-client -n om -i
Generating RSA private key, 4096 bit long modulus
..................................................................++
.......................................................++
e is 65537 (0x10001)
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) [DE]:State or Province Name (full name) [Some-State]:Locality Name (eg, city) []:Organization Name (eg, company) [Internet Widgits Pty Ltd]:Organizational Unit Name (eg, section) []:Common Name (eg, your name or your server's hostname) []:Email Address []:Using configuration from /tmp/openvas-mkcert-client.8221/stdC.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'DE'
localityName          :PRINTABLE:'Berlin'
commonName            :PRINTABLE:'om'
Certificate is to be certified until Aug 25 00:29:42 2017 GMT (365 days)

Write out database with 1 new entries
Data Base Updated
Your client certificates are in /tmp/openvas-mkcert-client.8221 .

You will have to copy them by hand.

 

最後に、OpenVASのデータベースファイルをリビルドしてOpenVAS Managerを起動させる。
念のため、Redisも再起動しておく。

openvasmd --rebuild
openvasmd
/bin/systemctl restart redis.service

3.Webブラウザからアクセスする

インストール・初期設定が完了したら、Webブラウザから「https://IPアドレス:9392」へアクセスする。
ログインID/PWは「openvas-setup」コマンドで設定したものを利用する。

20160825_095456000000

 

ログイン後の画面がこちら。

20160826_080038000000

 

3.対象のホストにクイックスキャンをかける

さて、OpenVASにはいろいろな機能があるが、とりあえず指定したホストに対してクイックスキャンをかけてみよう。
画面右側にある「Quick Start」のとこで対象ホストのIPアドレスを入力し、「Start Scan」ボタンを押下する。

20160826_081700000000

 

クイックスキャンが実行される。
終了したらレポートが見れるようになるので、スキャン終了まで待つ。

 

20160826_083217000000

20160826_084232000000

 

レポートを見ると、OSのコマンド検証用として内部でのみ使ってるサーバ(sshくらいしか動いてない)でも脆弱性が確認できる。

20160826_084508000000

20160826_084515000000

 

 

定期スキャンもできるので、定期的にスキャンを行わせて脆弱性があったらすぐに対応できるようにしたい。
…まぁ、第三者のサーバとかにかけると思いっきり攻撃になるので、自分のサーバ限定で。

金融機関のためのサイバーセキュリティとBCPの実務 金融機関のためのサイバーセキュリティとBCPの実務

WebからLinux OSを管理しコンソール操作もできる「Cockpit」

$
0
0

WebブラウザからLinuxを管理・操作できるツールで「Cockpit」というものがあるので、今回はそれをインストールしてみる。
なお、コマンドの検証はRHEL系はCentOS 7、Debian/Ubuntu系はUbuntu 16.04 LTSを使って確認しているので、他のバージョンだと少し異なる場合があるので注意。

1.インストール

RHEL系、Debian/Ubuntu系それぞれでのインストールコマンドは以下。

●CentOSなどのRHEL系

yum -y install cockpit

 

●Debian/Ubuntu系

sudo add-apt-repository ppa:cockpit-project/cockpit
sudo apt-get update
sudo apt-get -y install cockpit

 

インストール完了後、サービスを起動させる。

sudo systemctl start cockpit
sudo systemctl enable cockpit

2.ブラウザでアクセスする

さて、インストールおよびサービスの起動が完了したら、実際にブラウザにアクセスする。
デフォルトのポートは9090なので、https://IPアドレス:9090にアクセスする。
(ログインID/PWはOSのユーザアカウントのものと同一)

20160823_075836000000

 

ログイン後の画面がこちら。

20160823_075931000000

 

その他、左メニューから抜粋。
Services

20160823_080408000000

 

Logs

20160823_080433000000

 

あと、[Tools] > [Terminal]からブラウザ上でターミナルを操作可能だ。
sshのポートを開けなくてもここから操作できると考えるとちょっといいかも。

20160823_080456000000

 

改訂3版 Linuxエンジニア養成読本 (Software Design plus) 改訂3版 Linuxエンジニア養成読本 (Software Design plus)

Linuxコンソール上で特定の列の値を元に区切り文字を入れてグループ分けする

$
0
0

先日行ってきた第24回シェル芸勉強会で、タイトルのような特定の列の値を元に、区切り文字を入れてグループ分けするという処理があったので、忘れないように残しておく。
例えば、以下のようなファイルがあったとする。

[root@BS-PUB-CENT7-01 ~]# cat /tmp/test.txt
CCCC 23
AAAA 123
BBBB 244
BBBB 2233
AAAA 444
BBBB 2435
AAAA 244
DDDD 888
CCCC 53534
AAAA 4456

 

このファイルについて、1列目の値に応じてソートしなおし、それぞれの間に区切り文字を入れるには、以下のようにawkコマンドを実行する。

awk '{if($1!=a){print "--";print;a=$1}else{print}}END{print "--"}'
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test.txt
CCCC 23
AAAA 123
BBBB 244
BBBB 2233
AAAA 444
BBBB 2435
AAAA 244
DDDD 888
CCCC 53534
AAAA 4456
[root@BS-PUB-CENT7-01 ~]# sort /tmp/test.txt | awk '{if($1!=a){print "--";print;a=$1}else{print}}END{print "--"}'
--
AAAA 123
AAAA 244
AAAA 444
AAAA 4456
--
BBBB 2233
BBBB 2435
BBBB 244
--
CCCC 23
CCCC 53534
--
DDDD 888
--
AWK実践入門 (Software Design plus) AWK実践入門 (Software Design plus)

CentOS 7にOSSのログ分析ツール『Graylog』をインストールする

$
0
0

以前、Syslogサーバとして利用できるログ分析ツール『Graylog』について仮想アプライアンスとして触ってみたのだけど、今回はこれをCentOS 7にインストールしてみる。
仮想アプライアンスと違い、ある程度カスタマイズできるので仕事で導入するときはこっちのほうがいいかな?とりあえず、やっていこう。

1.前提パッケージの導入

1-1.OracleJDKのインストール

まずは、前に書いたようにこちらからOracle JDKのrpmパッケージのURLを確認して、以下のようにコマンドを実行しOracleJDKをインストールする。

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u101-b13/jdk-8u101-linux-x64.rpm
rpm -ihv jdk-8u101-linux-x64.rpm
[root@BS-PUB-CENT7-01 ~]# java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

 

1-2.Elasticsearchのインストール

次に、Elasticsearchのインストールを行う。
以下のコマンドでリポジトリのインストール、設定を行う。

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
cat << EOF > /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=https://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
EOF

 

で、以下のコマンドでElasticsearchのインストールを行う。

yum -y install elasticsearch

 

サービスの起動回りについて設定を行う。

systemctl daemon-reload
systemctl enable elasticsearch

 

Elasticsearchの設定ファイルを編集し、サービス再起動を行う。

cp /etc/elasticsearch/elasticsearch.yml{,.bk}
cat <<EOF >> /etc/elasticsearch/elasticsearch.yml
cluster.name: graylog
script.inline: false
script.indexed: false
script.file: false
EOF
service elasticsearch restart

 

以下のコマンドを実行して、ちゃんと設定できていることを確認する。
無事設定できていれば、赤字になっているとこは同じステータスになってるはずだ。

curl -X GET http://localhost:9200
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
[root@BS-PUB-CENT7-01 ~]# curl -X GET http://localhost:9200
{
  "name" : "Spymaster",
  "cluster_name" : "graylog",
  "version" : {
    "number" : "2.3.5",
    "build_hash" : "90f439ff60a3c0f497f91663701e64ccd01edbb4",
    "build_timestamp" : "2016-07-27T10:36:52Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0"
  },
  "tagline" : "You Know, for Search"
}
[root@BS-PUB-CENT7-01 ~]# curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
{
  "cluster_name" : "graylog",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

 

1-3.MongoDBのインストール

次に、MongoDB 3.2をインストールする。
以下のコマンドでリポジトリ設定、パッケージインストールを実施する。

cat <<"EOF" > /etc/yum.repos.d/mongodb-org-3.2.repo
[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
EOF
yum install -y mongodb-org

 

サービスの起動設定を行う。

systemctl start mongod
systemctl enable mongod

2.Graylogのインストール

前提となるパッケージをインストールできたら、Graylogのインストールを行う。
まず、以下のコマンドでリポジトリを導入してパッケージをインストールする。

rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-2.0-repository_latest.rpm
yum -y install graylog-server

 

次に、Graylog自体の設定ファイルを編集する。
(以下のコマンドではEpelとpwgenをインストールしている)

yum -y install epel-release
yum -y install pwgen
sed -e "/^password_secret/c password_secret = $(pwgen -N 1 -s 96)" \
    -e "/^root_password_sha2 /c root_password_sha2 = $(echo -n P@ssw0rd | sha256sum | awk '{print $1}')" \
    -e "/^#root_email/c root_email = root@localhost" \
    -e "/^root_timezone/c root_timezone = Japan" \
    -e "/elasticsearch_discovery_zen_ping_unicast_hosts/c elasticsearch_discovery_zen_ping_unicast_hosts = $(hostname -I | xargs -n 1 | xargs -I{} echo {}:9300 | tr '\n' ',' | sed 's/,$//g')" \
    -e "/elasticsearch_replicas/c elasticsearch_replicas = 1" \
    -e "/^rest_listen_uri/c rest_listen_uri = http://IPアドレス:12900/" \
    -e "/#web_listen_uri/c web_listen_uri = http://IPアドレス:9000/" \
    -i.bk /etc/graylog/server/server.conf

 

設定ファイルの編集ができたら、以下のコマンドでサービスの起動設定を行う。

systemctl daemon-reload
systemctl restart graylog-server
systemctl enable graylog-server
systemctl enable elasticsearch

 

最後に、Firewalldのポート開放を行う。

firewall-cmd --permanent --zone=public --add-port=9000/tcp
firewall-cmd --permanent --zone=public --add-port=12900/tcp
firewall-cmd --permanent --zone=public --add-port=1514/tcp
firewall-cmd --reload

 

3.WebブラウザからGraylogにアクセスする

さて、それではWebブラウザからGraylogにアクセスしよう。
「http://IPアドレス:9000」にアクセスする。IDは「admin」、パスワードはroot_password_sha2で指定したものでログインできる。

20160830_083249000000

20160830_083712000000

 

無事、ログインすることができた。
あとは、以前書いた内容のようにSyslogの設定もろもろを行うだけだ。

なお、今回は一般ユーザで構築しているため、1024番ポート以下のポートを開けることができない。
そのため、rsyslogのデフォルトポートである514ではなく、10514とかその辺を指定して開けてやるといいだろう。

 

サーバ/インフラエンジニア養成読本 ログ収集〜可視化編 [現場主導のデータ分析環境を構築!] Software Design plus サーバ/インフラエンジニア養成読本 ログ収集〜可視化編 [現場主導のデータ分析環境を構築!] Software Design plus

Ubuntu Server 16.04 LTSにOSSのログ分析ツール『Graylog』をインストールする

$
0
0

前回、CentOS 7にGraylogをインストールしたので、今回はUbuntu Server 16.04 LTSにインストールを行う。

1.前提パッケージの導入

1-1.Oracle JDKのインストール

まずは、以下のコマンドでOracle JDKのインストールを行う。

sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
sudo apt-get -y install oracle-java8-installer
blacknon@BS-PUB-UBUNTU-01:~$ java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

 

1-2.Elasticsearchのインストール

次に、Elasticsearchのインストールを行う。
以下のコマンドでリポジトリのインストール、設定を行う。

sudo wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch.list
sudo apt-get update
sudo apt-get install elasticsearch
sudo update-rc.d elasticsearch defaults

 

インストール後、設定ファイルの編集を行いサービス再起動を実施する。

sudo cp /etc/elasticsearch/elasticsearch.yml{,.bk}
suod sh -c 'cat <<EOF >> /etc/elasticsearch/elasticsearch.yml
cluster.name: graylog
script.disable_dynamic: true
EOF'
sudo service elasticsearch restart

 

最後に、以下のコマンドを実行し正常に返ってくること確認する。

curl -X GET http://localhost:9200
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
blacknon@BS-PUB-UBUNTU-01:~$ curl -X GET http://localhost:9200
{
  "status" : 200,
  "name" : "Gauntlet",
  "cluster_name" : "graylog",
  "version" : {
    "number" : "1.7.5",
    "build_hash" : "00f95f4ffca6de89d68b7ccaf80d148f1f70e4d4",
    "build_timestamp" : "2016-02-02T09:55:30Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}
blacknon@BS-PUB-UBUNTU-01:~$ curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
{
  "cluster_name" : "graylog",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0
}

 

1-3.MongoDBのインストール

次に、MongoDBをインストールする。
以下のコマンドでリポジトリの追加、インストールを行う。

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
sudo apt-get update
sudo apt-get install mongodb-org

 

サービスの起動設定などを行う。

sudo systemctl start mongod
sudo systemctl enable mongod

2.Graylogのインストール

前提となるパッケージの導入ができたら、Graylogのインストールを行う。
以下のコマンドで、リポジトリの導入とパッケージのインストールを行う。

wget https://packages.graylog2.org/repo/packages/graylog-2.0-repository_latest.deb
sudo dpkg -i graylog-2.0-repository_latest.deb
sudo apt-get install -y apt-transport-https
sudo apt-get update
sudo apt-get install -y graylog-server

 

次に、Graylogの設定ファイルを編集する。

sudo apt-get install pwgen
sudo \
sed -e "/^password_secret/c password_secret = $(pwgen -N 1 -s 96)" \
    -e "/^root_password_sha2 /c root_password_sha2 = $(echo -n P@ssw0rd | sha256sum | awk '{print $1}')" \
    -e "/^#root_email/c root_email = メールアドレス" \
    -e "/^root_timezone/c root_timezone = Japan" \
    -e "/elasticsearch_discovery_zen_ping_unicast_hosts/c elasticsearch_discovery_zen_ping_unicast_hosts = $(hostname -I | xargs -n 1 | xargs -I{} echo {}:9300 | tr '\n' ',' | sed 's/,$//g')" \
    -e "/elasticsearch_replicas/c elasticsearch_replicas = 1" \
    -e "/^rest_listen_uri/c rest_listen_uri = http://IPアドレス:12900/" \
    -e "/#web_listen_uri/c web_listen_uri = http://IPアドレス:9000/" \
    -i.bk /etc/graylog/server/server.conf

 

設定ファイルを編集したら、以下のコマンドでサービスの起動設定を行う。

sudo systemctl daemon-reload
sudo systemctl restart graylog-server
sudo systemctl enable graylog-server
sudo systemctl enable elasticsearch

 

3.WebブラウザからGraylogにアクセスする

サービス起動後、Webブラウザから「http://IPアドレス:9000」へアクセスする。

20160831_070448000000

20160831_070501000000

 

無事、ログインできた。
Syslogの設定については、以前仮想アプライアンスを利用した際に記述したのでそちらを参照してもらいたい。

なお、その際に注意したいのがポート番号。仮想アプライアンスと違って一般ユーザを作って動かしているため、1024番以下のポートを開くことができない。
(setcapで「setcap ‘cap_net_bind_service=+ep’ PATH」をしてもダメだった)
そのため、514以外の適当なポート(10514とか)を開いてやるといいだろう。

rsyslog 実践ログ管理入門 rsyslog 実践ログ管理入門

GraylogでWebインターフェイスのSSLを有効にする(オレオレ証明書)

$
0
0

Graylogでは、デフォルトだとWebインターフェイスがhttpsになっておらず、ちょっとよろしくない。
で、一応設定としてSSLの有効化は行えるようなので、(手順と違いオレオレ証明書にはなるが)設定を行ってみることにする。

まず、以下のコマンドでSSLの証明書、鍵を作成する。

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/certs/graylog-proxy.key -out /etc/ssl/certs/graylog-proxy.crt

 

次に、Graylogの設定ファイル(/etc/graylog/server/server.conf)において、以下の項目を変更する。

rest_listen_uri = https://IPアドレス:12900/
rest_enable_tls = true
rest_tls_cert_file = /etc/ssl/certs/graylog-proxy.crt
rest_tls_key_file = /etc/ssl/certs/graylog-proxy.key
web_listen_uri = https://IPアドレス:9000/
web_enable_tls = true
web_tls_cert_file = /etc/ssl/certs/graylog-proxy.crt
web_tls_key_file = /etc/ssl/certs/graylog-proxy.key

あとは、Graylogのサービス再起動を行ってブラウザからアクセスするだけだ。

sudo systemctl restart graylog-server

20160901_195050000000

20160901_195055000000

 

無事、SSLを有効にできた。
とりあえず、セキュリティが気になるのでこの辺は設定しておいたほうがいいかもしれない。

サーバ/インフラエンジニア養成読本 ログ収集〜可視化編 [現場主導のデータ分析環境を構築!] Software Design plus サーバ/インフラエンジニア養成読本 ログ収集〜可視化編 [現場主導のデータ分析環境を構築!] Software Design plus

GraylogからSlackにアラートを通知させる

$
0
0

Graylogでログを監視して、Slackにアラートを通知させるにはこちらのSlackへの通知プラグインを導入すればよい。
インストール方法は簡単。こちらからパッケージかjarファイルをダウンロードしてきて、所定の場所(graylog.confに「plugin_dir」で指定されているディレクトリ)に配置してやればよい。

とりあえず、今回はCentOS 7なので、rpmパッケージをインストールしてやる。

rpm -ihv https://github.com/Graylog2/graylog-plugin-slack/releases/download/2.2.1/graylog-plugin-slack-2.2.1-1.noarch.rpm

 

インストール後、Graylogのサービス再起動を実施する。

systemctl restart graylog-server

 

サービス再起動が完了したら、こちらからSlackのWebHookの設定を行っておく。
これについては詳細は省く。

 

1.Streamの新規作成

WebHookの設定(投稿用URLや投稿チャンネル、表示するユーザ名など)を設定したら、Graylogの設定画面を開き、「Streams」から「Create Stream」をクリックする。
Title、Descriptionの入力を行い、新規Streamを作成する。

20160901_221832000000

 

2.ルール作成

Streamの作成をしたら、アラートのルールを定める。
「Edit rules」をクリックし、まずどのInputから来るログを対象とするか選択する。

20160901_222946000000

20160901_223027000000

 

次に、「Add stream rule」をクリックし、対象となるフィールドやマッチさせるタイプ、キーワードを指定する。
(ここでは、テストのためにとりあえずValueを「error」にしている。マッチしない場合にアラートを出させることもできるようだけど、ちょっと面倒なのでやらない。)

20160901_223801000000

 

ルールが追加できたら、「I’m done」で登録する。

3.アウトプットの設定

Streamの「Manage Outputs」をクリックし、次の画面で「Slack Output」を選択して「Launch new output」をクリックする。

20160901_222027000000

20160901_222252000000

 

OutputのタイトルやWebHookの投稿URL、チャンネルなどを入力してSaveする。

20160901_222543000000

 

4.Slackにアラートを投げる

一通り設定が終わったら、Streamsのトップ画面から対象のstreamを起動させる。

20160901_224507000000

 

streamが起動したら、loggerなどで対象のキーワードを持つログをはかせてみよう。

[root@BS-PUB-CENT7-02 ~]# logger error

20160901_224802000000_1

 

確かに、Slackにちゃんとアラートが上がってきた。
今回は簡単な設定しかしていないが、いろいろと細かく設定もできるみたいなので、実運用でも問題なく使えそうだ。

Slack入門 [ChatOpsによるチーム開発の効率化] Slack入門 [ChatOpsによるチーム開発の効率化]

CentOS 7でyumからSecurityUpdateを行えるようにする

$
0
0

CentOSではyumでセキュリティ関連のパッケージのみ導入する場合は「yum-plugin-security」というパッケージを利用することで、セキュリティ関連のアップデートをかけることができる…
のだけど、CentOSではこのパッケージを利用しても「No packages needed for security」と出力され、セキュリティアップデートは実行されない。同じRHELベースのAmazonLinuxなどでは実行されるのに…

[root@BS-PUB-CENT7-01 ~]# yum --security update
読み込んだプラグイン:fastestmirror
base                                                                    | 3.6 kB  00:00:00
elasticsearch-2.x                                                       | 2.9 kB  00:00:00
epel/x86_64/metalink                                                    | 6.3 kB  00:00:00
extras                                                                  | 3.4 kB  00:00:00
graylog                                                                 | 2.9 kB  00:00:00
mongodb-org-3.2                                                         | 2.5 kB  00:00:00
updates                                                                 | 3.4 kB  00:00:00
Loading mirror speeds from cached hostfile
 * base: download.nus.edu.sg
 * epel: mirror.rise.ph
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
 --> kernel-tools-3.10.0-327.28.3.el7.x86_64 from updates removed (updateinfo)
 --> kernel-3.10.0-327.28.3.el7.x86_64 from updates removed (updateinfo)
 --> python-perf-3.10.0-327.28.2.el7.x86_64 from @updates removed (updateinfo)
 --> kernel-tools-libs-3.10.0-327.28.2.el7.x86_64 from @updates removed (updateinfo)
 --> python-perf-3.10.0-327.28.3.el7.x86_64 from updates removed (updateinfo)
 --> elasticsearch-2.4.0-1.noarch from elasticsearch-2.x removed (updateinfo)
 --> kernel-tools-3.10.0-327.28.2.el7.x86_64 from @updates removed (updateinfo)
 --> kernel-tools-libs-3.10.0-327.28.3.el7.x86_64 from updates removed (updateinfo)
 --> elasticsearch-2.3.5-1.noarch from @elasticsearch-2.x removed (updateinfo)
No packages needed for security; 5 packages available
依存性の解決をしています

 

これは、CentOSのリポジトリではセキュリティアップデートの情報が提供されていないことが原因らしい。
つまり、その情報を提供しているリポジトリを別途導入してやることで利用できるようになるということだ。

で、CentOS用のセキュリティ情報を提供しているCEFS projectというものがあるので、このプロジェクトが提供している情報をもとにローカルリポジトリを導入してやることで、yumでセキュリティアップデートが行えるようになる。こちらに有志が作ったリポジトリ導入スクリプトがあるので、今回はこれをCentOS 7に導入してやる。

まず、以下のコマンドで実行させるスクリプトをダウンロードする。
(CentOS 7ではyum-plugin-securityはyumに統合されているので不要だが、念のため記述)

yum install createrepo yum-plugin-security bzip2
mkdir -p /security && cd /security
wget https://raw.githubusercontent.com/vmfarms/generate_updateinfo/master/generate_updateinfo.py

 

ダウンロードしたスクリプトファイルで、リポジトリの保存先、バージョン(デフォルトがCentOS6なので、CentOS7への書き換え)を行う。

sed -e '/^BUILD_PREFIX = /s/"\/tmp"/"\/security"/g' \
    -e '/^RELEASES = /s/6/7/g' \
    -i.bk /security/generate_updateinfo.py

スクリプト編集後、以下のコマンドでリポジトリを作成、登録する。

createrepo /security
python generate_updateinfo.py <(curl -s http://cefs.steve-meier.de/errata.latest.xml.bz2 | bzip2 -dc)
modifyrepo /security/updateinfo-7/updateinfo.xml /security/repodata/

 

最後に、参照するリポジトリとして登録を行う。

cp /etc/yum.repos.d/CentOS-Base.repo{,.bk}
cat << "EOF" >> /etc/yum.repos.d/CentOS-Base.repo
[security]
name=CentOS-$releasever - Security
baseurl=file:///security
EOF

 

これで、yumからセキュリティアップデートが行えるようになった。

yum --security update
[root@BS-PUB-CENT7-01 security]# yum --security update
読み込んだプラグイン:fastestmirror
base                                                                    | 3.6 kB  00:00:00
elasticsearch-2.x                                                       | 2.9 kB  00:00:00
epel/x86_64/metalink                                                    | 6.3 kB  00:00:00
extras                                                                  | 3.4 kB  00:00:00
graylog                                                                 | 2.9 kB  00:00:00
mongodb-org-3.2                                                         | 2.5 kB  00:00:00
security                                                                | 3.3 kB  00:00:00
updates                                                                 | 3.4 kB  00:00:00
(1/2): security/updateinfo                                              |  33 kB  00:00:00
(2/2): security/primary_db                                              | 1.1 kB  00:00:00
Loading mirror speeds from cached hostfile
 * base: mirror.nus.edu.sg
 * epel: kartolo.sby.datautama.net.id
 * extras: mirror.nus.edu.sg
 * updates: mirror.nus.edu.sg
 --> elasticsearch-2.4.0-1.noarch from elasticsearch-2.x removed (updateinfo)
 --> elasticsearch-2.3.5-1.noarch from @elasticsearch-2.x removed (updateinfo)
4 package(s) needed (+0 related) for security, out of 5 available
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ kernel.x86_64 0:3.10.0-327.28.3.el7 を インストール
---> パッケージ kernel-tools.x86_64 0:3.10.0-327.28.2.el7 を 更新
---> パッケージ kernel-tools.x86_64 0:3.10.0-327.28.3.el7 を アップデート
---> パッケージ kernel-tools-libs.x86_64 0:3.10.0-327.28.2.el7 を 更新
---> パッケージ kernel-tools-libs.x86_64 0:3.10.0-327.28.3.el7 を アップデート
---> パッケージ python-perf.x86_64 0:3.10.0-327.28.2.el7 を 更新
---> パッケージ python-perf.x86_64 0:3.10.0-327.28.3.el7 を アップデート
--> 依存性解決を終了しました。

依存性を解決しました

===============================================================================================
 Package                   アーキテクチャー
                                          バージョン                     リポジトリー     容量
===============================================================================================
インストール中:
 kernel                    x86_64         3.10.0-327.28.3.el7            updates          33 M
更新します:
 kernel-tools              x86_64         3.10.0-327.28.3.el7            updates         2.4 M
 kernel-tools-libs         x86_64         3.10.0-327.28.3.el7            updates         2.3 M
 python-perf               x86_64         3.10.0-327.28.3.el7            updates         2.4 M

トランザクションの要約
===============================================================================================
インストール  1 パッケージ
更新          3 パッケージ

総ダウンロード容量: 40 M
Is this ok [y/d/N]: y
Downloading packages:
updates/7/x86_64/prestodelta                                            | 698 kB  00:00:03
(1/4): python-perf-3.10.0-327.28.3.el7.x86_64.rpm                       | 2.4 MB  00:00:04
(2/4): kernel-tools-libs-3.10.0-327.28.3.el7.x86_64.rpm                 | 2.3 MB  00:00:04
(3/4): kernel-3.10.0-327.28.3.el7.x86_64.rpm                            |  33 MB  00:00:07
(4/4): kernel-tools-3.10.0-327.28.3.el7.x86_64.rpm                      | 2.4 MB  00:00:06
-----------------------------------------------------------------------------------------------
合計                                                           5.5 MB/s |  40 MB  00:00:07
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  更新します              : kernel-tools-libs-3.10.0-327.28.3.el7.x86_64                   1/7
  更新します              : kernel-tools-3.10.0-327.28.3.el7.x86_64                        2/7
  更新します              : python-perf-3.10.0-327.28.3.el7.x86_64                         3/7
  インストール中          : kernel-3.10.0-327.28.3.el7.x86_64                              4/7
  整理中                  : kernel-tools-3.10.0-327.28.2.el7.x86_64                        5/7
  整理中                  : kernel-tools-libs-3.10.0-327.28.2.el7.x86_64                   6/7
  整理中                  : python-perf-3.10.0-327.28.2.el7.x86_64                         7/7
  検証中                  : kernel-tools-3.10.0-327.28.3.el7.x86_64                        1/7
  検証中                  : kernel-3.10.0-327.28.3.el7.x86_64                              2/7
  検証中                  : python-perf-3.10.0-327.28.3.el7.x86_64                         3/7
  検証中                  : kernel-tools-libs-3.10.0-327.28.3.el7.x86_64                   4/7
  検証中                  : python-perf-3.10.0-327.28.2.el7.x86_64                         5/7
  検証中                  : kernel-tools-libs-3.10.0-327.28.2.el7.x86_64                   6/7
  検証中                  : kernel-tools-3.10.0-327.28.2.el7.x86_64                        7/7

インストール:
  kernel.x86_64 0:3.10.0-327.28.3.el7

更新:
  kernel-tools.x86_64 0:3.10.0-327.28.3.el7   kernel-tools-libs.x86_64 0:3.10.0-327.28.3.el7
  python-perf.x86_64 0:3.10.0-327.28.3.el7

完了しました!
新しいLinuxの教科書 新しいLinuxの教科書

CentOS 7にepel、remiのリポジトリを追加する

$
0
0

CentOSでちょっと新しめのパッケージを入れる際にかなりの確率でお世話になるepelとremiのリポジトリ。
これらのリポジトリを追加する場合は、以下のコマンドを実行すればよい。

epel

yum install -y epel-release
sed -i.bk '/[epel]/,/^enabled/s/enabled=1/enabled=0/' /etc/yum.repos.d/epel.repo # yum実行時に「enablerepo=epel」を付けないと有効にさせない

remi

rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

 

実践!  CentOS 7 サーバー徹底構築 実践! CentOS 7 サーバー徹底構築

UbuntuServerでセキュリティアップデートのみ行わせる(手動・自動)

$
0
0

Ubuntu Serverでセキュリティアップデートのみを行わせるには、yumと違ってapt-get(apt)だけだとできないようだ。
じゃあどうすればいいのかというと、「unattended-upgrades」というパッケージを利用するといいようだ。このパッケージ、手動だけではなく自動でのセキュリティアップデートを行わせることもできるようだ。今回は、UbuntuServer 16.04でこの確認を行う。

1.unattended-upgradesのインストール・設定

まずは、以下のコマンドでunattended-upgradesのインストールを行う。
(Ubuntu Server 16.04ではバンドルされてると思うが、念のため)

sudo apt-get install unattended-upgrades

 

次に設定を確認し、最低限やっておきたい設定だけしておく。
以下のコマンドを実行して、現在の設定状態を確認する(とりあえず、「Unattended-Upgrade::Allowed-Origins」で「”${distro_id}:${distro_codename}-security”;」だけが有効になってればよい)。

cat /etc/apt/apt.conf.d/50unattended-upgrades
blacknon@BS-PUB-UBUNTU-01:~$ cat /etc/apt/apt.conf.d/50unattended-upgrades
// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
//      "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
//      "${distro_id}:${distro_codename}-backports";
};

// List of packages to not update (regexp are supported)
Unattended-Upgrade::Package-Blacklist {
//      "vim";
//      "libc6";
//      "libc6-dev";
//      "libc6-i686";
};

// This option allows you to control if on a unclean dpkg exit
// unattended-upgrades will automatically run
//   dpkg --force-confold --configure -a
// The default is true, to ensure updates keep getting installed
//Unattended-Upgrade::AutoFixInterruptedDpkg "false";

// Split the upgrade into the smallest possible chunks so that
// they can be interrupted with SIGUSR1. This makes the upgrade
// a bit slower but it has the benefit that shutdown while a upgrade
// is running is possible (with a small delay)
//Unattended-Upgrade::MinimalSteps "true";

// Install all unattended-upgrades when the machine is shuting down
// instead of doing it in the background while the machine is running
// This will (obviously) make shutdown slower
//Unattended-Upgrade::InstallOnShutdown "true";

// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent, make sure that you
// have a working mail setup on your system. A package that provides
// 'mailx' must be installed. E.g. "user@example.com"
//Unattended-Upgrade::Mail "root";

// Set this value to "true" to get emails only on errors. Default
// is to always send a mail if Unattended-Upgrade::Mail is set
//Unattended-Upgrade::MailOnlyOnError "true";

// Do automatic removal of new unused dependencies after the upgrade
// (equivalent to apt-get autoremove)
//Unattended-Upgrade::Remove-Unused-Dependencies "false";

// Automatically reboot *WITHOUT CONFIRMATION*
//  if the file /var/run/reboot-required is found after the upgrade
//Unattended-Upgrade::Automatic-Reboot "false";

// If automatic reboot is enabled and needed, reboot at the specific
// time instead of immediately
//  Default: "now"
//Unattended-Upgrade::Automatic-Reboot-Time "02:00";

// Use apt bandwidth limit feature, this example limits the download
// speed to 70kb/sec
//Acquire::http::Dl-Limit "70";
blacknon@BS-PUB-UBUNTU-01:~$ cat /etc/apt/apt.conf.d/50unattended-upgrades | grep -v -e ^// -e ^$
Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Package-Blacklist {
};

 

なお、デフォルトではセキュリティアップデートのみが実行されOS再起動はされないのだが、一部のアップデートではOS再起動が必要な場合がある。
その場合は「Unattended-Upgrade::Automatic-Reboot」をtrueにしてやればいいだろう。

2.セキュリティアップデートを手動実行させる

セキュリティアップデートを手動実行させるのは簡単。
sudo付きでオプションなしでコマンドを実行してやればいいだけだ。

sudo unattended-upgrades

 

3.セキュリティアップデートを自動実行させる

セキュリティアップデートを自動実行させる場合は、以下のコマンドを実行して画面の選択肢で<はい>を設定してやればよい。

sudo dpkg-reconfigure -plow unattended-upgrades

20160903_171440000000

20160903_171523000000

 

これで、セキュリティアップデートが日次で実行されるようになった。「/etc/cron.daily」と同じタイミングで実行されるようなので、「/etc/crontab」の設定日時に確認するといいだろう。

 


Linuxで『progress』コマンドを使って動いてるcpやmv、tarの進捗状況を調べる

$
0
0

cpやmv、tarコマンドの進捗状況を調べる方法といえばいくつかあるが、progressコマンドなるものを用いてバックで動いているcpやmvなどの進捗状況を確認することができるようだ。
以下、インストールコマンド。

rpm -ihv http://cbs.centos.org/kojifiles/packages/progress/0.13/1.el6/x86_64/progress-0.13-1.el6.x86_64.rpm # RHEL6系
rpm -ihv http://cbs.centos.org/kojifiles/packages/progress/0.13/1.el7/x86_64/progress-0.13-1.el7.x86_64.rpm # RHEL7系
sudo apt-get install progress # Debian/Ubuntu系

あとは、cpやmv、tar実行中に別ウィンドウからコマンドを実行するだけだ。

progress
[root@BS-PUB-CENT7-01 ~]# progress # 裏で何も動いてないときは以下のメッセージが流れる
No command currently running: cp, mv, dd, tar, cat, rsync, grep, fgrep, egrep, cut, sort, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, adb, gzip, gunzip, bzip2, bunzip2, xz, unxz, lzma, unlzma, zcat, bzcat, lzcat, or wrong permissions.
[root@BS-PUB-CENT7-01 ~]# progress
[24349] tar /root/jdk-8u101-linux-x64.rpm
        18.9% (29.9 MiB / 158.3 MiB)

[24350] gzip /root/aaa.tar.gz
        100.0% (29.2 MiB / 29.2 MiB)

[root@BS-PUB-CENT7-01 ~]# progress
[24349] tar /root/jdk-8u101-linux-x64.rpm
        55.5% (87.8 MiB / 158.3 MiB)

[24350] gzip /root/aaa.tar.gz
        100.0% (86.9 MiB / 86.9 MiB)

[root@BS-PUB-CENT7-01 ~]# progress
[24349] tar /root/jdk-8u101-linux-x64.rpm
        68.5% (108.4 MiB / 158.3 MiB)

[24350] gzip /root/aaa.tar.gz
        100.0% (107.5 MiB / 107.5 MiB)

[root@BS-PUB-CENT7-01 ~]# progress
[24349] tar /root/aaa.tar.gz
        20.8% (43.6 MiB / 210.0 MiB)

[24350] gzip /root/aaa.tar.gz
        100.0% (210.0 MiB / 210.0 MiB)

 

改訂3版 Linuxエンジニア養成読本 (Software Design plus) 改訂3版 Linuxエンジニア養成読本 (Software Design plus)

Ubuntu 14.04上でオープンソースのIPAM・DCIMツール『netbox』をDockerで動作させる

$
0
0

今まで、OpenDCIMDevice42RalphといったDCIMツールを触ってきたのだが、DegitalOceanから『netbox』というDCIMツールが出たようなので、ちょっと触ってみることにする。
ちゃんとOSにインストールするなら、こちらの公式ドキュメントを参考に行うといいだろうが、ちょっと面倒くさそうだ。
Dockerイメージもあるので、今回はお試しということもあってこちらを利用する(なので、前提として最新版(少なくとも、docker-composeのVersion2の記述方法に対応したバージョン)のDockerとdocker-composeがインストール済みとなってる必要がある)。また、Dockerの設定ファイルを見たところ、今時点では16.04には対応してなさそうなので、14.04を用いる。

Dockerおよびdocker-composeをインストールしたら、以下のコマンドで「netbox」のDockerイメージを起動させる。

git clone -b master https://github.com/digitalocean/netbox.git
cd netbox
sudo docker-compose up -d

 

Dockerでの起動が終了したら、「http://IPアドレス」でアクセスできる。
この状態だとログイン前のため、何も編集ができない(閲覧モードになる)。右上の「Log in」からログインできる。

20160904_140150000000

 

ログイン用のデフォルトID/PWは「admin/admin」となっている。

20160904_140716000000

 

ログイン後の画面がこちら。

20160904_140805000000

 

「netbox」は、以下のような構成になっているようだ。

  • Organization
    • Sites … 地理的な場所(DCのある場所)
    • Tenants … そのSiteに紐づく客や部門など
  • DCIM
    • Racks … ラックの情報(Sitesがないと作れない)
    • Devices … ラックに搭載するデバイスの情報
  • IPAM
    • VRFs … VRFの情報
    • Aggregates … トップレベルIPの割り当て情報
    • Prefixes … IPv4/IPv6ネットワーク割り当て情報
    • IP Addresses … 各IPアドレスの管理情報
    • VLANs … 各VLANの管理情報
  • Circuits
    • Providers … インターネットプロバイダ情報
    • Circuits … インターネット接続情報?(インターネット速度など)
  • Secrets
    • Secrets … パスワードなどの機密情報(今時点でSSL経由の通信ないみたいだけど。まぁリバースプロキシをコンテナで動かさせたりすればいいだけだから…)

各機能(特にRackまわり)、なんとなく触ってみたので、スクリーンショットを貼っておく。

ラック。ラックに搭載する機器はデバイスタイプ(自分で設定する。サーバとかスイッチとか)ごとに色を変えられるので、閲覧性は悪くない。

20160904_182842000000

 

 

各デバイスにはネットワークポートを設定でき、それぞれ対向先の機器についても定義できる。
(この辺はまだRalphにはついてないんだよなぁ…今年の10月から開発するって言ってたけど、どうなんだろう…)

20160904_182922000000

20160904_183007000000

 

各ネットワークポートの作成には正規表現を使えるので、スイッチの作成では結構楽。

20160904_183842000000

 

シークレット機能が少し面白い。
登録時に鍵で暗号化しておき、自身のProfileで設定した鍵と一致した場合は中身を見れるようだ。
こんな機能があるのにSSL経由の通信じゃないのは残念だが、また改善されていくだろう。

20160904_183307000000

20160904_183308000000

 

DegitalOceanの作成したツールということもあり、結構期待してもよさそう。
まだDCIMを導入してないような環境であれば一考の価値はありそうだ。

インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門 インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門

cpやmvコマンドに『advcpmv』パッチを適用してプログレスバーによる進捗表示をさせる

$
0
0

以前にもこちらで触れたことがあるのだが、有志の作成した『advcpmv』というパッチをcp、mvファイルに適用することで、コマンド実行時にプログレスバーを表示させることができるようになる。
パッチは、以下の方法で当てることができる。

wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.21.tar.xz
tar xvJf coreutils-8.21.tar.xz
cd coreutils-8.21/
wget https://raw.githubusercontent.com/atdt/advcpmv/master/advcpmv-0.5-8.21.patch
patch -p1 -i advcpmv-0.5-8.21.patch
./configure
make

コンパイル完了後、既存のコマンドと置き換える。

sudo cp src/cp /usr/local/bin/cp
sudo cp src/mv /usr/local/bin/mv
alias cp='/usr/local/bin/cp -g'
alias mv='/usr/local/bin/mv -g'

 

あとは、ふつうにcp、mvコマンドとして利用すればよい。

20160906_085143000000

 

改訂3版 Linuxエンジニア養成読本 (Software Design plus) 改訂3版 Linuxエンジニア養成読本 (Software Design plus)

CentOS7でNginx・MariaDB・PHP7(LEMP環境)を導入する

$
0
0

今回は、CentOS7でNginx・MariaDB・PHP7を利用した環境(LEMP環境)の構築を行う。
なお、作業の前提としてSELinuxはすでに停止済みとする。

1.前提パッケージの導入

まず、前提パッケージであるNginxやphp7を用いるためにepelとremiのインストールを行う。

●epel

yum install -y epel-release
sed -i.bk '/[epel]/,/^enabled/s/enabled=1/enabled=0/' /etc/yum.repos.d/epel.repo

 

●remi

rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

 

2.Nginxのインストール

Webサーバとして利用するNginxをインストールする。

yum install -y --enablerepo=epel nginx

 

サービスの起動設定、ファイアウォールのポート開放を行う。

systemctl restart nginx.service
systemctl enable nginx.service
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --reload

 

3.MariaDBのインストール

以下のコマンドでMariaDBのインストールを行う。

yum install -y mariadb mariadb-server

 

サービスの起動設定、最低限のセキュリティ設定を実施する。

systemctl start mariadb.service
systemctl enable mariadb.service
mysql_secure_installation
[root@BS-PUB-CENT7-01 ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: 行 379: find_mysql_client: コマンドが見つかりません

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

4.php7(+php-fpm)のインストール

最後に、php7のインストールを以下のコマンドで行う。
このとき、一緒にその他必要なパッケージ(php-fpmなど)も導入してしまう。

yum install -y --enablerepo=epel,remi-php70 php php-mbstring php-pear php-fpm php-mcrypt php-mysql
[root@BS-PUB-CENT7-01 ~]# php -v
PHP 7.0.10 (cli) (built: Aug 31 2016 18:07:34) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

 

4-1.php-fpmの関連設定

php-fpmでは、デフォルトの設定だとapacheが実行グループとなっているので、nginxに切り替える対応が必要になる。
以下のコマンドを実行し、置換を行う。

sed -i.bk '/^[user|group]/s/apache/nginx/' /etc/php-fpm.d/www.conf

 

また、php-fpmとNginxを連携させるため、Nginxの設定ファイルである「/etc/nginx/nginx.conf」というファイルを置き換える。
※VirtualHostでやるのであれば、別途「/etc/nginx/conf.d」配下に設定ファイルを作成することを推奨する。今回はテストなのでこのまま進める。

cat << "EOF" > /etc/nginx/conf.d/test.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;
        index index.php;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        location ~ \.php$ {
            include /etc/nginx/fastcgi_params;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/test$fastcgi_script_name;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}
EOF

 

作業完了後、php-fpmのサービス起動設定やNginxの再起動などを行う。

systemctl restart php-fpm.service
systemctl enable php-fpm.service
systemctl restart nginx.service

 

最後に、ちゃんとNginxでphpが動作しているかを確認するため、phpinfoファイルを作成、ブラウザからアクセスする。

echo '<?php phpinfo(); ?>' > /usr/share/nginx/html/index.php

20160904_231931000000

 

nginx実践入門 (WEB+DB PRESS plus) nginx実践入門 (WEB+DB PRESS plus)

CentOS7でNginx・MariaDB・PHP7(LEMP環境)によるWordPressの構築

$
0
0

今回は、CentOS 7でNginx・MariaDB・PHP7を用いた環境(LEMP環境)でのWordPressの構築を実施する。
まず、対象のサーバにLEMP環境が導入されていることが前提となるのだが、それについては下の内容を参照してもらいたい。

CentOS7でNginx・MariaDB・PHP7(LEMP環境)を導入する

 

1.Nginxの設定変更

まず、NginxでVirtualHostの設定を行う。
今回の場合、テストとしてローカルネットワーク内で構築をするため、以下のような設定となる。

  • server_name : bs-pub-wordpress-01.blacknon.local
  • listen : 80
  • Document root : /usr/share/nginx/wordpress
  • access_log : /var/log/nginx/wordpress/access.log
  • error_log : /var/log/nginx/wordpress/error.log

●/etc/nginx/conf.d/wordpress.conf

server {
    listen 80;
    server_name bs-pub-wordpress-01.blacknon.local;

    access_log /var/log/nginx/wordpress/access.log;
    error_log /var/log/nginx/wordpress/error.log;

    location / {
        root /usr/share/nginx/wordpress;
        index index.php index.html index.htm;

        if (-f $request_filename) {
            expires 30d;
            break;
            }

        if (!-e $request_filename) {
            rewrite ^(.+)$ /index.php?q=$1 last;
            }
        }

    location ~ .php$ {
        fastcgi_pass   localhost:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME   /usr/share/nginx/wordpress/$fastcgi_script_name;
        fastcgi_param  PATH_INFO         $fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
        }
}

 

次に、先ほどの設定ファイルで指定したDocumentRootとログの出力ディレクトリについて作成する。

mkdir /usr/share/nginx/wordpress
mkdir /var/log/nginx/wordpress/
chown -R nginx:nginx /usr/share/nginx/wordpress/

 

Nginxの設定ファイルについてテストを行う。
問題がなければ下のような出力がされる。

nginx -t
[root@BS-PUB-WORDPRESS-01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

問題がなかったら、以下のコマンドでサービスの再起動を実施する。

systemctl restart nginx.service
systemctl restart php-fpm.service

 

2.MariaDBでのデータベース作成

次に、MariaDBでWordPress用のデータベースを作成する。
以下のコマンドを実行する。

mysql -u root -p <<EOF
CREATE DATABASE wordpress;
CREATE USER 'ユーザ名'@'localhost' IDENTIFIED BY 'パスワード';
GRANT ALL PRIVILEGES ON wordpress.* TO 'ユーザ名'@'localhost';
EOF
[root@BS-PUB-WORDPRESS-01 ~]# mysql -u root -p < CREATE DATABASE wordpress;
> CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'wordpress';
> GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost';
> EOF
Enter password:

3.WordPressのインストール・初期設定

Nginxなどの設定が完了したら、WordPressのインストール、初期設定を行う。
まず、以下のコマンドでカレントディレクトリにWordPressのアーカイブファイルを取得して展開する。

wget http://wordpress.org/latest.tar.gz
tar -xzvf latest.tar.gz

 

展開後、以下のコマンドを実行してDocument Rootにファイルを移動する。

mv wordpress/* /usr/share/nginx/wordpress/
rmdir wordpress

 

wp-config.phpのサンプルファイルをコピーして設定ファイルを作成する。

cp /usr/share/nginx/wordpress/wp-config{-sample,}.php

 

コピーして作成したwp-config.phpファイルで、以下の項目を編集する。

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'wordpress');

/** MySQL database password */
define('DB_PASSWORD', 'wordpress');

/** MySQL hostname */
define('DB_HOST', 'localhost');

 

設定ファイル編集後、DocumentRoot配下の所有者をnginxに変更する。

chown -R nginx:nginx /usr/share/nginx/wordpress

 

最後に、ブラウザからWordPressにアクセスする。
なお、このとき普通に「http://サーバ名」のみだと、なぜか「http://サーバ名/index.php/wp-admin/install.php」というリダイレクトがされてしまう。
なので、「http://サーバ名/wp-admin/install.php」を直接指定してやるといいだろう。

インストール画面が表示されたら、日本語を選択して「続ける」。

20160905_234205000000

 

作成するブログの情報を記録して「WordPressをインストール」をクリックする。

20160905_234435000000

 

インストールが完了したら、あとは先ほど設定したID/PWでログインするだけだ。

20160905_234445000000

20160905_234459000000

 

以上でインストールは完了。

WordPressサイト作成塾 WordPressサイト作成塾
Viewing all 743 articles
Browse latest View live