読者です 読者をやめる 読者になる 読者になる

kopug memo

名古屋で働くとあるWebエンジニアの覚書。

IDCFクラウドでCentOS7を使ってみる

CentOS7.x

f:id:kopug:20170110190710p:plain

はじめに

  • 今までぬるりと避けてきたCentoOS7を触ってみる
  • IDCFクラウドを今回利用しております www.idcf.jp
  • IDCFクラウド特有の話しはここでは扱いません
    • Webベースのコンパネも非常に分かりやすいので、見れば感覚的に使えます

主にやること

  • anyenvを使って PHP/Rubyのバージョンを切り替えれるようにする
  • Webサーバはnginxを利用
  • FWはIDCFクラウド側で用意されているものを利用する

基本設定

etckeeperのインストール

# yum -y install epel-release
# yum -y install etckeeper

# etckeeper init
# etckeeper commit -m 'first commit'

作業用アカウントの作成

# adduser kopug
# passwd kopug
# usermod -G wheel kopug

# visudo -f /etc/sudoers.d/wheel
%wheel ALL=(ALL) NOPASSWD: ALL
Defaults:%wheel !requiretty
Defaults:%wheel env_keep += SSH_AUTH_SOCK

sshdの設定変更

ここからは 作業用ユーザで実施

rootでのログインを禁止

$ sudo sh -c 'echo "PermitRootLogin no" >> /etc/ssh/sshd_config'

空のパスワードでのログイン禁止

$ sudo sh -c 'echo "PermitEmptyPasswords no" >> /etc/ssh/sshd_config'

鍵認証必須

$ sudo sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

設定反映

$ sudo systemctl reload sshd.service

root宛のメールを受け取れるようにする

$ sudo sudo sed -i '/^root:/d' /etc/aliases
$ sudo sh -c "echo 'root: user@example.com' >> /etc/aliases"
$ sudo newaliases

設定内容をコミット

$ sudo etckeeper commit

anyenv のインストール

$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.your_profile
$ echo 'eval "$(anyenv init -)"' >> ~/.your_profile
$ exec $SHELL -l
$ anyenv install rbenv
# anyenv install phpenv

各種pluginのインストール

$ mkdir -p $(anyenv root)/plugins
$ git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
$ anyenv update
$ mkdir -p $(anyenv root)/plugins
$ git clone git://github.com/aereal/anyenv-exec.git $(anyenv root)/plugins/anyenv-exe
$ anyenv exec --version
$ mkdir -p $(anyenv root)/plugins
$ git clone https://github.com/znz/anyenv-git.git $(anyenv root)/plugins/anyenv-git
$ anyenv git gc

phpのインストール

buildするのに必要なパッケージをインストール

$ sudo yum install -y --enablerepo=epel \
bzip2 gcc mariadb-devel libxml2-devel \
re2c libcurl-devel libjpeg-devel libpng-devel \
readline-devel libtidy-devel libxslt-devel bison-devel \
autoconf automake

インストール可能なバージョン

$ phpenv install -l

Available versions:
  5.2.17
  5.3.2
  5.3.3
  5.3.6
  5.3.8
  5.3.9
  :   :   :
  7.0.12
  7.0.13
  7.0.14
  7.0snapshot
  7.1.0
  7.1snapshot
  master

ここでは 最新の7.1.0 をインストールする

$ phpenv install 7.1.0

ruby のインストール

$ rbenv install -l

Available versions:
  1.8.5-p113
  1.8.5-p114
  1.8.5-p115
  : : :
  2.4.0-preview3
  2.4.0-rc1
  2.4.0
  2.5.0-dev
  : : :
$ rbenv install 2.4.0

$ rbenv global 2.4.0

$ ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]

スマホアプリを開発する上で便利な認証基盤とデータ同期サービス

こんにちは。kopugです。
riot.jsにちょっと飽きてきたではなく、気分転換にswift3で遊んでいた時に使った外部サービスをまとめてみます。

Amazon Cognito

f:id:kopug:20170109015248p:plain

https://aws.amazon.com/jp/cognito/

主な機能

  • ユーザ認証機能
    • OAuth / SAML ID / 独自IDに対応
    • さらに User Pools 機能を使えば、アカウント管理基盤(ログイン、サインアップ等)をマネージドとして提供してくれます
  • Sync(同期)機能
    • ユーザーデータのデバイス間の同期
    • オフライン対応 (オンラインになると同期開始してくれる)

参考サイト

qiita.com qiita.com

Google Firebase

firebase.google.com

主な機能

  • リアルタイムデータベース
  • ユーザ認証機能
  • ホスティング機能
  • メッセージング機能
  • アナリティクス機能
  • 公開前のテストラボ
  • etc...

