rootでnpmを使うときにアクセス権限ではまる

結論から先に言うと–unsafe-permというオプションを付ければよいようだ。

npmでインストールするときにソースコードのコンパイルが行われるようなモジュールの場合、rootで実行していると以下のようなエラーがでることがある。rootなのにアクセス権限がないとはどういうことだと思うが、きっとrootでnpmを使うのがよくないと考えてチェックしているのだろう。

gyp WARN EACCES user "root" does not have permission to access the dev dir

以下のようにnpmを実行すれば回避できた。

npm install --unsafe-perm hogehoge

Raspberry PiからGoogle Homeを操作しようとしてmDNSではまる

せっかくGoogle Home miniを購入したのでRaspberry Piからいろいろと操作しようと思い調べてみたところgoogle-home-notifierという便利なものがあるのを発見。

さっそくインストールして試してみたところIPアドレスを指定すると喋らせることができたが、デバイスを検索するところがうまく動かない。さすがにGoogle HomeのIPアドレスを固定で指定するのは美しくないので原因を調べてみることにする。

デバイスの検索はmDNSで行っているようだがavahi-browseでリストしても何も出てこなくて、ファイアウォールでmDNSのポートを許可していないことに気付く。

リストは以下の通り。

avahi-browse -a -t

ファイアウォールの追加は以下の通り。

firewall-cmd --add-service mdns --perm
firewall-cmd --rel

さらにgoogle-home-notifierを利用している人のブログだけ見てインストールしたので、READMEに書いてある手順を実施していないのに気付く。browser.jsの修正は記述通り実施してlibnss-mdnsのインストールをしようとしたところで、なんとCentOSにはパッケージが用意されていないという罠に気付く。

普通のIntel環境ならepelでインストールできるようだが、Raspberry PiのCentOSにはそれも使えず。ソースから入れる気力もないし素直にRaspbianを使っておけばよかったかなと思いつつデバイスの検索は一旦あきらめる。

OSSIM

AlienVault社が配布しているオープンソースのSIEM環境だそうです。インストールしてみたところデザインは洗練されているけど何ができるかはわかりにくくドキュメントもなさそうな感じ。調査不足かもしれないけれど。有料サービスの見た目を宣伝するものの可能性も。

Raspberry Pi に接続したWiFiのLEDを消したい

Raspberry Piを使うなら無線の方が配線がなくて便利と思うが、Raspberry Pi B+の本体にはWiFiは内蔵されていないのでUSB接続のWiFiを使うことになる。PlanexのGW-USNANO2Aが小型だし消費電力的にもよさそうなので使っていたのだが、唯一の難点が通信中ずっとLEDが点滅していることである。正直見えるところにおいていると目障りであるが設定で変更できそうにもない。

このPlanexのアダプタはRealtek製のチップを搭載しておりLinuxでは8192cuというドライバで動作している。世の中の人が考えることはだいたい同じようで、検索するとLEDを消したいという人は多数いるが、ドライバのソースを書き換えてLEDを消すというのが可能なようである。

とは言っても、Raspbianでドライバを書き換えるのも大変だなあと思っていたら、開発環境の整備から含めてずばり説明しているサイトがあったのだ。

http://baddotrobot.com/blog/2016/01/06/disable-led-for-edimax/

この手順にしたがって、わが Raspberry Pi B+の環境でカーネルを丸一日かけてコンパイルしたところで、なんとこの説明とはバージョンが違っていて困ってしまったというお話。結論としてはとりあえずはLEDを消灯するのはあきらめてしまった。

アップデートしてるのでカーネルのバージョンが違うのだが、動作しているドライバーモジュールは古いものと同じモジュールのようなのだ。しかし、コンパイルしようとソースを持ってくるとモジュールの名前から違うものに置き換わっているという始末である。古いものではLEDの設定もマクロでオフに出来るようになっているようだが、新しいものではそうではなかったというところで、WiFi経由でsshして操作しているのにこれをデバッグするのは大変だなと思ってあきらめたしだいである。

ハニーポット

