僕とコードとブルーハワイ

omega (@equal_001) の日記

Lynis - セキュリティハードニングツールを使ってみる

Lynisとは

セキュリティハードニングツールの一つ. Linuxだけしか使えないと思ったらmacOSWindowsにも対応していた.
今回はLynisを使ってみた作業ログを書き残す.

環境: dockerで立てたdebianサーバ (versionなどは下の方に載っけてある)

Lynis install

特に難しいことはなく, apt-getで入れることができた.

root@edbc62cbef6a:/app# apt-get install lynis
root@edbc62cbef6a:/app# lynis --version
1.6.3

lynisでセキュリティチェックしてみる

lynis --check-all と -quickがあった.
最初なので --check-all で一つずつ確かめてみていった. -quickにすると、Enter入力しなくても勝手に結果が標準出力される.
項目が多いので最初と結果だけ. 最新を入れたかったけどこのosのversionだと1.6.3しか入らないようだ.

[+] Initializing program
------------------------------------
  - Detecting OS...                                           [ DONE ]
  - Clearing log file (/var/log/lynis.log)...                 [ DONE ]

  ---------------------------------------------------
  Program version:           1.6.3
  Operating system:          Linux
  Operating system name:     Debian
  Operating system version:  8.11
  Kernel version:            4.9.93
  Hardware platform:         x86_64
  Virtual machine:           Unknown
  Hostname:                  edbc62cbef6a
  Auditor:                   [Unknown]
  Profile:                   /etc/lynis/default.prf
  Log file:                  /var/log/lynis.log
  Report file:               /var/log/lynis-report.dat
  Report version:            1.0
  Plugin directory:          /etc/lynis/plugins
  ---------------------------------------------------

項目が多いので最初と結果だけ. Warningsが3つあった.
今回は一番上の syslog daemon が無いというWarningをやっつけてみる.

  -[ Lynis 1.6.3 Results ]-

  Warnings:
  ----------------------------
  - No syslog daemon found [LOGG-2130]
      https://cisofy.com/controls/LOGG-2130/

  - No swap partion found in /etc/fstab [FILE-6332]
      http://cisofy.com/controls/FILE-6332/

  - klogd is not running, which could lead to missing kernel messages in log files [LOGG-2138]
      http://cisofy.com/controls/LOGG-2138/


  Follow-up:
  ----------------------------
  - Check the logfile (less /var/log/lynis.log)
  - Read security controls texts (http://cisofy.com)
  - Use --upload to upload data (Lynis Enterprise users)

セキュリティの問題を解決してみる

基本手順

基本的には, var/log/lynis.log/var/log/lynis-report.dat を見てsuggestされたアクションを取っていく.

早速 /var/log/lynis-report.dat をLOGG-2130でgrepしてみると, suggestion項目 に syslogdを起動しろという内容が書いてあった. その通りのアクションを取っていくことにする.

  Check if any syslog daemon is running and correctly configured [LOGG-2130]
    https://cisofy.com/controls/LOGG-2130/

例) syslogdを導入する

調べたらそもそもsyslogdが入っていなかった. なので, syslogdをinstallするところからのスタート.

syslogdでinstallしてみたらinetutils-syslogdがサジェストされた.
これはDeianのsyslogd packageの名前だった.
Debian -- sid の inetutils-syslogd パッケージに関する詳細

root@edbc62cbef6a:/app# apt-get install syslogd
 : 
Package syslogd is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
  inetutils-syslogd

install後, 無事にsyslogdが入った.

root@edbc62cbef6a:/app# apt-get install inetutils-syslogd
Reading package lists... Done
Building dependency tree
:
Processing triggers for systemd (215-17+deb8u7) ...

root@edbc62cbef6a:/app# which inetutils-syslogd
root@edbc62cbef6a:/app# which syslogd
/usr/sbin/syslogd
# 実行
root@edbc62cbef6a:/app# /usr/sbin/syslogd
# 起動した
root@edbc62cbef6a:/app# ps aux | grep syslogd | grep -v grep
root     32308  0.0  0.0   8440  1828 ?        S    17:45   0:00 /usr/sbin/syslogd

