- 投稿日:2020-03-14T19:25:16+09:00
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 -printbash変数
シェル変数
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) ALLsudo を使って、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 プロセスIDTERMは終了。
プログラムの種類によってはTERMシグナルを受信したときに現在の状態を保存したり、一時ファイルを削除したりして終了するので、まずはkillしてそのあと強制終了させたほうがよいリダイレクト
標準エラー出力。プログラムのエラーメッセージを出力するために資料
標準エラー出力のリダイレクトls aaaaa 2> aaa.txt標準出力と標準エラー出力をまとめる
ls aaaa > aaaa.txt 2>&1標準出力をaaaa.txtへ。標準エラー出力を1とおなじものへ。
&1は標準出力を表す/dev/null
エラーメッセージを非表示にする
ls / /xxxxx 2> /dev/nullgrep
正規表現は``で囲む。
grep 't[ef]'拡張正規表現
使えるメタ文字を増やした拡張正規表現
grep -E で使える。 -Eをつけないと正規表現
grep -E ()
- 投稿日:2020-03-14T17:04:14+09:00
wsl2をインストールしてwindows上でlinuxを使いこなそう
内です。前回の記事では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ビルドをインストール
- [設定]
- [更新とセキュリティ]
- [Windows Insider Program] の順に選択し、[開始する]をクリックして最新のビルドにアクセスします。 指示に従いプレビューを受け取れるようにして、再起動を実施。
この手順はmicrosoft公式にのっているので、従ってサクッとPreviewビルドをインストールする。
ポイント:デフォルトでプレビュービルドを受け取る頻度が「ファストリング」となってますが、
これは、以降も新しい機能を1週間単位でインストールすることになり、その度にアップデートと再起動でパソコンが
使えなくなる時間が増えるので、スローリング(1ヶ月ごと)を選択するほうがお勧めです。その後、Windows 10 ビルド18917以降になっていることをコマンドプロンプトを立ち上げて、以下コマンドで確認してください。
コマンドプロンプト:
C:\Users\uchi>ver Microsoft Windows [Version 10.0.19037.1]wsl2が動くようにwindowsの仮想化機能を有効化
そして以下、windowsの仮想化機能を有効化するコマンドを実行
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform実行後に有効化するためにコンピュータを再起動してください。
wsl1含めてwslを初めて有効化する場合は、
起動したpowershellで以下コマンドを入力します。Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linuxwsl2に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> 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 2wslのバージョン再確認
powershell:PS C:\Users\uchi> 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を実行し実行出来ている図
wsl2のlinux kernelは以下githubでソース公開されてます。
WSL2-Linux-Kernelwsl2をWindowsにインストールする手順まとめ
- wsl2にするとwsl1で使えなかったコマンドやプログラムがいろいろ使えるようになるよ。
- でも現時点ではWindows 10 Insider Preview ビルドでのみの提供だからwindowsが不安定になるよ。
- だからバックアップとってね。
- wsl1と2同居ができて使い分けて便利だね
- 投稿日:2020-03-14T16:10:39+09:00
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
- 投稿日:2020-03-14T14:30:27+09:00
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/splunk1.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 password4.監査ログ出力確認
手順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.結果
今回環境した結果を一部抜粋いたします。
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ベースであるものの、若干ログのフォーマット(フィールド)がチューニングされているようです。What is the splunk.secret file, and is it possible to change it?
splunk.secret
とはなんぞや?という疑問に関するSpunk公式コミュニティサイトのQAです。
- 投稿日:2020-03-14T14:30:27+09:00
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/splunk1.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 password4.監査ログ出力確認
手順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.結果
今回の環境でサーチした結果を一部抜粋して掲載いたします。
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ベースであるものの、若干ログのフォーマット(フィールド)がチューニングされているようです。What is the splunk.secret file, and is it possible to change it?
splunk.secret
とはなんぞや?という疑問に関するSpunk公式コミュニティサイトのQAです。
- 投稿日:2020-03-14T13:04:45+09:00
適当にansibleでrootパスワードを変えようとしたらアクセスできなくなった件
下記のような適当なtaskを書いたら、rootにログインできなくなり、
ほかのユーザを作成していなかった為、何もできなくなってしまいました。。。ansible:2.9.3
ターゲットノードOS:CentOS7.7root_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想定していた通りに変更できました。