CGIと管理者権限

以前maoeさんのPythonによるHTTPサーバを使用したことを書いた.
しかしながらこのHTTPサーバの実行権限はnoboday, つまり最低であることに気づく.
いま欲しい機能はrootの力をもつWEBサーバである.

ここでいったん行き詰った.

しかしここはLinux神のmaoe様がHTTPServerのコードをちょいといじってCGIで管理者権限をもたす設定にしていただく.


じっさい, WEBサーバには管理者権限をもたしてはいけない. しかし今回のCGIを使ったシステムでは必要な機能である.

これでアパッチやJavaなどに方向転換をしなくてすんだ...

def nobody_uid():
    """Internal routine to get nobody's uid"""
    global nobody
    if nobody:
        return nobody
    try:
        import pwd
    except ImportError:
        return -1
    try:
        nobody = pwd.getpwnam('root')[2]
    except KeyError:
        nobody = 1 + max(map(lambda x: x[2], pwd.getpwall()))
    return nobody

305行目のgetpwnam()の引数のnobodyをrootに変えることにより管理者権限でCGIを動かせる. しかしながらこのサーバを使う誰もが管理者権限を使えることになるので非常に危険である.

外に公開することがない「管理者のみが使えるシステム」ということで今回の変更が許されてほしい. 実際にはもっとセキュアな設定をする必要がある.