syslogd導入前のlogディレクト

root@edbc62cbef6a:/app# ls /var/log
alternatives.log  apt  btmp  dmesg  dpkg.log  faillog  fontconfig.log  fsck  lastlog  lynis-report.dat	lynis.log  wtmp

syslogd導入後のlogディレクトリ. log fileが色々増えている.

root@edbc62cbef6a:/app# ls /var/log
alternatives.log  auth.log  daemon.log	dmesg	  faillog	  fsck	    lastlog  lynis-report.dat  mail.err   mail.log   messages  syslog	 uucp.log
apt		  btmp	    debug	dpkg.log  fontconfig.log  kern.log  lpr.log  lynis.log	       mail.info  mail.warn  news      user.log  wtmp

もう一度セキュリティチェックをする

今回は --quick で実行する.
Warningが減っていた. どうやらセキュリティハードニングの第一歩を踏み出せたらしい.

  -[ Lynis 1.6.3 Results ]-

  Warnings:
  ----------------------------
  - No swap partion found in /etc/fstab [FILE-6332]
      http://cisofy.com/controls/FILE-6332/

  - klogd is not running, which could lead to missing kernel messages in log files [LOGG-2138]
      http://cisofy.com/controls/LOGG-2138/

感想

  • 結果が見やすい. 項目ごとにチェックした結果を表示してくれる.
  • Suggestionsを出してくれるのがありがたい. 解決の糸口を一つでも提示してもらえるだけでも調べる時間が短縮されて助かる.
  • 無料枠でもそれなりに使えそうではあった.
  • セキュリティとかOSについて詳しくないとWarningsに出てくる項目の脅威度がいまいちわからない. そういう場合はLynis Enterprise Suiteでサポート受けるとかになりそう.

Python boot camp Kyoto にTAとして参加してきたよ

TAしてきました

pyconjp.connpass.com

Python boot campって何?

Python Boot Camp(初心者向けPythonチュートリアル) — PyCon JP に書いてあります.

抜粋:

Pythonの普及のため、一般社団法人PyCon JPは日本各地での初心者向けPythonチュートリアルイベントです。

Python Boot Campの目的

  • 日本各地でのPythonを盛りあげたい
  • 各地のPythonistaとの連携強化
  • ゆくゆくは地域PyConの実施

これまで東京でしか開催できていなかったチュートリアルを日本各地で開催することが目的です。

直近では, 9/8(土)に山形, 9/28(土)に沖縄 で開催されます.

参加のキッカケ

京都にいる友人から「PyCamp 京都やるぞ!」と来たので, 「日程調整します!」と即答した.
調整する予定特に無かったので, すぐ新幹線と宿を押さえた. 

PyCamp Kyoto 当日

togetterにまとめがあったのでペタリ. まとめ作成ありがとうございます!
イベントの様子はこちらを見ると良いです.
togetter.com

イベント中に上がった質問

TAしながらだったので全てメモしきれていないけど, できる範囲で残したもの.
スタッフ・TAで他にこんな質問がありましたというのがあればcommentに書いてもらえると嬉しいです.
gist.github.com

感想

今回は質問がとても多かったように感じました. とても良いことだと思います.
積極的に質問をすることで学習効率も高くなるし, こちらもやりがいがあって嬉しいです.


運営スタッフの皆さま, 参加者の皆さま, お疲れ様でした!

余談

ちょうどこの日, アップルストア京都 が 10:00からオープンだったので朝6:30くらいから並んでいた.
積読本を消化したりPyCampの資料読み返したりしていたらすぐに時間が過ぎた.

前日の夜には既に何人か並んでいて, 気合入っているなという感じ.
Twitter観測していたら, 並んでいた何人かが路上で焼き鳥を焼いていたという写真が上がっていた. 自由過ぎる.

月イチくらいで四人で七輪を囲んで雑な会話をしたい

