- 2009-04-13 (月)
- Mac
ローカルでテスト的にPerlやPHPでコードを書くときに毎回忘れてしまうので、備忘録としてメモメモ。
(もしかしたら一般的ではないかも)
PerlやPHPを実行するためのパーミッション
たとえばTextMateでファイルを作成した場合、デフォルトではパーミッションが「644」になってしまう。
この状態だとCGIとして動かすことができず、「Internal Server Error」となってしまうので、
$ chmod 755 hoge.cgi
としてダレでも実行できるようにする。
またダレでも実行できるのが気持ち悪い場合は、「754」として、さらに
$ sudo chgrp _www hoge.cgi
でグループをhttpdを実行している「_www」グループに変更する。
こうすればグループの部分に5が適用されるので、実行が可能になる。
上記で_wwwというユーザーが出てきたが、これを探す方法を以下に。
Apacheプロセスを実行しているユーザーを調べる方法 - Perl編
これを実行すると
_www*70700World Wide Web Server/Library/WebServer/usr/bin/false0
と表示され一番左端にユーザー名が表示される。
ボクは「_www」だったが、環境によっては違うのになるのだろうか・・・
Apacheプロセスを実行しているユーザーを調べる方法 - コマンド編
Apacheこちらの記事書いてある方法で、
$ ps -lax
と打ってhttpdのプロセスuid(一番左端の数値)をもとに、
70 1137 824 104 0 31 0 2711340 3140 - S 71c2edc ?? 0:00.04 /usr/sbin/httpd -D FOREGROUND
/etc/passwdファイルの中から同じ70番を持つ行に行くと、先ほどと同じように
_www*70700World Wide Web Server/Library/WebServer/usr/bin/false0
と書いてある。
mkdir()をするときのパーミッション
ディレクトリが作成される階層の上位ディレクトリのグループに「_www」グループを指定して書き込みができように「775」にする。
これをしないと実際にmkdirが書き込まれているソースコードのパーミッションをいくらいじってもうまくいかない。
例えばMT4を導入する場合に、DBをSQLiteにするとMT/dbというディレクトリに書き込みにいくのだが、このディレクトリがない場合がある。
なので、Finderから作成していざMTを実行してもエラーになってしまう。
$ sudo chgrp _www hoge
$ chmod 775 hoge
mkdirするPerlのコードは以下の感じ。
もし失敗した場合は$!にエラー内容が格納されている。
chmod()をするときのパーミッション
パーミッションを変更したいディレクトリやファイルのOwner(所有者)に_wwwが指定され、且つ実行可能の場合にうまくいく。
今度はPHPで。
これでディレクトリを作成し、chmodでパーミッションを変更できる。
mkdirしたユーザーは_wwwになるので、Ownerが_wwwになりchmodがうまくいく。
drwxr-xr-x 2 _www _www 68 4 13 01:41 test
ただし、Finderから自分で作成したディレクトリをプログラムからchmodする場合は、事前にコマンドからユーザーを_wwwにしておく必要がある。
$ sudo chown user test
ふぅ〜。
この手の設定がすごく苦手で毎回悩んでしまう。
まぁmkdirやchmodなどをプログラムから実行する機会はそんなにないのですが、いざってときにハマってしまう。
- Newer: 買ったCD
- Older: JavaScript版Box2dを手軽に使えるようにprotoBox2d書いてみた
Trackback:0
- TrackBack URL for this entry
- http://hisasann.com/cgi-bin/mt/mt-tb.cgi/1176
- Listed below are links to weblogs that reference
- MacでWebアプリを実行するときのパーミッションについて from HouseTect, JavaScriptな情報をあなたに