セキュリティ対策としてのハニーポットというのは流行が終わってしまったのだろうか。
T-Potというディストリビューションのダウンロード用isoも消えているしDionaeaのサイトも消えているようである。
Googleでハニーポットを検索しても東大HoneyPotというユニドルのグループが出てくる始末である。

MongoDBを試す

/yumのリポジトリを/etc/yum.repos.d/10genに以下の内容で追加。

[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enbaled=1

インストール。

yum update
yum -y install mongo-10gen
mkdir -p /data/db
mongod --fork --logpath /var/log/log

/opt/td-agent/embedded/bin/fluent-gemでfluent-mongo-pluginをインストールするとfluentからmongoに書き込める

<match td.apache.access>
  type mongo

  database log
  collection access

  include_tag_key true
  tag_key tag

  host localhost
  port 27017

  flush_interval 10s
  buffer_chunk_limit 10m
</match>

fluentdを試す

https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh でインストールできる。

/etc/td-agent/td-agent.conf で設定。

/etc/init.d/td-agent で起動

ModSecurity

セキュリティというのは結局金儲けのためのバズワードで成り立っているのかと思うが、標的型攻撃が流行りはじめてから名前を聞かなくなってしまったものにWAFことWeb Application Firewallというものがある。WAFの中でもフリーで利用可能なのがModSecurityだ。

適切に効果のある使い方をするためにはチューニングや運用などを検討する必要があるが、ただ単純に使ってみるだけならとても簡単である。
epelでパッケージが配布されているのでCent OSを使っている場合だと以下のようにインストール可能だ。mod_security自体はモジュールのみなのでcrs(Core Rule Set)をインストールすることで基本的な設定を導入することができる。epelではさらにcrs-extrasというパッケージも配布されている。

yum -y install epel-release
yum -y install mod_security
yum -y install mod_security_crs

しばらく動かして/var/log/httpd/modsec_audit.logを見ると攻撃をブロックしているのが確認できると思う。

Let’s Encryptでマルチドメイン証明書

Let’s Encryptではletsencrypt-autoコマンドで-dでドメインを複数指定することでマルチドメイン証明書が発行できる。発行される証明書は最初に指定したドメイン名のもので別名として複数指定したドメインが設定されている。

apacheでポート443のvirtualhostの設定を行うとマルチドメインのSSLが使えるようになるが、SSLの設定自体がvirtualhostの内側で設定するので若干冗長な感じになってしまう。

CentOS 6でLet’s Encrypt

昨今のウェブサイトはhttpsで通信が暗号化されているのが普通になりつつありますが、個人で利用するにはサーバ証明書を購入するのをためらってオレオレ証明書を使ってしまいがちです。Let’s Encryptプロジェクトではなんと正規のサーバ証明書を無料で取得することができるという素晴らしいプロジェクトです。

CentOS 6で使っているサーバにLet’s Encryptのサーバ証明書を導入してみたいと思います。サーバ証明書の取得はツール化されていて、しかも以下のページに日本語の説明をあるのでそんなに難しくありません。

https://letsencrypt.jp/usage/

ツールを実行すると必要なrpmなども自動でyum installしてくれるようですが、どうやらCentOS 6の環境にはpython-virtualenvというのが内容です。そこで別途pipでインストールすることにします。

wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip install virtualenv
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly -a standalone -d hoge.net

あと上記のページの説明ではサイトの認証にTCP 80番ポートを使うと書いてありますが、試した感じでは443番ポートを開けていないと認証が失敗するようです。それ以外は上記の説明通りに実行することであっという間にサーバ証明書が取得できます。

あとはApacheの設定です。/etc/letsencrypt/live/ドメイン名/にある証明書を/etc/httpd/conf.d/ssl.confで指定すればOKです。

注意しなくてはいけないのは有効期限が90日と短めだということです。letsencrypt-auto renewコマンドで期限が近付いている場合には自動で更新できるようなのでcronでも設定しておくのがよいと思われます。日曜日にlogrotateしたときについでにapacheが再起動されることを期待して土曜日にチェックとかいいのでは。