数多くあるので、これひとつ入れるだけで結構作り込まなくて済みます。

参考サイト

qiita.com entershare.jp

Riot.js に 触れてみる #0

f:id:kopug:20170104161938p:plain

フロントエンド系のライブラリ/フレームワークはいくつもありますね。

  • AngularJS
  • React.js
  • Riot.js
  • vue.js
  • Backbone.js
  • Ember.js
  • Knockout.js

用途によって必要なライブラリは変えていくべきですが、今回は Riot.js について触れてみようと思います。

riotjs.com

Riot.js は... HTML・JS・CSSを、普通に理解していて 「説明書を読まない人」向け
と、以下の利用に書かれているだけのこともあり、非常に直感的に分かりやすい書き方をします。

Riot.js in WPD-Week // Speaker Deck

Riot.js の特徴

カスタムタグ

いわゆるコンポーネント指向と言われているもので、独自のタグを作ることができます。
以下はtodoタグを作っている例です。

<todo>
  <!-- layout -->
  <h3>{ opts.title }</h3>

  <ul>
    <li each={ item, i in items }>{ item }</li>
  </ul>

  <form onsubmit={ add }>
    <input ref="input">
    <button>Add #{ items.length + 1 }</button>
  </form>

  <!-- style -->
  <style>
    h3 {
      font-size: 14px;
    }
  </style>

  <!-- logic -->
  <script>
    this.items = []

    add(e) {
      e.preventDefault()
      var input = this.refs.input
      this.items.push(input.value)
      input.value = ''
    }
  </script>
</todo>

カスタムタグは、関連するHTML/CSS/JavaScriptを統合して、再利用可能なコンポーネントを形成します。

人間に読みやすい

カスタムタグにしていくと、HTMLのみで複雑なビューを作成できます。大元のHTMLは以下のようになります。

<body>

  <h1>Acme community</h1>

  <forum-header/>

  <div class="content">
    <forum-threads/>
    <forum-sidebar/>
  </div>

  <forum-footer/>

  <script>riot.mount('*', { api: forum_api })</script>
</body>

このようにカスタムタグを入れ子で配置したりすることもできます。

小さなサイズ

  • polymer.html - 45.69KB (gzip)
  • react.min.js - 45.05KB (gzip)
  • riot.min.js - 9.81KB(gzip)

小さいので、ソースコード自体を読むのもそんなに苦ではないですし、余計な機能が一切省かれているのも個人的には好き。

etc

ここに書いてあることは全て、riot.js のサイトに書かれていることですので、もっと詳しく知りたい方は見てみてください。

xargs で 並列処理

Linux

意外と忘れていたので備忘録がてらメモ

(例)

$ yes | head -10000 | xargs -L 30 -P 2 ruby -e 'sleep(1); p ARGV.size;'

-L : 引数の数が30件に達したら, コマンドを実行する
-P : 同時実行数を2に指定

上記のコマンドを実行をすると, 引数の数を標準出力に出しているので確認する事ができる

$ yes | head -10000 | xargs -L 30 -P 2 ruby -e 'sleep(1); p ARGV.size;'
30
30
30
:  :  :

psコマンド等で確認をすると 2プロセス動いているのが確認できる

仕事をする上での楽しさの定義

ビジネス Management

はじめに

2017年になりました. 今年の抱負は「積極的に明文化すること」にします.

それを思ったキッカケは, 年末の大掃除をする時に今の会社に入社する時に作った職務経歴書のWordファイルを見つけた時のこと. 2007年の更新だったので, 今年でちょうど10年になります.
そこの経歴書をみて思い出したのですが, 1番最初の職務は1997年に学生時代に請負ではじめたWebのシステム開発でした.
そう考えると今年で20年なんですよね...驚きというかある意味怖いというか.
今までの自分の学びとこれからの学びを少しでも残していこう. そんな一年の始まりにしたいですね.

仕事をする上での楽しさ

f:id:kopug:20170102013301p:plain

突然ですが, 仕事を楽しめている人って世の中にどれくらいいるんでしょうね.
人間の一生を考えると働いている時間は非常に長いです.
プライベートと仕事を区別して…という話を聞くことは稀にありますが, 自分はプライベートも仕事もごっちゃ混ぜで考えています.
自分は1人しかいなくて, 人生も1度しかなく時間軸もひとつなので, 分けて感がることが出来ないというのが本音です.

自分の人生を満足させたい, 充実させたいと考えると仕事は切っても切り離せない問題になるので, であれば楽しみたい.
今までを振り返って楽しさ/充実感を感じている時の共通項目を書いてみます.

