20200314のLinuxに関する記事は6件です。

Linux再入門してみた

はじめに

新しいLinuxの教科書をよんでLINUXに再入門してみました。

ターミナル

ユーザーがコンピュータへ入出力する際に利用する専用のハードウェアのことただし、現在は物理的なターミナルをソフトウェアによって実装たターミナルエミュレータが利用される

いろんな呼ばれ方

  • ターミナルエミュレータ
  • 端末
  • 仮想端末
  • 端末エミュレータ
  • 端末ウインドウ
  • コンソール
  • コンソール端
  • など

シェル

bash

シェルのトラブル対応

  • Ctr+s 画面表示をロック
  • Ctr+q 画面表示のロックを解除

シェル上ではCtr + キーを ^キーで表現する

コマンド履歴

Ctr + r

(reverse-i-search)`':

一文字入力するごとに履歴を検索するモード
さらに

  • Ctr + rと押せば一つ前の検索結果へ移動
  • Enterで検索結果を実行
  • 現在の検索結果を表示したまま、コマンドラインに戻る
  • Ctr + gで結果をはき 、プロンプトに戻る
  • Ctr + sで一つ戻るけど、画面ロックに割当られているので、解除する必要あり

コマンド

find

  • ファイルの種類で探す
    • -type f ファイル (デフォルト)
    • -type d ディレクトリ
    • -type l シンボリックリンク
find ./ -type f -name aaa.txt -print

bash変数

シェル変数

bash 内部で使用される変数。bashが参照しているので、特別な意味を持つシェル変数が多く用意されていろいカスタマイズすることができる

  • PS1
    • プロンプト設定
  • PATH
    • コマンド検索パス
  • LANG
    • 現在のロケール。シェルのメッセージの表示言語や日付の書式
    • 自動的に環境変数として設定される
var1="aaaaaa"
echo $val1

環境変数

  • 外部コマンドはファイルシステム上に存在するコマンド
  • 組み込みコマンドはシェル自体に内蔵しているコマンド

環境変数は外部コマンドからでも値を参照できる
多くのシェル変数が環境変数として設定されている

printenv
export シェル変数名

bashの設定ファイル

ログインシェルの読み込む順番

/etc/profile
↓
~/.bash_profile
↓
~/.bashrc

非ログインシェルの読み込む順番

~/.bashrc

使い分け

  • /etc/profile

    • すべてのユーザに共通の設定項目
  • ~/.bash_profile

    • ログイン時に一度だけ設定すればよい項目
  • ~/.bashrc

    • bashを起動sるたびに毎回設定する必要がある項目

多くの設定はbashを起動するたびに毎回設定する必要があるので.bashrに書けばよい

ユーザーとグループとパーミッション

  • グループは同じ役割をもつユーザーをまとめたもの
  • システム管理者の権限をもたせたいユーザにはwheelグループに所属させればよい
  • デフォルトでユーザーはユーザー名と同じグループに所属する

ファイルパーミッション

-rw-r--r--.  1 root root      21554 Nov 15  2018 test

オーナー:グループ:その他ユーザー

ディレクトリのパーミッション

drwxr-xr-x   2 root root       4096 Mar 14 17:00 test-test

ファイルを削除できるかどうかはディレクトリのパーミッションで決まる
ディレクトリでxが設定されている場合、cdでそのディレクトリに移動したり、ディレクトリ下にあるファイルの読み書きができる

ルートユーザー

su

su - // rootユーザーの環境に初期化されて
su   // 環境変数やカレントディレクトリなど現在の環境を維持したままユーザーだけが切り替わる

sudo

別のユーザとしてコマンドを実行するために利用

sudo cat /etc/shadow

現在ユーザーのパスワードを求められる
許可されていれば

ユーザーへのsudo許可

/etc/sudoers
visudoコマンドで編集する

<ユーザーor%グループ> <マシン名>=(<権限>)<コマンド>
%wheel ALL=(ALL) ALL

sudo を使って、rootユーザーでの操作は最小限にする

プロセス

  • メモリジュオで実行状態にあるプログラム
  • 実行ユーザーが設定されていちえ、他人のプロセスを勝手に操作することもできない
  • すでに存在している別のプロセスをもとに作成される。親子関係。
  • デーモン ターミナルに接続していないプロセス

プロセスの表示

TTYはターミナルを意味している。
ハイフンをつけるのはUNIXオプション
ハイフンをつけないのはBSDオプション。BSDオプションが主流らしい。

現在のターミナルで実行しているプロセス

# ps
  PID TTY          TIME CMD
24021 pts/0    00:00:00 su
24022 pts/0    00:00:00 bash
26512 pts/0    00:00:00 ps

現在のユーザーが実行中のプロセス
fは親子も示す

# ps xf

システムで動作しているすべてのプロセスを表示

# ps ax

よく使うやつ

# ps auxfwww  // xで詳細 wwwで表示幅を制限しない

UNIXオプション(ハイフンつける)

# ps -ef  //eですべてのプロセスを表示 fで親子

killコマンド

シグナルを送信するコマンド

kill -シグナル名

デフォルトはTERM

kill -TERM プロセスID

TERMは終了。
プログラムの種類によってはTERMシグナルを受信したときに現在の状態を保存したり、一時ファイルを削除したりして終了するので、まずはkillしてそのあと強制終了させたほうがよい

リダイレクト

標準エラー出力。プログラムのエラーメッセージを出力するために資料
標準エラー出力のリダイレクト

ls aaaaa 2> aaa.txt

標準出力と標準エラー出力をまとめる

ls aaaa > aaaa.txt 2>&1

標準出力をaaaa.txtへ。標準エラー出力を1とおなじものへ。
&1は標準出力を表す

/dev/null

エラーメッセージを非表示にする

ls / /xxxxx 2> /dev/null

grep

正規表現は``で囲む。
grep 't[ef]'

拡張正規表現

使えるメタ文字を増やした拡張正規表現
grep -E で使える。 -Eをつけないと正規表現
grep -E ()

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

wsl2をインストールしてwindows上でlinuxを使いこなそう

wsl2title.png

内です。前回の記事ではwindows10の標準機能となったwindows subsystem for linux(WSL1)を有効化してkali linuxを動かすという手順をご紹介しました。
今回は6月12日にリリースされた「Windows 10 Insider Preview ビルド」で使用できるWSL2を有効化してubuntuを使用したいと思います。

手順はいつも通り、わかりやすさよりも意識の高さを重視し、なるべくGUIを使用しない方法で導入していきます。

WSL2を入れる理由

WSL1上で動かなかったソフトが動く!

WSL1は全てのLinux上のソフトウェアを動かせるようになるわけではないということは、前回記事でも触れていますが、仕組み的にLinuxカーネルが動いているわけではなく、カーネルへのファンクションコールをlxcore.sysとlxss.sysいうカーネルドライバーがWindowsカーネルへのファンクションコールに変換して動いており、これらカーネルドライバーのシステムコールの実装が不完全なことが、動かないソフトウェアがあることにも起因してます。
その点、WSL2ではHyper-V上でLinuxカーネルが動くので、大抵のプログラムが動くようになります。

WSL2その他特徴

  • wsl1で使えなかったnmapやtcpdumpが動くようになってる。
  • wsl2にするとwsl1が使えなくなるわけではなく、上で動かすOSごとに選べる。例えばkali-linuxはwsl1で動かし、ubuntu-18.04はwsl2で動かすといったことができる。
  • もともとwsl1で入れていたubuntuをwslコマンドでwsl2に変換するといったことができる。
  • wsl1ではwindowsで実行されているため、linux側から見たipアドレスは、windows側のipアドレスと共有されていたが、 wsl2はvm上で動き、ネットワークコンポーネントも仮想化されているため、windowsホストと異なるIPアドレスが割り当てられる。
  • これまではwindows10でhyper-vを有効化するにはwindows10 ProやEnterpriseでなければ不可能だったが、 Homeでもこのwsl2用のhyper-vベースの仮想化技術が利用できるようになった。そのかわりに、Hyper-vが使用されている場合、 VMWareやVirtualBox6以前のバージョンが実行できない。
  • 仮想化になったため、起動が遅くなっただろうと推測しがちだが、むしろ早くなっている。

wsl2インストールの前提条件

  • Hyper-Vのテクノロジーを使用しているため、Hyper-Vの要件である、64bit版であること、BIOSレベルでの仮想化テクノロジーサポート等々をクリアしていることが必要。
  • 「Windows 10 Insider Preview ビルド」をインストールすること。

導入手順

まずはシステムバックアップを

2020年3月現時点ではWSL2は「Windows 10 Insider Preview ビルド」でのみ提供されており、2020年5月に提供されるフィーチャーアップデート版からWSL2がデフォルトの機能として提供される予定です。

そもそも「Windows 10 Insider Preview ビルド」は、将来安定板としてリリースされる予定の現在開発中の機能をいち早く入手する仕組みなので、安定性が失われるというトレードオフが生じます。
実際私もPreviewビルドをインストールしてwsl2を使ってから、これまでは起きなかった不具合でwindows自体が自動再起動するということを何度も経験しております。

なので、まずは何はともあれシステムのバックアップをとっておきましょう。

Windows10 Insider Previewビルドをインストール

  1. [設定]
  2. [更新とセキュリティ]
  3. [Windows Insider Program] の順に選択し、[開始する]をクリックして最新のビルドにアクセスします。 指示に従いプレビューを受け取れるようにして、再起動を実施。

この手順はmicrosoft公式にのっているので、従ってサクッとPreviewビルドをインストールする。

ポイント:デフォルトでプレビュービルドを受け取る頻度が「ファストリング」となってますが、
これは、以降も新しい機能を1週間単位でインストールすることになり、その度にアップデートと再起動でパソコンが
使えなくなる時間が増えるので、スローリング(1ヶ月ごと)を選択するほうがお勧めです。

その後、Windows 10 ビルド18917以降になっていることをコマンドプロンプトを立ち上げて、以下コマンドで確認してください。

コマンドプロンプト:

C:\Users\uchi>ver

Microsoft Windows [Version 10.0.19037.1]

wsl2が動くようにwindowsの仮想化機能を有効化

powershellを管理者として実行。
powershell.png

そして以下、windowsの仮想化機能を有効化するコマンドを実行

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

実行後に有効化するためにコンピュータを再起動してください。

wsl1含めてwslを初めて有効化する場合は、
起動したpowershellで以下コマンドを入力します。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

wsl2にubuntuのインストール

microsoft storeを起動して、ubuntuで検索してインストールを実行するだけです。
今回いれたのは、Ubuntu18.04 LTS版です。
コマンドプロンプト:

C:\Users\uchi>start ms-windows-store:

インストールしたubuntuをwsl2に変換する。
インストールした状態だと、wslのubuntuバージョンは1になっているので、powershellを起動して、2に変換する。

wslのバージョン確認
powershell:

PS C:\Users\uchi&gt; wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Running         1
  kali-linux      Stopped         1

バージョン変換
powershell:

PS C:\Users\uchi> wsl --set-version Ubuntu-18.04 2

wslのバージョン再確認
powershell:

PS C:\Users\uchi&gt; wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Running         2
  kali-linux      Stopped         1

これでUbuntu-18.04をwsl2で動かしながらkali-linuxをwsl1で動かすということができました。

左側:wsl1上のkali linuxでtcpdumpを実行し、失敗している図
右側:wsl2上のubuntu-18.04でtcpdumpを実行し実行出来ている図
wsl1_2.png

wsl2のlinux kernelは以下githubでソース公開されてます。
WSL2-Linux-Kernel

wsl2をWindowsにインストールする手順まとめ

  • wsl2にするとwsl1で使えなかったコマンドやプログラムがいろいろ使えるようになるよ。
  • でも現時点ではWindows 10 Insider Preview ビルドでのみの提供だからwindowsが不安定になるよ。
  • だからバックアップとってね。
  • wsl1と2同居ができて使い分けて便利だね
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

CentOS7.7 に ImageMagick-6.2.x 系をインストールする

  • 結論だけ述べると zlib のバージョンが合わずに無理で、ImageMagick バージョンアップを行った。

古いアプリケーションで、 CentOS 5.11 と ImageMagick-6.2.8-8 が使用されているので、
それを CentOS 7 にバージョンアップを行う。

curl -L https://sourceforge.net/projects/imagemagick/files/old-sources/6.x/6.2/ImageMagick-6.2.8-8.tar.gz/download -o ImageMagick-6.2.8-8.tar.gz
tar zxf ImageMagick-6.2.8-8.tar.gz
cd ImageMagick-6.2.8-8

./configure --prefix=/usr/local/
make

下記エラーが出て、zlib バージョンを下げるかしないと無理そうだったので、諦めました。

/usr/include/zlib.h:1296:21: note: expected 'gzFile' but argument is of type 'struct FILE *'
 ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
                     ^
magick/blob.c:2292:13: error: 'FILE' has no member named 'have'
           c=gzgetc(image->blob->file);
             ^
magick/blob.c:2292:13: error: 'FILE' has no member named 'have'
           c=gzgetc(image->blob->file);
             ^
magick/blob.c:2292:13: error: 'FILE' has no member named 'pos'
           c=gzgetc(image->blob->file);
             ^
magick/blob.c:2292:13: error: 'FILE' has no member named 'next'
           c=gzgetc(image->blob->file);
             ^

ImageMagick-6.9.9 をインストールする

curl -L https://sourceforge.net/projects/imagemagick/files/im6-src/ImageMagick-6.9.9-37.tar.gz/download -o ImageMagick-6.9.9-37.tar.gz
tar zxf ImageMagick-6.9.9-37.tar.gz
cd ImageMagick-6.9.9-37

./configure --prefix=/usr/local/
make
make install
ldconfig

インストール後の確認

[root@centos7 ~]$ identify --version
Version: ImageMagick 6.9.9-37 Q16 x86_64 2020-03-05 http://www.imagemagick.org
Copyright: © 1999-2018 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC OpenMP
Delegates (built-in): bzlib jng jpeg lzma png xml zlib
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Splunkにaudit.logを取り込んで初回起動時の挙動を調べる

はじめに

Splunk Enterpriseをはじめて起動すると画面に色んな処理メッセージが出力されます。

初回起動メッセージ例(クリックすると展開します)
# /opt/splunk/bin/splunk start --accept-license --seed-passwd password

This appears to be your first time running this version of Splunk.
Copying '/opt/splunk/etc/openldap/ldap.conf.default' to '/opt/splunk/etc/openldap/ldap.conf'.
Generating RSA private key, 2048 bit long modulus
.................................+++++
...........................+++++
e is 65537 (0x10001)
writing RSA key

Generating RSA private key, 2048 bit long modulus
.............................................................................+++++
.................................................................+++++
e is 65537 (0x10001)
writing RSA key

Moving '/opt/splunk/share/splunk/search_mrsparkle/modules.new' to '/opt/splunk/share/splunk/search_mrsparkle/modules'.

Splunk> See your world.  Maybe wish you hadn't.

Checking prerequisites...
    Checking http port [8000]: open
    Checking mgmt port [8089]: open
    Checking appserver port [127.0.0.1:8065]: open
    Checking kvstore port [8191]: open
    Checking configuration... Done.
        Creating: /opt/splunk/var/lib/splunk
        Creating: /opt/splunk/var/run/splunk
        Creating: /opt/splunk/var/run/splunk/appserver/i18n
        Creating: /opt/splunk/var/run/splunk/appserver/modules/static/css
        Creating: /opt/splunk/var/run/splunk/upload
        Creating: /opt/splunk/var/run/splunk/search_telemetry
        Creating: /opt/splunk/var/spool/splunk
        Creating: /opt/splunk/var/spool/dirmoncache
        Creating: /opt/splunk/var/lib/splunk/authDb
        Creating: /opt/splunk/var/lib/splunk/hashDb
New certs have been generated in '/opt/splunk/etc/auth'.
    Checking critical directories...    Done
    Checking indexes...
        Validated: _audit _internal _introspection _metrics _telemetry _thefishbucket history main summary
    Done
    Checking filesystem compatibility...  Done
    Checking conf files for problems...
    Done
    Checking default conf files for edits...
    Validating installed files against hashes from '/opt/splunk/splunk-8.0.2.1-f002026bad55-linux-2.6-x86_64-manifest'
    All installed files intact.
    Done
All preliminary checks passed.

Starting splunk server daemon (splunkd)...  
Generating a RSA private key
...............................................+++++
...............+++++
writing new private key to 'privKeySecure.pem'
-----
Signature ok
subject=/CN=aio/O=SplunkUser
Getting CA Private Key
writing RSA key
Done
 [  OK  ]

Waiting for web server at http://127.0.0.1:8000 to be available.... Done


If you get stuck, we're here to help.  
Look for answers here: http://docs.splunk.com

The Splunk web interface is at http://aio:8000


メッセージ内容から察するに、何かファイルを作成しているようです。
そこで、今回は初回起動時に何が作成されるか?ということをSplunkで調査してみました。

※本調査ではOSの監査設定変更を行います。ディストリビューションにより設定方法やログフォーマットに差異がある可能性がありますのでご注意ください。

調査時の環境

OS: Amazon Linux 2 (4.14.171-136.231.amzn2.x86_64)
Splunkバージョン: 8.0.2.1
Splunkインストールパス($SPLUNK_HOME): /opt/splunk

1.Splunk Enterpriseインストール

Splunkをインストールします。詳細手順は省略させていただきますが、今回はtgzファイルでインストールします。

SplunkEnterpriseを/opt/ディレクトリにインストールする
tar fvxz /tmp/splunk-8.0.2.1-f002026bad55-Linux-x86_64.tgz -C /opt/

2.監査ログ設定

Splunkの設定ディレクトリの変更情報を監査ログに出力させるため、OSの設定変更を行います。

監査ログを設定する(一時変更)
# 監査対象ディレクトリを追加する
auditctl -w /opt/splunk/etc/ -p wa -k etc_changes
# 設定が追加されたことを確認する
auditctl -l
# コマンド結果が出力されればOK。"No Rules"と表示される場合は設定が正しいかご確認ください。

3.Splunk Enterprise起動

Splunk Enterpriseを起動します。
※以下のコマンド例は、管理者パスワードをpasswordにしているためあまりセキュアではありません。必要に応じて任意のパスワードをご指定下さい。

SplunkEnterpriseを起動する
/opt/splunk/bin/splunk start --accept-license --seed-passwd password

4.監査ログ出力確認

手順2で設定した監査対象ディレクトリの変更情報がログに出力されているか確認します。

監査対象ディレクトリの変更情報がログに出力されているか確認する
grep /opt/splunk/etc/ /var/log/audit/audit.log | tail
# ログが1件以上出力されていればOKです。

5.監査ログ取り込み

監査ログをSplunkに永続的に取り込むよう設定します。
※調査目的のためmainインデックスに取り込む設定にしています。別インデックスに取り込みたい場合は引数に-index <index名>を指定します。
※CLIで取り込み設定を行っているため、設定情報は/opt/splunk/etc/apps/search/local/inputs.confに記録されます。

監査ログを永続的に取り込むよう設定する
# /opt/splunk/bin/splunk add monitor /var/log/audit/audit.log -auth admin:password

6.取り込み結果の確認

以上の設定が完了しましたら、Splunkに監査ログが取り込まれているはずですので、Splunk Enterpriseにログインし、サーチ文で取り込み結果を確認します。

監査ログをサーチする
sourcetype="linux_audit" type="PATH" nametype!="PARENT"
| rex field=name "^(?<directory>.*\/)?(?<file>.*)"
| eval directory=if(len(mode)==6,directory+file,directory),file=if(len(mode)==6,"",file)
| table _time,msg,nametype,mode,directory,file
| sort msg

サーチ文の解説

1行目・・・監査ログのうち、typeフィールドがPATHかつnametypeフィールドがPARENT ではないイベントをサーチしています。
2~3行目・・・nameフィールドに記録されているパス情報からディレクトリ名とファイル名をそれぞれ新規フィールド(directory,file)フィールドに設定しています。
4行目・・・サーチ結果から可視化に必要なフィールドだけを整形して表示しています。
5行目・・・msgフィールドにタイムスタンプとID情報が記録されているため、msgフィールド順に並べ替えて表示しています。

6.結果

今回環境した結果を一部抜粋いたします。

クリックすると展開して表示します。
image.png
image.png
image.png
image.png

7.分析

サーチ結果を分析したところ、Splunkは初回起動時に/opt/splunk/etc/ディレクトリにおいて以下の順番でファイル/ディレクトリの作成処理が動作していることが判りました。
※処理過程で何度か更新されるファイルもあるようですが、更新処理については割愛させていただきます。

Seq ファイル 備考
1 /opt/splunk/bin/../etc/splunk-launch.conf splunk-lanch.conf.defaultをコピーして作成される。
2 /opt/splunk/etc/licenses/download-trial/enttrial.lic 試用版ライセンスファイル。
3 /opt/splunk/etc/auth/splunk.secret Splunkの設定ファイルに保存されている機密情報(パスワードなど)の暗号化/複合化で使用するキーファイル。
4 /opt/splunk/etc/system/local/user-seed.conf 初期管理ユーザーとパスワードの設定ファイル(バージョン7.1以降)後続処理で/opt/splunk/etc/passwdが作成されたら削除される。
5 /opt/splunk/etc/system/local/inputs.conf データ取り込み設定でhostフィールドを指定しなかった場合のデフォルト値が設定される。
6 /opt/splunk/etc/system/local/server.conf
7 /opt/splunk/etc/system/local/migration.conf
8 /opt/splunk/etc/openldap/ldap.conf ldap.conf.defaultをコピーして作成される。
9 /opt/splunk/etc/auth/audit/private.pem
10 /opt/splunk/etc/auth/audit/public.pem
11 /opt/splunk/etc/auth/distServerKeys/private.pem 分散サーチの通信で使う秘密鍵。
12 /opt/splunk/etc/auth/distServerKeys/trusted.pem 分散サーチの通信で使う公開鍵。
13 /opt/splunk/etc/auth/ca.pem ルートCA証明書。ca.pem.defaultをコピーして作成。
14 /opt/splunk/etc/auth/cacert.pem ルートCA証明書。cacert.pem.defaultをコピーして作成される。証明書の内容はca.pemと同じだが、ファイル内にパスフレーズつき秘密鍵が追記されている。
15 /opt/splunk/etc/myinstall/splunkd.xml
16 /opt/splunk/etc/users/users.ini
17 /opt/splunk/etc/auth/serverkey.pem Splunkの内部通信の暗号化で使うサーバー証明書作成に必要な秘密鍵。初回起動完了後削除される。
18 /opt/splunk/etc/auth/serverreq.pem Splunkの内部通信の暗号化で使うサーバー証明書作成をルートCAに依頼するCSR。初回起動完了後削除される。
19 /opt/splunk/etc/auth/servercert.pem Splunkの内部通信の暗号化で使うサーバー証明書。Splunk自身が持つルートCAが発行する。初回起動完了後削除される。
20 /opt/splunk/etc/auth/server.pem Splunkの内部通信の暗号化で使うサーバー証明書。Splunk自身が持つルートCAが発行する。このサーバー証明書の有効期限は初回起動から3年で、CNは常にSplunkServerDefaultCertが設定される。
21 privKeySecure.pem SplunkのWeb画面の暗号化通信(https)で使うサーバー証明書作成に必要な秘密鍵。初回起動完了後削除される。
22 req.pem SplunkのWeb画面の暗号化通信(https)で使うサーバー証明書作成をCAに依頼するCSR。初回起動完了後削除される。
23 /opt/splunk/etc/auth/splunkweb/cert.pem SplunkのWeb画面の暗号化通信(https)で使うサーバー証明書。Splunk自身が持つルートCAが発行する。このサーバー証明書の有効期限は初回起動から3年で、CNはサーバーのホスト名が設定される。
24 ca.srl ルートCAが発行したサーバー証明書のシリアル番号が記録されたファイル。
25 /opt/splunk/etc/auth/splunkweb/privkey.pem SplunkのWeb画面の暗号化通信(https)で使うサーバー証明書の秘密鍵。
26 /opt/splunk/etc/instance.cfg Splunk固有ID(GUID)が記録されたファイル。
27 /opt/splunk/etc/passwd ユーザー情報。初回起動時は管理者ユーザーのみ記録されている。
28 /opt/splunk/etc/apps/learned/metadata/local.meta
29 /opt/splunk/etc/apps/learned/local/props.conf

余談

今回のきっかけは「Splunkの初回起動時に、Splunkの暗号化通信処理でデフォルトで使用されるサーバー証明書がどのように作成されるか」をみるためでしたが、結果的に他の設定ファイルの作成処理の流れも把握できました。デフォルトの証明書に関する調査はまた情報を整理して投稿したいと思います。

ここまで読んでいただき、誠にありがとうございました。

参考

6.6.AUDITログファイルについて
Redhat公式のマニュアルですが、Auditログの仕様情報が記載されています。ただし、AmazonLinux2はRhel7ベースであるものの、若干ログのフォーマット(フィールド)がチューニングされているようです。

auditdでLinuxのファイル改竄検知を行う

What is the splunk.secret file, and is it possible to change it?
splunk.secretとはなんぞや?という疑問に関するSpunk公式コミュニティサイトのQAです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Splunkにaudit.logを取り込んでSplunk初回起動時の挙動を調べる

はじめに

Splunk Enterpriseをはじめて起動すると画面に色んな処理メッセージが出力されます。

初回起動メッセージ例(クリックすると展開します)
# /opt/splunk/bin/splunk start --accept-license --seed-passwd password

This appears to be your first time running this version of Splunk.
Copying '/opt/splunk/etc/openldap/ldap.conf.default' to '/opt/splunk/etc/openldap/ldap.conf'.
Generating RSA private key, 2048 bit long modulus
.................................+++++
...........................+++++
e is 65537 (0x10001)
writing RSA key

Generating RSA private key, 2048 bit long modulus
.............................................................................+++++
.................................................................+++++
e is 65537 (0x10001)
writing RSA key

Moving '/opt/splunk/share/splunk/search_mrsparkle/modules.new' to '/opt/splunk/share/splunk/search_mrsparkle/modules'.

Splunk> See your world.  Maybe wish you hadn't.

Checking prerequisites...
    Checking http port [8000]: open
    Checking mgmt port [8089]: open
    Checking appserver port [127.0.0.1:8065]: open
    Checking kvstore port [8191]: open
    Checking configuration... Done.
        Creating: /opt/splunk/var/lib/splunk
        Creating: /opt/splunk/var/run/splunk
        Creating: /opt/splunk/var/run/splunk/appserver/i18n
        Creating: /opt/splunk/var/run/splunk/appserver/modules/static/css
        Creating: /opt/splunk/var/run/splunk/upload
        Creating: /opt/splunk/var/run/splunk/search_telemetry
        Creating: /opt/splunk/var/spool/splunk
        Creating: /opt/splunk/var/spool/dirmoncache
        Creating: /opt/splunk/var/lib/splunk/authDb
        Creating: /opt/splunk/var/lib/splunk/hashDb
New certs have been generated in '/opt/splunk/etc/auth'.
    Checking critical directories...    Done
    Checking indexes...
        Validated: _audit _internal _introspection _metrics _telemetry _thefishbucket history main summary
    Done
    Checking filesystem compatibility...  Done
    Checking conf files for problems...
    Done
    Checking default conf files for edits...
    Validating installed files against hashes from '/opt/splunk/splunk-8.0.2.1-f002026bad55-linux-2.6-x86_64-manifest'
    All installed files intact.
    Done
All preliminary checks passed.

Starting splunk server daemon (splunkd)...  
Generating a RSA private key
...............................................+++++
...............+++++
writing new private key to 'privKeySecure.pem'
-----
Signature ok
subject=/CN=aio/O=SplunkUser
Getting CA Private Key
writing RSA key
Done
 [  OK  ]

Waiting for web server at http://127.0.0.1:8000 to be available.... Done


If you get stuck, we're here to help.  
Look for answers here: http://docs.splunk.com

The Splunk web interface is at http://aio:8000


メッセージ内容から察するに、何かファイルを作成しているようです。
そこで、今回は初回起動時に何が作成されるか?ということをSplunkで調査してみました。

※本調査ではOSの監査設定変更を行います。ディストリビューションにより設定方法やログフォーマットに差異がある可能性がありますのでご注意ください。

調査時の環境

OS: Amazon Linux 2 (4.14.171-136.231.amzn2.x86_64)
Splunkバージョン: 8.0.2.1
Splunkインストールパス($SPLUNK_HOME): /opt/splunk

1.Splunk Enterpriseインストール

Splunkをインストールします。詳細手順は省略させていただきますが、今回はtgzファイルでインストールします。

SplunkEnterpriseを/opt/ディレクトリにインストールする
tar fvxz /tmp/splunk-8.0.2.1-f002026bad55-Linux-x86_64.tgz -C /opt/

2.監査ログ出力設定

Splunkの設定ディレクトリの変更情報を監査ログに出力させるため、OSの設定変更を行います。

監査ログを設定する(一時変更)
# 監査対象ディレクトリを追加する
auditctl -w /opt/splunk/etc/ -p wa -k etc_changes
# 設定が追加されたことを確認する
auditctl -l
# コマンド結果が出力されればOK。"No rules"と表示される場合は設定が正しいかご確認ください。

3.Splunk Enterprise起動

Splunk Enterpriseを起動します。
※以下のコマンド例は、管理者パスワードをpasswordにしているためあまりセキュアではありません。必要に応じて任意のパスワードをご指定下さい。

SplunkEnterpriseを起動する
/opt/splunk/bin/splunk start --accept-license --seed-passwd password

4.監査ログ出力確認

手順2で設定した監査対象ディレクトリの変更情報がログに出力されているか確認します。

監査対象ディレクトリの変更情報がログに出力されているか確認する
grep /opt/splunk/etc/ /var/log/audit/audit.log | tail
# ログが1件以上出力されていればOKです。

5.監査ログ取り込み

監査ログをSplunkに永続的に取り込むよう設定します。
※調査目的のためmainインデックスに取り込む設定にしています。別インデックスに取り込みたい場合は引数に-index <index名>を指定します。
※CLIで取り込み設定を行っているため、設定情報は/opt/splunk/etc/apps/search/local/inputs.confに記録されます。

監査ログを永続的に取り込むよう設定する
# /opt/splunk/bin/splunk add monitor /var/log/audit/audit.log -auth admin:password

6.取り込み結果の確認

以上の設定が完了しましたら、Splunkに監査ログが取り込まれているはずですので、Splunk Enterpriseにログインし、サーチ文で取り込み結果を確認します。

監査ログをサーチする
sourcetype="linux_audit" type="PATH" nametype!="PARENT"
| rex field=name "^(?<directory>.*\/)?(?<file>.*)"
| eval directory=if(len(mode)==6,directory+file,directory),file=if(len(mode)==6,"",file)
| table _time,msg,nametype,mode,directory,file
| sort msg

サーチ文の解説

1行目・・・監査ログのうち、typeフィールドがPATHかつnametypeフィールドがPARENT ではないイベントをサーチしています。
2~3行目・・・nameフィールドに記録されているパス情報からディレクトリ名とファイル名をそれぞれ新規フィールド(directory,file)フィールドに設定しています。
4行目・・・サーチ結果から可視化に必要なフィールドだけを整形して表示しています。
5行目・・・msgフィールドにタイムスタンプとID情報が記録されているため、msgフィールド順に並べ替えて表示しています。

7.結果

今回の環境でサーチした結果を一部抜粋して掲載いたします。

クリックすると展開して表示します。
image.png
image.png
image.png
image.png

8.分析

サーチ結果を分析したところ、Splunkは初回起動時に/opt/splunk/etc/ディレクトリにおいて以下の順番でファイル/ディレクトリの作成処理が動作していることが判りました。
※処理過程で何度か更新されるファイルもあるようですが、更新処理については割愛させていただきます。

Seq ファイル 備考
1 /opt/splunk/bin/../etc/splunk-launch.conf splunk-lanch.conf.defaultからコピーして作成される。
2 /opt/splunk/etc/licenses/download-trial/enttrial.lic 試用版ライセンスファイル。/opt/splunk/splunk-enttrial.licからコピーして作成される。
3 /opt/splunk/etc/auth/splunk.secret Splunkの設定ファイルに保存されている機密情報(パスワードなど)の暗号化/複合化で使用するキーファイル。
4 /opt/splunk/etc/system/local/user-seed.conf 初期管理ユーザーとパスワードの設定ファイル(バージョン7.1以降)後続処理で/opt/splunk/etc/passwdが作成されたら削除される。
5 /opt/splunk/etc/system/local/inputs.conf データ取り込み設定でhostフィールドを指定しなかった場合のデフォルト値が設定される。
6 /opt/splunk/etc/system/local/server.conf
7 /opt/splunk/etc/system/local/migration.conf
8 /opt/splunk/etc/openldap/ldap.conf ldap.conf.defaultからコピーして作成される。
9 /opt/splunk/etc/auth/audit/private.pem
10 /opt/splunk/etc/auth/audit/public.pem
11 /opt/splunk/etc/auth/distServerKeys/private.pem 分散サーチの通信で使う秘密鍵。
12 /opt/splunk/etc/auth/distServerKeys/trusted.pem 分散サーチの通信で使う公開鍵。
13 /opt/splunk/etc/auth/ca.pem ルートCA証明書。ca.pem.defaultからコピーして作成。
14 /opt/splunk/etc/auth/cacert.pem ルートCA証明書。cacert.pem.defaultからコピーして作成される。証明書の内容はca.pemと同じだが、ファイル内にパスフレーズつき秘密鍵が追記されている。
15 /opt/splunk/etc/myinstall/splunkd.xml
16 /opt/splunk/etc/users/users.ini
17 /opt/splunk/etc/auth/serverkey.pem Splunkの内部通信の暗号化で使うサーバー証明書作成に必要な秘密鍵。初初回起動処理中に削除される。
18 /opt/splunk/etc/auth/serverreq.pem Splunkの内部通信の暗号化で使うサーバー証明書作成をルートCAに依頼するCSR。初回起動処理中に削除される。
19 /opt/splunk/etc/auth/servercert.pem Splunkの内部通信の暗号化で使うサーバー証明書。Splunk自身が持つルートCAが発行する。初回起動処理中に削除される。
20 /opt/splunk/etc/auth/server.pem Splunkの内部通信の暗号化で使うサーバー証明書。このサーバー証明書の有効期限は初回起動から3年で、CNは常にSplunkServerDefaultCertが設定される。 このファイルにはサーバー証明書の他にサーバーの秘密鍵とルートCA証明書情報が追記されている。
21 privKeySecure.pem SplunkのWeb画面の暗号化通信(https)で使うサーバー証明書作成に必要な秘密鍵。初回起動処理中に削除される。
22 req.pem SplunkのWeb画面の暗号化通信(https)で使うサーバー証明書作成をCAに依頼するCSR。初回起動処理中に削除される。
23 /opt/splunk/etc/auth/splunkweb/cert.pem SplunkのWeb画面の暗号化通信(https)で使うサーバー証明書。Splunk自身が持つルートCAが発行する。このサーバー証明書の有効期限は初回起動から3年で、CNはサーバーのホスト名が設定される。
24 ca.srl ルートCAが発行したサーバー証明書のシリアル番号が記録されたファイル。
25 /opt/splunk/etc/auth/splunkweb/privkey.pem SplunkのWeb画面の暗号化通信(https)で使うサーバー証明書の秘密鍵。
26 /opt/splunk/etc/instance.cfg Splunk固有ID(GUID)が記録されたファイル。
27 /opt/splunk/etc/passwd ユーザー情報。初回起動時は管理者ユーザーのみ記録されている。
28 /opt/splunk/etc/apps/learned/metadata/local.meta
29 /opt/splunk/etc/apps/learned/local/props.conf

余談

今回のきっかけは「Splunkの初回起動時に、Splunkの暗号化通信処理でデフォルトで使用されるサーバー証明書がどのように作成されるか」をみるためでしたが、結果的に他の設定ファイルの作成処理の流れも把握できました。デフォルトの証明書に関する調査はまた情報を整理して投稿したいと思います。

ここまで読んでいただき、誠にありがとうございました。

参考

6.6.AUDITログファイルについて
Redhat公式のマニュアルですが、Auditログの仕様情報が記載されています。ただし、AmazonLinux2はRhel7ベースであるものの、若干ログのフォーマット(フィールド)がチューニングされているようです。

auditdでLinuxのファイル改竄検知を行う

What is the splunk.secret file, and is it possible to change it?
splunk.secretとはなんぞや?という疑問に関するSpunk公式コミュニティサイトのQAです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

適当にansibleでrootパスワードを変えようとしたらアクセスできなくなった件

下記のような適当なtaskを書いたら、rootにログインできなくなり、
ほかのユーザを作成していなかった為、何もできなくなってしまいました。。。

ansible:2.9.3
ターゲットノードOS:CentOS7.7

root_passwd_change.yml
---
- hosts: test
  become: true
  tasks:
    - name: passwd change
      user:
        name: root
        password: newpassword

これを実行すると、

[root@ansible test]# ansible-playbook -i host root_passwd_change.yml

PLAY [test] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.1.136]

TASK [passwd change] ***********************************************************
[WARNING]: The input password appears not to have been hashed. The 'password'
argument must be encrypted for this module to work properly.

changed: [192.168.1.136]

PLAY RECAP *********************************************************************
192.168.1.136              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[WARNING]: The input password appears not to have been hashed. The 'password'
argument must be encrypted for this module to work properly.

で怒られますが、OKの記述がでて、変更できたように見えます。
ですが実際は
想定しているパスワードだとsshできなくなり、コンソールからのログインもできなくなります。
playbook再度実行しても変更できなくなるので、レスキューモードでパスワードの再設定などが必要になります。

[root@ansible test]# ansible-playbook -i host root_passwd_change.yml

PLAY [test] *********************************************************************

TASK [Gathering Facts] *********************************************************
fatal: [192.168.1.136]: UNREACHABLE! => {"changed": false, "msg": "Invalid/incorrect password: Permission denied, please try again.", "unreachable": true}

PLAY RECAP *********************************************************************
192.168.1.136              : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0

原因

[WARNING]: The input password appears not to have been hashed. The 'password'
argument must be encrypted for this module to work properly.

で怒られている通りパスワードがhashされないでべた書きされているからです。
以下のように書けば想定通りに変更できます。

root_passwd_change.yml
---
- hosts: test
  become: true
  tasks:
    - name: passwd change
      user:
        name: root
        password:  "{{ 'newpassword' | password_hash('sha512') }}"

下記ドキュメントに記載の通りにhash化して書いてあげないといけませんでした。
※Linuxの/etc/shadowはsha512形式の暗号化してあげないといけない

https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#hashing-filters

上記を実行すると、

[root@ansible test]# ansible-playbook -i host root_passwd_change_fixed.yml

PLAY [test] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.1.136]

TASK [passwd change] ***********************************************************
changed: [192.168.1.136]

PLAY RECAP *********************************************************************
192.168.1.136              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

想定していた通りに変更できました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む