前はMTGや飲み会でたくさん意見を喋るほうだったけど, 最近は割と黙って聴くことが多くなった.
どっちが良いということはないけど, 話を聞いてもらいたいという欲求が発散できてないから多分本当は話したがりなんだと思う.
どうでも良いことでも真面目な話でも, ちゃんと最後まで話しを聴いて受け止めてくれる人はとてもありがたい. そういう態度を取ってくれる人だと, こっちも話をちゃんと聞くか〜となる. ちゃんと聴いてくれないで何度も話を遮ったりする人は「もうお互い自由に振る舞いましょう」という感じになる. それで成り立てば吉, それが駄目だったらまずお前がちゃんと話を聴く姿勢を持てよとなって, 変な空気になり, 多分そこでコミュニケーションは終了する.
世の中, ちゃんと話を聴いてくれる人というのは少ない.

私は話の腰を折られるのが大嫌いで, 話してる最中に微妙なタイミングでウェイトレスがご飯を運んできて話が中断され, 相手がその話はもういいやみたいな空気になると食欲も失せて即退店したくなる. 人生でそういうことたくさんあってもういいやとなって以来, お店では内容が長くなるような真面目そうな会話は自分からは段々しなくなった. 「あ、こいつちゃんと話聴いてくれないタイプだ」と思った瞬間から, 料理美味しいですねーとかしか喋らなくなる. 一緒にテーブルに座っている人がたまたまちゃんと最後まで話を聴いてくれる属性を持った人の場合は「それで, さっきの続きは〜」みたいな流れになり, 最後まで自分の思ったことを伝えることができるからイラッとしなくて済む. そういう人とご飯に行くと, 自分から話を開始する回数と発話時間が圧倒的に長くなる.
親や付き合いの長い友人だとそういうのを気にせずにお互い言いたいこといって雑に話を聴く感じになるけれど, 社会に出た先で出会った人たちでそういう感じで会話できることはあまり少ない.

昨日の社の飲み会は結構良くて, 普段仕事上の関わりも雑談もすること無いメンバーなのに, お互いが喋りたいタイミングで言いたいこと言うのに皆それを楽しんでいたし私も一切不愉快にならなかった. でも会話は程よくちゃんと聴いてくれて, レスポンスもあるしで最高だった. 昨日のアレは, みんな気が合って重くない感じに気を使いあえる奇跡的な集まりだったんだなぁと朝起きたときにふと思った.
人数の問題もあるかも知れない. 昨日は四人だったから会話場の狭さがちょうどよかった気がする.
空間にも要因があるかも. お店も赤ちょうちん系で親しみやすい空間でもあった. 皆の席も比較的近めで, 七輪を囲むスタイルというのも良かった.

今度からいい感じに打ち解けたいときは4人くらいで七輪を囲むスタイルをやっていこうかな.

昨日はメンタルが最悪に近かかったので気分転換に帰り道に本屋へ寄った.

昔から本が大好きで, 本棚を眺めていると良い方向に気持ちが紛れたりする.
今回は, 今解決したい問題について考えながらタイトルを眺めて「この本になにかヒントが書いてありそう」というものを発見したら自由に手に取ってみた.
本屋や図書館は私の知らないことを知っている偉大な先生がたくさんいて, 誰でも自由にその道の門を叩け, 正しく吸収すればいかようにも知識を使えるようになる, というイメージ. だから大好き.


色々見て回った上, 以下の二冊を買った.


