スゲーッ爽やかな気分だぜ。新しいUbuntuを入れたばかりの正月元旦の朝のよーによォ~ッ
まず、sshのパスワード認証を止めます。
インターネットには22番ポートが空いているサーバーを見つけてクラッキングするクローラーが大量に居ます。
ssh
詳しい解説 doc.7kai.org - SSHの設定
# いつもの mkdir .ssh chmod 0700 .ssh echo "自分の公開鍵" >> .ssh/authorized_keys chmod 0644 .ssh/authorized_keys
接続確認
exit
ssh username@hostname
パスワードなしでログイン出来るのを確認できたらパスワード認証を無効化します
sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sudo vi /etc/ssh/sshd_config diff -u /etc/ssh/sshd_config.bak /etc/ssh/sshd_config --- /etc/ssh/sshd_config.bak 2016-04-07 15:32:28.901004710 +0900 +++ /etc/ssh/sshd_config 2016-04-06 19:02:05.076211610 +0900 @@ -25,7 +25,7 @@ # Authentication: LoginGraceTime 120 -PermitRootLogin without-password +PermitRootLogin no StrictModes yes RSAAuthentication yes @@ -49,7 +49,7 @@ ChallengeResponseAuthentication no # Change to no to disable tunnelled clear text passwords -#PasswordAuthentication yes +PasswordAuthentication no
反映させて終わり
sudo service ssh restart
鍵なしで接続時にパスワードを聞かれず接続が来られるか確認しておきましょう。
mv ~/.ssh/id_rsa ~/.ssh/id_rsa.bak ssh username@hostname > Permission denied (publickey). mv ~/.ssh/id_rsa.bak ~/.ssh/id_rsa
まずこれで一安心ですが、その後立てるミドルウェアやアプリが丸裸にならないようにファイヤーウォールを設定します。
ufw
便利な時代になりました。
sudo ufw default deny sudo ufw allow 22 sudo ufw allow 80 sudo ufw allow 443 sudo ufw enable sudo ufw status
cron-apt
パッケージの自動更新を設定します。
標準設定ではダウンロードのみでインストールはされません、通知メールを自分でやる派なのでその設定だけ入れます。
通知メールの配送のために postfix が必要ですが、25番ポートを閉じているならSPAM中継に悪用される事はありません。
postfix をインストールする際に構成を聞かれますが Internet Site で入れて後から master.cf から smtp をコメントアウトします。
sudo apt-get install cron-apt postfix
sudo vi /etc/cron-apt/config
sudo /usr/sbin/cron-apt
/etc/cron-apt/config
APTCOMMAND=/usr/bin/apt-get MAILTO="s.aska.org@gmail.com" MAILON="changes" DEBUG="changes" OPTIONS="-o quiet=1"
MySQL 5.7
AppサーバーにしろDBサーバーにしろclientかserverか大抵どちらか入れます。
最新の MySQL を入れるには mysql-apt-config を公式サイトから導入するのが簡単です。
cd /usr/local/src sudo wget http://dev.mysql.com/get/mysql-apt-config_0.6.0-1_all.deb sudo dpkg -i mysql-apt-config_0.6.0-1_all.deb sudo apt-get update sudo apt-get install mysql-server # or sudo apt-get install mysql-client
server を入れる場合 root のパスワードを聞かれますが私は blank のまま Enter します。
それでも `sudo mysql` とやれば root でログインできるので、database と user を作り以後これを利用します。
sudo mysql > CREATE DATABASE justaway DEFAULT CHARSET utf8mb4; > CREATE USER justaway@192.168.0.20; > GRANT ALL PRIVILEGES ON justaway.* TO justaway@127.0.0.1; > FLUSH PRIVILEGES; > quit
Let's Encryptと透かし入り証明書(nginx-ct)を導入し、証明書の更新も自動化する手順
Let's Encrypt 自体は本当に簡単なんですが nginx-ct を入れるのが本当に億劫でした。
それはなぜか、まず パッケージ管理システムに慣らされた我々にはとてもつらい という気持ちがあります。
コマンド一つでバージョンアップでき、各ディストリビューションに最適化された起動スクリプトやコンフィグファイルが提供されるのですから極力これを使いたいのです。
インストール手順
# まずは最新の nginx パッケージを手に入れる ( http://nginx.org/en/linux_packages.html ) wget -O - http://nginx.org/keys/nginx_signing.key | sudo apt-key add - sudo sh -c 'echo "deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx" >> /etc/apt/sources.list' sudo sh -c 'echo "deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx" >> /etc/apt/sources.list' sudo apt-get update # そのままインストールしたいのを堪え、ビルドに必要なツールをインストールし、ソースを手に入れます sudo apt-get build-dep nginx sudo apt-get source nginx # 次に、透かし入り証明書の導入に必要な nginx-ct を手に入れます sudo wget https://github.com/grahamedgecombe/nginx-ct/archive/master.tar.gz sudo tar xzvf master.tar.gz # 更に、OpenSSL も最新版を手に入れます sudo wget https://www.openssl.org/source/openssl-1.0.2g.tar.gz sudo tar zxvf openssl-1.0.2g.tar.gz # 最初に手に入れた nginx の configure オプションに nginx-ct と OpenSSL の記述を記述します cd nginx-1.9.14/ sudo cp debian/rules debian/rules.bak sudo vi debian/rules diff -u debian/rules.bak debian/rules --- debian/rules.bak 2016-04-07 15:22:04.952848801 +0900 +++ debian/rules 2016-04-06 19:46:41.649867569 +0900 @@ -54,7 +54,9 @@ $(WITH_HTTP2) \ --with-cc-opt="$(CFLAGS)" \ --with-ld-opt="$(LDFLAGS)" \ - --with-ipv6 + --with-ipv6 \ + --with-openssl=/usr/local/src/openssl-1.0.2g \ + --add-module=/usr/local/src/nginx-ct-master # ビルドします sudo dpkg-buildpackage -b cd .. # インストールします sudo dpkg -i nginx_1.9.14-1~trusty_amd64.deb # うっかり apt-get upgrade して nginx-ct を失わないように nginx を更新対象から除外します sudo apt-mark hold nginx
これならまぁ OpenSSL のバージョンが上がる度に対応すると考えても数分で終わるので耐えられる...筈
証明書の更新の自動化
letsencrypt-auto コマンドの後に ct-submit.sh を叩くスクリプトを用意し、これを crontab にセットします。
install ct-submit
cd /usr/local/src sudo wget https://github.com/grahamedgecombe/ct-submit/archive/master.tar.gz sudo tar zxvf master.tar.gz cd ct-submit-master/ sudo /usr/local/go/bin/go build sudo install -s -m755 ./ct-submit-master /usr/local/bin/ct-submit
/home/aska/justaway.info/scripts/ct-submit.sh
#!/bin/sh -eu KEY=/etc/letsencrypt/live/justaway.info/fullchain.pem SCTS_DIR=/etc/letsencrypt/live/justaway.info/scts CTSUBMIT=/usr/local/bin/ct-submit echo 1 sudo sh -c "$CTSUBMIT ct.googleapis.com/aviator \ <$KEY \ >$SCTS_DIR/aviator.sct" echo 2 sudo sh -c "$CTSUBMIT ct.googleapis.com/pilot \ <$KEY \ >$SCTS_DIR/pilot.sct" echo 3 sudo sh -c "$CTSUBMIT ct.googleapis.com/rocketeer \ <$KEY \ >$SCTS_DIR/rocketeer.sct"
/home/aska/justaway.info/scripts/renew-cert.sh
#!/bin/sh -eu # crontab 設定例(rootユーザーのcrontabに入れます) # 0 4 1 * * /home/aska/justaway.info/scripts/renew-cert.sh /usr/local/src/letsencrypt/letsencrypt-auto certonly --webroot -d justaway.info --webroot-path /home/aska/justaway.info/static --renew-by-default /home/aska/justaway.info/scripts/ct-submit.sh
まとめて github で管理すると便利
江戸から金沢へ
1日目
日本海側にやって来た (@ 金沢駅 (Kanazawa Sta.) in 金沢市, 石川県) https://t.co/ntlfAUB9cY
— 開発㌠ (@su_aska) 2016年3月4日
なんてこった pic.twitter.com/B8owLGuswS
— 開発㌠ (@su_aska) 2016年3月4日
地の果てまで渋谷が追ってくる
— 開発㌠ (@su_aska) 2016年3月4日
現在地です pic.twitter.com/NHBedNycy5
— 開発㌠ (@su_aska) 2016年3月4日
2日目
芝生で昼寝😪 (@ 金沢城公園 (Kanazawa Castle Park) in 金沢市, 石川県) https://t.co/WXGoPpqS2E pic.twitter.com/fY8Yv3seCl
— 開発㌠ (@su_aska) 2016年3月5日
ニホンのトリ pic.twitter.com/VqdFDJTpAC
— 開発㌠ (@su_aska) 2016年3月5日
3日目
163 Could not determine source user
Error Codes & Responses にないエラーコードで 163 というものがあり、これはフォロー関係を取得するAPIで source_screen_name が不正な場合などに出る。
Twitter は screen_name を変更できるので、これを考慮して極力 screen_name ではなく user_id を使ってAPIを操作しましょう。
https://api.twitter.com/1.1/friendships/show.json?source_screen_name=[変更前のscreen_name]&... {"errors":[{"code":163,"message":"Could not determine source user"}]}
Holo の時代は終わった
Justawayではナビゲーションドロワーの制御に v4.app.ActionBarDrawerToggle というの使っているんですが、これはもう非推奨で時代遅れでいつ動かなくなるかわかりません。
警告: [deprecation] android.support.v4.appのActionBarDrawerToggleは非推奨になりました
などとビルドの度に言われかなり煽られます。
で、v7.app.ActionBarDrawerToggle というのを使うといいらしいんですが v7.app.ActionBarDrawerToggle を使うにはそもそもアプリのテーマを Holo から Theme.AppCompat などに変える必要があり、それをやるとアクションバーがマテリアルデザインのツールバーに書き換わりかなりアプリのルック・アンド・フィールが変わります、アプリのデザインをカスタマイズしている場合は結構な改修が必要です。
とはいえ Holo ベースのテーマを使い続けるのは限界とわかったのでまたデザインをやり直そうと思います。
デザインにはこだわりも思い入れもあったんですが、Android 4系を使っていた時の2系のデザインのアプリの残念感を思うとマテリアルデザインに慣れた世代が Holo ベースのアプリを見てもダサく見えるのかなぁとか考えてしまいますね。