*.pyc の owner と permission
なんかコメントがついてた。気がつくのが遅くてすみません。
え、python ってそうなの? 自動保存だとパーミッション関連が大変そうだけど、大丈夫なんだろうか。
http://d.hatena.ne.jp/kwatch/20080209#c1202531672
というわけで、調べてみる。
foo.py:
def hello(name): print "Hello %s!" % name
main.py:
from foo import hello hello('World')
result:
$ ls -l main.py* foo.py* # 最初は *.pyc はない -rw-r--r-- 1 kwatch kwatch 46 Feb 13 18:18 foo.py -rw-r--r-- 1 kwatch kwatch 37 Feb 13 18:17 main.py $ python main.py # python が *.pyc を生成 Hello World! $ ls -l main.py* foo.py* # *.pyc の permission は 0644 -rw-r--r-- 1 kwatch kwatch 46 Feb 13 18:18 foo.py -rw-r--r-- 1 kwatch kwatch 273 Feb 13 18:19 foo.pyc -rw-r--r-- 1 kwatch kwatch 37 Feb 13 18:17 main.py $ rm *.pyc # *.pyc を削除 $ sudo chown root foo.py # owner を変更 $ sudo chmod u-w foo.py # owner の書き込み権限を削除 $ ls -l main.py* foo.py* # 現在の状態を確認 -r--r--r-- 1 root kwatch 46 Feb 13 18:18 foo.py -rw-r--r-- 1 kwatch kwatch 37 Feb 13 18:17 main.py $ python main.py # もう一度 *.pyc を生成 Hello World! $ ls -l main.py* foo.py* # *.pyc の owner と permission は変わらず -r--r--r-- 1 root kwatch 46 Feb 13 18:18 foo.py -rw-r--r-- 1 kwatch kwatch 273 Feb 13 18:23 foo.pyc -rw-r--r-- 1 kwatch kwatch 37 Feb 13 18:17 main.py
というわけで、結論:
- Python は、import したファイルからは *.pyc を作るが、コマンドライン引数で指定したファイルからは *.pyc を作らない。
- *.pyc の owner と permisson は、元ファイルである *.py とは関係ない。
まあ、妥当といえば妥当か。しかし *.py は他人が読めないように設定していても、*.pyc は読めてしまうという可能性があるのは、セキュリティ的には確かに気になるところだ。そこは一人ひとりが気をつけましょうというスタンスなのかな。というよりは、*.pyc も単なるファイルに過ぎないということか。