「いちいち気にしない心が手に入る本」は, ネガティブ思考が身に付いて自分で自分を苦しめているみたいな状況をどうにかしたくて買った. これまた気分転換に, ランチ時間を使ってカフェで一気に読み終えた.
装丁について, 文字が大きく, ポイントと解説が明確に分かれていて読みやすかった.
内容について, 「なんかその手法聴いたことある, 改めて言われてみるとたしかにそう考えたら良さそう!」ということが多めだった. これは悪いことではなく, なんか知ってるけどちゃんと行動に移そう!となる気持ちにさせてくれるところが凄い. この本はそういう気にさせてくれる様になっていた.
本書にまずはなんでも試してみよう!と書かれていたので, 本を読みながら本に書かれていることで今すぐできることをやってみていた.
どういうことしたかというと, 姿勢を良くしながら口角上げて笑顔の表情を作り, 本を読んでいるときに嫌なこと思い出しはじめたら気を紛らわすおまじない行動を必ずするというのをやっていた.
あと「健全な魂は健全な肉体に宿る」というのは本当にそうだと最近実感したので, 毎日少しでいいから運動しようと思った. 10分間運動するだけでも抑うつ物質が脳内で生成されるらしい. 人間って結構便利な作りしてるね.

「思考は現実化する〈上〉」はまだ読んでない. 前からタイトルは知っていて気にはなっていた. 物理本で読みたかったのでつい買ってしまった. 気が向いたら読もうかなという感じ.

2018(前半) -> 2018(後半)

振り返り.

2018(前半)

Kotlinでまともに動作するWebアプリケーションを作ってみる

50/100点
同僚と週イチで開発をしていたけど, お互い緊急対応だったりでリスケが結構あって思ったよりも開発が進まなかった. 週イチはちょっと少なかったかな.
技術選定, アプリケーションの設計からKotlinで簡易login機能の開発など色々できて楽しかった.
現在は趣旨を変える+仕事的なアレでAndroidアプリをKotlinで開発するという方針に変えたので, 一旦こちらの開発はstopしそう. でももったいないから時間を見つけてPRを出し続けたい.

Real World HTTPを業務で使えるレベルまで理解する

20/100点
業務で活用する部分があまりなかった. 後半は色々お世話になると思うので活用していきたい.

いくつかのDesign patternを"使える"ようにする

20/100点
これも評価が難しいけど, そんなに使う場面無かったのとあまり勉強進まなかった.

Djangoのコードを読んでWeb Application Frameworkへの理解を深める

70/100点
仕事上自動的にコードを読まざるを得なかったのでそれなりに知識は増えた. 学んだことをBlogとかにまとめれば良かったかなとちょっと反省.

Frontendのレベルを人並みにまで上げる

10/100点
ほぼほぼフロントエンド触ることがない半年だった.
Vue.jsのチュートリアルをやって同僚のVueのコードをレビューしたくらい.

総評

40/100点
やりたいこと詰め込みすぎた. あとプライベートで色々辛みがあってメンタル的に個人素振りの時間が取れなかったというのがある. Kotlin開発はちょっとずつ前進しているので良い感じ.
全体的にもう少し学習スピードを上げていきたい.

2018(後半)

2018年(後半)でやること・やりたいこと

  • Android開発で学ぶKotlin
    • 社のAndroid開発に小さなPRを投げてmergeできるくらいになったら達成でいいかな
  • Real World HTTPを業務で使えるレベルまで理解する
    • 書かれた内容が8割くらい理解できて人に説明できるくらいならまぁ達成でもいいかな
  • Golang リモートペアプロ
    • 友人とやろうぜという話になったのでやってみる

  • 旅行たくさんする
  • 美味しいご飯いっぱいたべる
  • 自分の時間を大事にする

Android開発でKotlinを学ぶログ1 開発環境の準備とAndroid projectとView, Layout, Click Event

今日から同僚にAndroid開発の基本を伝授してもらえることになったので忘却録を書いていく.
Kotlinの勉強も合わせて行うので, 以後使用言語はKotlinがメインとなる.

開発環境の準備

近年では Android Studio が主流とのことなのでこれをInstallした. Downloadにちょっと時間がかかるくらいで特に躓いた点は無し.

Android Project 概要

MainActivity.kt

  • onCreate()
    • こいつがエントリポイント, 一番最初に呼び出される
    • MainAtivityは画面描画する前に呼び出される
  • setContentView(R.layout.activity_main)
    • ここでres配下のxmlファイルが呼び出される
    • 内部でres配下にあるxmlファイル群に一つずつidをふっていて, setContentView() にID群(R.layout.activity_main)が渡された結果, 初動のUI表示の実行がされる.
    • つまりこれをコメントアウトすると真っ白な画面が表示される.
    • 内部的に一意な数値として扱えるメリットがある