目標が明確になっていること

f:id:kopug:20170102013326p:plain

もう少し言うと, 目標を達成する上で自身が何をするのかが明確になっている時です.
チームが目指している目標と自身の目標, それを達成するためのアクションが明確になっていると人は動きやすくなります.

ただ動き続けるためには, それだけでは不足していて, 今どの位置にいるのか, 今のアクションは正しいのか? このまま進んでいって良いのか?と不安になってしまいます.
その不安を解消するためにも目標の見える化と成果(数字)の見える化は必須になります.
成果が見える事で今どの位置にいるのかを知ることができ, 目標が見えることで立ち返る事ができます.

これが無いと闇雲に動くことしか出来ず, 人は不安になります.

目標の見える化と管理をする上で便利そうだなーと感じるツールがこれ.

会社やチームの目標から個人の目標に落とし込んで, 各目標の進捗管理ができるツール.
これは使ってみて確かめてみる.

チームが一丸となって, 目標達成に向かっていること

f:id:kopug:20170102013349p:plain

自分1人で出来ることは限られており, 大きな目標を達成するには周りの皆の協力が必要不可欠になります.
自分がフリーランスを辞めた理由がまさにこれでした.
自分が背中を預けられる仲間と切磋琢磨して, 目標に向かって行動している時に人は充実感を得ます.

自分の成長が実感できていること

f:id:kopug:20170102013415p:plain

最高のチームの一員でいるためには, 自身も成長しなくてはいけません. 結果それがチームの成長, 目標達成に向けて必要になるからです.
エンジニアであれば, 自分の書いた過去のコードを見ると成長を感じる事は多いかと思います. ;-)
自分の成長を感じる瞬間はいくつかありますが, 重要なミッションを任されてそれが達成出来た時は感じやすいですよね.

どれだけ良い目標があり, 良いチームに入ることができても, 自身が成長して周りから必要とされなければ, それは楽しくないどころが辛いと感じると思います.
ただ, 何か行動を起こしていれば必ず成長している事はあるはずなので, 今いる場所で何をすれば自分が1番成長できるのかを考えることが重要です.

まとめ

今回はテーマを仕事の楽しさにしましたが, この手の話を考える時に自分はいつも絶対嫌な状態を最初に考えます.
自分がどうしたい. どうあるべきか. それを考える上で間逆な状態を想像してから, そうならないためにはどうすればいいのか.
または, それを単純にひっくり返すだけで自分のしたいことが見えてきたりもします.

そんな事を考えながら, 今日は真田丸のBGMを聴きながら書いています.

NHK大河ドラマ 真田丸 オリジナル・サウンドトラック THE BEST

NHK大河ドラマ 真田丸 オリジナル・サウンドトラック THE BEST

  • 三浦文彰、下野竜也指揮 NHK交響楽団、他
  • サウンドトラック
  • ¥2200

Vim Bootstrapを使ってお手軽にvimrcを強化

vim

f:id:kopug:20161231230409p:plain

はじめに

vimを使っているけど, vimrcをあんまり頑張ってメンテしてない人向けの記事です.
素のvimでコーディングをするのは正直しんどいです. それならIDEを使ったほうが絶対良い.

自分でvimrcをイチから書き起こすのはメンドイけど, vimを使いやすくしたい!という人にお勧めなのが Vim Bootstrapです.

インストール方法

Vim Bootstrapを見ると分かりますが, 複数の言語に最適化されたvimrcを作ることができます.
普段自分が使っている言語をココでは選んで, Generate!ボタンを大クリックしてください.
そうすると generate.vim というファイルがダウンロードできます.

このファイルを ~/.vimrc に名前を変更をし, 以下のコマンドを実行します.

vim +PlugInstall +qall

詳しいインストール方法はここを参考に.

GitHub - avelino/vim-bootstrap: Vim Bootstrap is generator provides a simple method of generating a .vimrc configuration for vim

こんな感じになりました

f:id:kopug:20161231231525p:plain

まとめ

ソードアートオンライン トップアルバム & ソング には 131曲も収録されていますが, 特におすすめは以下の曲です. 胸アツになること間違い無し.

  • swordland
  • in your past
  • light your sword
  • we have to defeat it
  • gracefully
  • a tiny love

※ ちなみにアフィコードは含まれていませんので, 気にせずクリックしてください.

Amazon LinuxにハニーポットCowrieを入れてみる

Linux aws

はじめに

最近suzuki.sh に刺激されたのもあり, 2013年からhatena diaryの更新が完全停止していたが, hatena blog にインポートをして再度開始してみることに. 今年の夏/冬と"とあるイベント"があり, そこでSSHハニーポットを入れて遊ぶことがあったので, それの備忘録をここで残してみます. ただその時は, kippoを利用して構築したので, 今回は前々から気になっていたCowrieを利用する.

