動かざることバグの如し

3分経てば忘れそうなことをメモします

UbuntuのSquidでパスワード認証を設定する

プロキシサーバーことsquidでIP制限ではなくBASIC認証によるセキュリティ設定をする場合のメモ

環境

パスワードを生成

htpasswd -c /etc/squid3/passwd user

を実行するとパスワードを聞かれるので入力する。すると /etc/squid3/passwdにハッシュ化されたファイルが生成される

htpasswdコマンドなんぞ無い

htpasswdコマンド無いって怒られた場合は apt install apache2-utils でインストール

パスワードをコマンドで直で叩きたい

-bオプションを付けるとコマンド1発でいける。セキュリティ的にどうなのってのはあるが

htpasswd -c -b /etc/squid3/passwd user mypassword

Ubuntu 14.04の場合

ディレクトリが /etc/squid3/passwdではなく /etc/squid/passwdなので注意(3がない)

Squidの設定

あとはsquid.confに設定を追加するだけ

auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/passwd
acl authenticated proxy_auth REQUIRED
http_access allow authenticated

ubuntu14の場合はそれぞれディレクトリが、/usr/lib/squid/basic_ncsa_auth、/etc/squid/passwdになるので注意

再起動

バリデーションチェック

squid3 -k check

設定再読込

service squid reload

これであとは確認すればおk

運用でSSHログインをしなきゃいけないのは設計力不足らしい

こんな記事を見つけた

cloudpack.media

タイトル詐欺かと思ったらガチのマジでそう言っていたのでメモ

この記事の概要

  • 運用時のオペミスは怖い
  • SSHしなきゃオペミスは発生しない
  • SSHしなくてもいいように設計しよう!

で、その設計とは「ログ収集」と「インスタンス再起動」とのこと。

うーんなるほどなるほど?

NGINX UnitでPython+Flaskを動かしてみる

つい先日、NginxがNGINX Unitと呼ばれる新しいアプリケーションをオープンソースとしてリリースした。

www.publickey1.jp

これを使うと、PHP、Go、Python、さらにはJava、Node.jsのアプリケーションとNginxの連携が楽になる(らしい

ということで実際にpythonの軽量WEBフレームワークことFlaskで試してみた。

環境

  • Ubuntu Server 16.04
  • Pyhton 3.5
  • NGINX Unit 0.1

構成

いままでは

Nginx ----- uWSGI ---- server.py(Flask)

だったのが

Nginx ----- NGINX Unit ---- server.py(Flask)

になる。

手順

まずはインストール。認証鍵のインストールを適当なところにダウンロードして追加

wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key

でインストール

apt update
apt install unit -y

flask入ってなかったら入れておくこと

pip install flask

次にサンプルのFlaskコードを用意する。今回は /home/ubuntu/wsgi.py に以下を記述

#!/usr/bin/env python

from flask import Flask

application = Flask(__name__)

@application.route("/")
def index():
    return "<h1>Hello World!!!!!!!!!</h1>"

次にNGINX Unitにロードさせるための設定ファイルを作成。今風というべきか形式はJSON形式。今回は同ディレクトリの /home/ubuntu/start.jsonに記述

{
    "applications": {
        "hello": {
            "type": "python",
            "workers": 2,
            "path": "/home/ubuntu",
            "module": "wsgi"
        }
    },
    "listeners": {
        "*:8400": {
            "application": "hello"
        }
    }
}

module": "wsgi"となっているがPythonのファイル名と合わせること。ポート番号8400は任意。

いざ設定 rootで

curl -X PUT -d @start.json --unix-socket /var/run/control.unit.sock http://localhost/
service unitd restoreconfig /home/ubuntu/start.json

のあとに以下を叩いて記述したJSONが返ってきたら成功

sudo curl --unix-socket /var/run/control.unit.sock http://localhost/

これで http://localhost/:8400を開くとHello worldがお出迎えしてくれる

現状の問題点

  • 設定項目がUwsgiより圧倒的に少ない
  • pyenv、virtualenvなどといった仮想python環境に対応できていない
  • これについてはすでにIsuueが上がってる https://github.com/nginx/unit/issues/15

まぁ時間が解決してくれるでしょと気長に待つことにした

今更だがgitをコンパイルする(CentOS,Ubuntu)

gitの脆弱性

先月あたりに発表されたgitの脆弱性が意外とクリティカル

oss.sios.com

というのも「悪意のあるコードを含んだレポジトリをgit cloneすると任意のコマンドが実行できてしまう」というなかなかの強者である。

ってことで急遽gitのアップデートと思ってapt install git yum install gitしてたらCentOSのgitが古すぎて話しにならないので自分でビルドした

コンパイル方法

バージョンは適宜最新版を

wget https://github.com/git/git/archive/v2.14.1.zip
unzip http://v2.14.1.zip
cd git-2.14.1/
make configure
./configure --prefix=/usr/local
make all
make install

確認方法

git --version

で見れるし、以下のレポジトリgit cloneしてうんこもりもりと表示されなければおk(

github.com

Jupyter notebookのパスワードを設定する

WEB上でPythonのコードが書けて出力結果もリアルタイムで見れて、さらにその履歴を残し、公開することもできる便利なJupitor Notebook

毎回 jupyter notebook で起動してToken含んだURLからアクセスするものの、次回以降はそんなURL覚えていられるわけもなく、

Token authentication is enabled
If no password has been configured, you need to open the notebook server with its login token in the URL, or paste it above. This requirement will be lifted if you enable a password.

って怒られる。仕方ないからJupyter notebookをリスタートさせてたんだけど、Tokenとやらは自分の好きな文字列に変更できたっぽい。

やり方

jupyter notebook --generate-config

すると Writing default config to: /home/user/.jupyter/jupyter_notebook_config.pyと言われるのでjupyter_notebook_config.pyを参照

c.NotebookApp.token = '***'を自分の好きなパスワードに設定する

次回以降jupyter notebookで開くとTokenを要求されるので先程設定したパスワードを入れればOK

別のやり方

引数でも渡せるっぽい

jupyter notebook --NotebookApp.token='xxx'

参考URL