自動デプロイをちょっとセキュアにしたメモ

前にやったTravis CIでの自動デプロイを少しだけセキュアにしたのでメモしておきます。

sshのポート変更

CentOS 7 で sshd のポートを変更する(firewalld, SELinuxの設定) | CentOS | daily memorandum 3.0.0
SELinuxの設定変更という部分は無視して、この記事と通りに従えば大丈夫です。
途中firewall-cmdがfirewalld-cmdになっていますが、おそらくミスですね。

ユーザー作成

ルートのログイン禁止をする前にユーザーを作成します。
CentOS で root 権限を持ち、sudo を実行できるユーザーを作成する | Webセキュリティの小部屋
sudoのパスワード入力要求はつけておきました。ユーザーを作成した後は、rosコマンドは使えたのですがlisp処理系の再インストールが必要でした。

sudo時にPATHを引き継ぐ

サーバーの起動にはsudoが必要みたいなのですが、sudoするとPATHがリセットされてしまうようです。roswell等々が使えなくなるので設定を行います。
Linux - sudo時にPATHを引き継ぐ方法 - Qiita

.travis.ymlの編集

sshの接続先ポートという環境変数が増えたので、前回の記事と同様に暗号化して追加します。
Travis CIでCommon Lisp Webアプリを自動デプロイするメモ - 心鏡曼荼羅
デプロイ用のスクリプトはsudoをつけて実行する必要があるのと、ポートの指定が必要なのでコマンドを編集します。

after_success:
    - if [[ "$TRAVIS_BRANCH" == "master" ]]; then
        export SSHPASS=$DEPLOY_PASS;
        sshpass -e ssh -t -t -p $DEPLOY_PORT -o "StrictHostKeyChecking"=no $DEPLOY_USER@$DEPLOY_HOST "echo ${DEPLOY_PASS} | sudo -S ${DEPLOY_PATH}/deploy.sh" 1>/dev/null 2>/dev/null;
      fi

sudoには、パスワードが必要なので-Sオプションをつけてechoで渡します。ここらへん、本当にセキュアか怪しいですね…特定コマンドのみsudoのパスワードなしができるみたいなので、こちらの方が良いかもしれません。
特定のコマンドをパスワードなしでsudo する設定 - Slow Dance

文字列中に変数を繋げるためには${}で囲む必要があるみたいですね。
シェルスクリプトで変数を繋げる
シェル・スクリプト・リファレンス - 【 複数の変数を連結する 】:ITpro

また、sshした先でsudoを使用するには色々あるみたいで、とりあえず-t -t オプションをつけておけばよいみたいです。
SSHで「-t」オプションを付けても、失敗するときの対処法 : 元うなぎ屋

終わり

少しだけセキュアにしました。ポート変更前は結構攻撃のログが残っていたのですが、変更だけで攻撃は見られなくなりました。sudo周りが色々面倒くさそうですが、少しずつ勉強していくしかないですね。