ハニーポットってなに?

元来は「蜜(の詰まった)壷」の意味で、何らかの有益そうな情報や資源がありそうな場所を用意して、それにつられた者を観察したり、肝心な部分で被害を出さないために目をそらせたり、コンピュータ・フォレンジックスを行うための証拠を集めたりする、一種のおとり手法に使われる。 手法そのものをハニーポットと呼ぶこともある。

ハニーポット - Wikipediaからの引用によると上記のように示されている.
ここではsshハニーポットを利用するので, 通常22番ポートでsshdがListenしているが, そこを全く別のモノに置き換えてしまい, ダミーのsshdで受け付けてしまおうという事である.

今回目指す構成

上にも書いたが, 22番ポートでListenしたい. ただ Cowrieを起動するにはrootユーザではなく一般ユーザにしたいので, その場合は通常だと1024番ポート未満ではListen出来なくなる.
なので今回はiptablesのNATテーブルを利用して, 22番ポートに来たリクエストを CowrieのListenポートにリダイレクトする事にした.

まとめるとこんな感じ

  1. sshdのポートは22番から2754番に変更
  2. Cowrieは2222番ポートでListenさせる
  3. iptablesのNATを利用して, 22番ポートへのアクセスを2222番ポートにリダイレクトさせる

まずはインストール

必要なパッケージをインストールする

必要なパッケージは以下に記載されている
cowrie/requirements.txt at master · micheloosterhof/cowrie · GitHub

$ sudo yum -y install gcc git python-setuptools python-devel python-crypto libffi-devel openssl-devel gmp-devel
$ sudo easy_install pip
$ sudo easy_install PyCrypto pyasn1
$ sudo pip install twisted==15.2.1 cryptography configparser pyopenssl tftpy

※ twistedのバージョンが 15.3以上の場合, 起動しなかったためバージョンを15.2.1に指定しています.

Cowrieの起動用アカウントの作成

$ sudo adduser cowrie

ここから先は cowrieユーザにswitchして作業をしていきます.

$ sudo su - cowrie

Cowrieのダウンロードと設定

$ git clone http://github.com/micheloosterhof/cowrie
$ cd cowrie/
$ cp cowrie.cfg.dist cowrie.cfg

今回は設定はデフォルトのままでいきます. listenポートを変更したり, ホスト名を変更したい場合はここを適宜触ってください.

ダミーユーザの追加

以下のファイルを編集/追加することで, ダミーユーザの作成ができます.
今回はこのまま利用するので, rootのパスワードは!rootです.

$ cat data/userdb.txt

root:x:!root
root:x:!123456
root:x:*
richard:x:*
richard:x:fout

Cowrie を起動する

$ ~/cowrie/start.sh

このままだと, 2222番ポートでListenしているだけですが, 以下のように接続をしてテストをしてみます.

$ ssh root@localhost -p 2222

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

root@svr04:~#

こんな風に返ってきたらOKです.
Cowrieを停止したい場合は以下のコマンドで停止することができます.

$ ~/cowrie/stop.sh

ポート番号を変更していく

ここからは適宜rootで実行していくので sudoを利用しています.

sshdのポート番号を変更

$ sudo vi /etc/ssh/sshd_config
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
# Port 22
Port 2754  <- ここを追加

変更をしたら設定を再読込させます.

$ sudo service sshd reload

iptablesの設定

必要最低限の設定だけをここではします.

sudo vim /etc/sysconfig/iptables
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# filter settings here...
COMMIT
$ sudo service iptables start

これで 22番ポートで ssh接続をすると 2222番ポートに転送されるようになりましたね.

ログの出力と確認

リアルタイムに見たい場合はこんな感じで.

$ tail -f ~/cowrie/log/cowrie.log

セッションごとにどんなコマンドが実行されたのかを見る場合は, 以下のコマンドでみれます.

$ ~/cowrie/bin/playlog ~/cowrie/log/tty/YYYYDDMM-AAAAAA-BBBBBBB-xx.log

このコマンドを実行すると, そのセッションでの出来事を再現してくれるので面白いですね.

まとめ

今回は遊び用で入れたものを書いているので, これをそのまま実運用に使わないでください.
マジメにやる場合は, CowrieよりもT-Pot: A Multi-Honeypot Platformのほうが可視化もされて良さそうですね.

blog.takanabe.tokyo

3年半ぶりともなると, なかなか投稿が進みませんでしたが, SAOのサウンドトラックのお陰で最後まで書ききる事ができました.