【Linux】パーミッションを種類ごとに一括変更したい

【環境】Ubuntu 10.04, XAMPP for Linux


今までは


sudo chmod -R 777 /home/testuser/
などという、大雑把で危険なことをやっていました。
まあ、別に自宅サーバではないのですから特に問題はないと思います。
レン鯖にアップすれば、あちらで自動的にパーミッション
変更してくれますし。


ところが、この度無料の鯖を借りたのですが、そこでは規約通りの
パーミッションの設定をユーザが行うよう義務付けられていました。
そこで、フォルダ、PHPファイル、通常のファイルと、種類ごとに
パーミッションを一括して変更できる楽チンな方法はないかと
試行錯誤を重ねました。
そしてたどり着いたのが以下の方法です。


まずは、一連のパーミッション変更処理をファイルにまとめます。


【permission.sh】
#サブフォルダも含めて一括変更したいフォルダへ移動
cd /home/testuser/

#フォルダを『0701』に変更
find ./ -type d -exec chmod 0701 {} \;

#『.php』と『.ctp』ファイルを『0700』に変更
find ./ -type f -regex ".*\.\(php\|ctp\)" -exec chmod 0700 {} \;

#上記以外の通常ファイルは『0644』に変更
find ./ -type f -regex ".*\.*[^php|ctp]*" -exec chmod 0644 {} \;

#一時ファイルフォルダ配下は『1777』に変更(sticky bitを立てる)
find ./ -type d -name "tmp" -exec chmod -R 1777 {} \;

上記のような命令が書かれたファイルに対して、管理者で実行する
権限を与えます。

sudo chmod u+s /home/testuser/permission.sh
あとは、FTP転送の前に、そのつどパーミッションを変更すればOKです。

# . /home/testuser/permission.sh


なお、Apacheの設定ファイルの User と Group を自身のユーザ名に
変更する必要があります。
デフォルトではnobodyとなっているため、パーミッションが700だと
ファイルを読み込むことすらできません。


httpd.conf】
#ログインしているユーザ名
User sutara
Group sutara