Symfoware

Symfowareについての考察blog

apache2 mod_access_tokenをPythonから使用する

特定のディレクトリに時間制限付きのアクセス許可を与えるモジュール
mod_access_token

Python経由でアクセスする方法を調べてみます。


設置



今回は、DebianにApache 2.2をインストールして試してみます。

Apacheのインストール。


# apt-get install apache2



mod_access_tokenのコンパイル時にヘッダーが必要になります。
apache2 -lでworker、preforkのどちらのモードで動いているかチェック。

# apache2 -l
Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
mod_version.c
worker.c
http_core.c
mod_so.c



workerで動いています。
workerの場合は、apache2-threaded-devをインストール。
preforkの場合は、apache2-prefork-devになるようです。


# apt-get install apache2-threaded-dev





mod_access_tokenのソースを取得します。


# cd /usr/local/src
# wget http://modaccesstoken.googlecode.com/files/mod_access_token-0.10.tar.gz
# tar xzf mod_access_token-0.10.tar.gz
# cd mod_access_token
# ./configure




この次、makeするとエラーになりました。


# make
no -c mod_access_token.c
make: no: コマンドが見つかりませんでした
make: *** [all] エラー 127





mod_access_tokenをPHPから使ってみる
こちらの方はそのままでmakeできたそうですが、

mod_access_tokenを入れてみた
こちらの方はAPXS=noだとまずかった模様。


たぶん、CentOS系ならそのままでOKですが、Debian系だとMakefileの設定を変更しないと
いけないような気がします。


# vi Makefile



APXS=apxs2に変更します。


#APXS=no
APXS=apxs2
PACKAGE = mod_access_token
VERSION = 0.01




これでmakeが通るようになります。
make & make installします。


# make
# make install





/etc/apache2/mods-available/access_token.loadが自動的に作成されているはず。


vi /etc/apache2/mods-available/access_token.load




内容は以下のとおり。


LoadModule access_token_module /usr/lib/apache2/modules/mod_access_token.so




/etc/apache2/conf.d/access_token.confを作成し、セキュリティートークンを
必要とするディレクトリを指定します。


# vi /etc/apache2/conf.d/access_token.conf




記載内容は以下のとおり。


<Location /hoge>
    AccessTokenCheck On
    AccessTokenSecret 15cfb576a8bdc1551219fdeb3117ed85
    AccessTokenAccessKey 7864ffcb01fb5cde1f1c2f37b619fbcd
</Location>




/hoge以下にアクセスするときは、セキュリティートークンが必要。


既に有効になっていると思いますが、一応a2enmodを実行。
設定ファイルを読み込みます。


# a2enmod access_token
# /etc/init.d/apache2 force-reload








ブラウザからのテスト




/var/wwwに

hoge/test.html
piyo/test.html

を配置しました。

test.htmlの内容は以下のとおり。


  1. <html>
  2. <body>
  3. hello
  4. </body>
  5. </html>




ブラウザで、hoge/test.htmlとpiyo/test.htmlにアクセスしてみます。

516_01.png

516_02.png

想定通り、hogeだけアクセス制限がかかっていますね。



Pythonのサンプル



PHPのサンプルを参考に、Pythonでアクセスキーを作成します。

試行錯誤しながらなので綺麗ではないですが、そのまま載せておきます。


  1. # -*- coding:utf-8 -*-
  2. import time
  3. import hmac
  4. import hashlib
  5. import base64
  6. import urllib
  7. import urllib2
  8. uri = '/hoge/test.html'
  9. accesskey = '7864ffcb01fb5cde1f1c2f37b619fbcd'
  10. secret = '15cfb576a8bdc1551219fdeb3117ed85'
  11. expires = int(time.time()) + 10 # 10秒許可
  12. plaintext = 'GET' + uri + str(expires) + accesskey
  13. signature = base64.b64encode(hmac.new(secret, plaintext, hashlib.sha1).digest())
  14. signature = signature.replace('=', '')
  15. signature = urllib.quote(signature)
  16. token_param = 'AccessKey=%s&Expires=%s&Signature=%s' % (accesskey, expires, signature)
  17. f = urllib2.urlopen('http://192.168.1.110' + uri + '?' + token_param)
  18. print f.read()




実行すると、hoge/test.htmlの内容が取得出来ました。


$ python sample.py
<html>
<body>
hello
</body>
</html>




アクセスキーなどを誤ったものに変更して実行すると、
ちゃんと403エラーになります。


$ python sample.py
Traceback (most recent call last):
File "sample.py", line 25, in <module>
    f = urllib2.urlopen('http://192.168.1.110' + uri + '?' + token_param)
File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 410, in open
    response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 523, in http_response
    'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 448, in error
    return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 531, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden





同種のモジュールにmod-auth-tokenというのもあるようです。



【参考URL】

mod_access_tokenをPHPから使ってみる

mod_access_tokenを入れてみた

Apache HTTPD: mod_allowfileowner - ダメ出し Blog

DebianデフォルトのApache2のMPMが何かを調べる。



関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/11/30(日) 18:34:32|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<mod_access_tokenのAccessTokenSecretとAccessTokenAccessKey | ホーム | Redmine 選択された項目に連動して、他の項目を変更(Custom JS plugin)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1559-8ce12f17
この記事にトラックバックする(FC2ブログユーザー)