res/layout

  • UIの定義が書かれたxml fileを配置する場所
  • ここにButtonとかTextとかの定義をガンガン書いていく

String Resource (res/values/strings.xml)

  • layout や Activity から呼び出し可能なresourcesを管理するfile
  • 例えば 0 と書いておくと initial_text というIDでTextViewに初期代入してやると起動時に0が表示される
  • 初期表示やローカライズ(多言語対応)するときなどに使うと便利

UI定義でよく使われるものたち

基本的に各ViewにIDを付けてActiviryで呼び出すという形っぽい.

よく使われるLayout

1 Layoutにつき1 XMLというイメージでやることが多いらしい.
ただし, 入れ子にもできるし他のxmlに外出ししてincludeしたりできる.
本格的にfileを分けたりなんだりするとCustomView?という概念がでてくるらしいけど長い話になるのでまた今度と言われた.

  • Linear Layout
    • vertical: 上から下, holizone: 右から左 の繰り返しでコンテンツ表示するlayout
    • layout_widthでよく使われる単位はdp(端末毎に違うpixcelを解消するために生まれた単位. これを使うとどの端末でも大体同じ大きさになる) , fontはsp(スマホ端末で文字大きさ変えても反映される)
  • Relative layout
    • 親に対する子の要素を決めて配置できる. cssのrelativeみたいなやつ
  • Frame layout
    • point 0.0からframeを重ねていくイメージの配置方法
    • 上のメニューバーを固定しつつメインコンテンツをスクロールするみたいなものを作りたいときに便利だったり

よく使われるView

  • Text View
    • 編集できない, ただ表示するだけのView
    • Pythonistaでいうlabelにあたる
  • EditText View
    • 編集可能な方のText View
  • Image View
    • その名の通り画像を表示するView
  • Button
    • その名の通り, ボタンのネイティブUIを呼び出したいときに使うやつ
    • これも実はVIewの仲間らしい

Click Event

  • Buttonだけかと思われがちだが, Viewならどこでもclick eventが取れる
  • 方法は簡単で, Viewにidを付けてActivity側でsetOnClickListener()するとeventが取れる

Activity_main.xml

<Button
        android:id="@+id/count"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/count_label" />

MainActivity.kt

val count_button: Button = this.findViewById(R.id.count)
count_button.setOnClickListener { view: View? ->
    Log.d("MainActivity", "this is log")  // count buttonが押される度にconsole logに"this is log"と表示される
}

Kotlin学びポイント

Buttonを押すと+=するCounterの実装をしたのだけれど, 私は愚直に実装してしまった.

val count_button: Button = this.findViewById(R.id.count)
val text: TextView = this.findViewById(R.id.result)
var count = 0
count_button.setOnClickListener { view: View? ->
    count += 1
    text.text = count.toString()
}

同僚はおしゃれなコードを書いていた.

val text = this.findViewById<TextView>(R.id.count_text)
var count: Int by Delegates.observable(0) { _, _, new ->
    text.text = new.toString()
}
this.findViewById<Button>(R.id.count_up_button).setOnClickListener {
    count = count + 1 
}

Observable property をうまく使った例.

Delegates.observable() は、2つの引数を取ります。初期値と修正のためのハンドラです。ハンドラは(割り当てが行われた 後 に)プロパティに割り当てるたびに呼び出されます。それには3つのパラメータがあり、割り当てられているプロパティ、古い値、そして新しい値です

_, _, new は prop, old, new の順番で値が入れられていて, 今回は count+= された結果, つまり最新のcount数が入ったnewだけ必要なので, propとoldはアンダースコアで捨てている.

そういえば by Delegatesを使うと+=記法をしたときにerrorになるらしく, 仕方なく count = count + 1 と書いているらしい.

今日はここまで.