65行目: 65行目:
  
 
  rm /var/www/testdir/testfile
 
  rm /var/www/testdir/testfile
 +
 +
[[Category:Linux]]
 +
[[Category:Apache]]

2013年4月20日 (土) 22:56時点における最新版

apacheユーザのumask値を変更する

環境

# cat /etc/redhat-release
Fedora release 13 (Goddard)

背景

  • webアプリケーションでは、ソースの配置はローカルユーザで行いますが、実際の動作はapacheユーザとなります。そうすると下記のようなことが起きるケースがあります。
    • webアプリケーションが出力するログファイルやキャッシュファイルはapacheユーザーが作成します。つまり、ファイルの所有者はapacheとなります。
    • ローカルユーザがメンテナンスで不要なキャッシュファイルを削除できません。なぜなら、所有者/所有グループ=apache/apache、アクセス権限はrw-r--r--であるためです。
  • これを解決するため、apacheユーザのumask値を変更し、ディレクトリにはsetgidを設定します。
  • (httpd.confでUserディレクティブ、Groupディレクティブを適切に指定する方法も当然あると思います)

準備

確認用ディレクトリを作成。setgid & chgrpします。

sudo mkdir /var/www/testdir
sudo chmod 2775 /var/www/testdir
sudo chgrp apache /var/www/testdir/
ls -l /var/www/
drwxrwsr-x   2 root      apache      4096 2011-06-06 02:13 testdir

確認用phpプログラム

httpd経由でアクセスできるディレクトリに配置します。

<?php file_put_contents('/var/www/testdir/testfile', 'this is test file');

現状の確認

httpdにファイルを作成させ、現状を確認します。上記確認用プログラムへブラウザからアクセスします。

ls -l /var/www/testdir
-rw-r--r-- 1 apache apache 17 2011-06-06 02:23 testfile

umask値の変更

/etc/rc.d/init.d/functionsによってumask値は022にセットされています。これをhttpd起動時のみ002に変更します。(rootユーザで行います)

# echo "umask 002" >> /etc/sysconfig/httpd
# /etc/init.d/httpd restart

変更後の確認

先ほどのファイルを削除します。

sudo rm /var/www/testdir/testfile

再度確認用プログラムにアクセスし、アクセス権限がrw-rw-r--に変化していることを確認します。

ls -l /var/www/testdir
合計 4
-rw-rw-r-- 1 apache apache 17 2011-06-06 02:24 testfile

グループ追加

メンテナンスを行うユーザをapacheグループに所属させます。

sudo usermod -G apache -a maintenanceuser

メンテナンスユーザーでログインし、ファイルを削除できるか確認します。

rm /var/www/testdir/testfile

facebook slideshare rubygems github qiita