ファイル作成時のパーミッション: umask値

2013年5月28日

アメリカは3連休で今日から仕事始まりなんですよね?昨日メモリアルデーだったということで。
昨日の私は何の日だったんだろう。
……燃えるゴミの日。

ファイル作成時のパーミッション

WordPressを使ってみて、今までに何度かパーミッションで悩まされていますが、こう思ったことはありませんか?

自分で何も設定してない時のデフォルトのパーミッションって何なの?

私は思いました。なので今回それについて書いてみます。
WordPress関連のファイルが入っているディレクトリを見てみた場合。
[username html]$ ls -l
total 184
-rw-r--r-- 1 apache apache   395 Feb 22 14:31 index.php
-rw-r--r-- 1 apache apache 19929 Feb 22 14:31 license.txt
-rw-r--r-- 1 apache apache 13270 Feb 22 14:31 readme.html
-rw-r--r-- 1 apache apache  3316 Feb 22 14:31 readme-ja.html
-rw-r--r-- 1 apache apache  4663 Feb 22 14:31 wp-activate.php
drwxr-xr-x 9 apache apache  4096 Feb 22 14:31 wp-admin
-rw-r--r-- 1 apache apache   271 Feb 22 14:31 wp-blog-header.php
-rw-r--r-- 1 apache apache  3522 Feb 22 14:31 wp-comments-post.php
-rw-r----- 1 apache apache  4566 Feb 24 19:09 wp-config.php
-rw-r--r-- 1 apache apache  4289 Feb 22 14:31 wp-config-sample.php
drwxr-xr-x 8 apache apache  4096 May 24 13:09 wp-content
-rw-r--r-- 1 apache apache  2718 Feb 22 14:31 wp-cron.php
drwxr-xr-x 9 apache apache  4096 Feb 22 14:31 wp-includes
-rw-r--r-- 1 apache apache  1997 Feb 22 14:31 wp-links-opml.php
-rw-r--r-- 1 apache apache  2408 Feb 22 14:31 wp-load.php
-rw-r--r-- 1 apache apache 29310 Feb 22 14:31 wp-login.php
-rw-r--r-- 1 apache apache  7723 Feb 22 14:31 wp-mail.php
-rw-r--r-- 1 apache apache  9899 Feb 22 14:31 wp-settings.php
-rw-r--r-- 1 apache apache 18219 Feb 22 14:31 wp-signup.php
-rw-r--r-- 1 apache apache  3700 Feb 22 14:31 wp-trackback.php
-rw-r--r-- 1 apache apache  2719 Feb 22 14:31 xmlrpc.php
全てのファイルは「-rw-r–r–(644)」、ディレクトリは「drwxr-xr-x(755)」になっています。
ちょっとまた昔作ったパーミッションの図出してくるけど

↑見方はこれを参照してね。
それでなぜこういう値になるのかというと、あらかじめ設定されている「umask値」というものが関係しているそうです。

umask

umask(User Mask)は簡単に言ってしまえば「許可したくない」値。
ファイルの場合は「-rw-rw-rw-(666)」、ディレクトリの場合は「drwxrwxrwx(777)」から許可したくない値(umask値)を引いたものがパーミッションとなっています。
rootのumask値を確認してみました。
$ su
Password:
# umask
0022
1番左の桁は特殊なパーミッションのためのものなのでとりあえず気にしなくていいようで、この場合umask値は022になります。
umask値を引いた値がパーミッションになるので、所有者がrootで作成されたファイルは「666-022=644」、ディレクトリは「777-022=755」になります。

所有者がapacheになっているWordPress関連のファイルも同じパーミッションなので、apacheのumask値も022ってことになりますね。

umask値を変更してみる

失敗して何かあったら恐いので(笑)、WordPressと関係ないところで実験してみます。
普段FTPソフトでログインしている一般ユーザーのumask値を確認してみると
$ umask
0002
002だそうです。新規にファイル(ファイル名:file1)やディレクトリ(ディレクトリ名:dir1)を作成して確認してみます。
$ touch file1
$ mkdir dir1
$ ls -l
total 56
drwxrwxr-x 2 username username  4096 May 27 14:19 dir1
-rw-rw-r-- 1 username username     0 May 27 14:19 file1
file1は「-rw-rw-r–(664)」、dir1は「drwxrwxr-x(775)」。それぞれ002が引かれているので合っていますね。
じゃあこのumask値をrootと同じ022に変更してみます。umaskと打った後に指定したい値を入力すればOK。
$ umask 022
これで値が変わったので、新規にfile2とdir2を作成してみます。
$ touch file2
$ mkdir dir2
$ ls -l
total 60
drwxrwxr-x 2 username username  4096 May 27 14:19 dir1
drwxr-xr-x 2 username username  4096 May 27 14:22 dir2
-rw-rw-r-- 1 username username     0 May 27 14:19 file1
-rw-r--r-- 1 username username     0 May 27 14:22 file2
file2は「-rw-r–r–(644)」、dir2は「drwxr-xr-x(755)」になりました!

apacheのumask値を変更する場合はhttpdを編集する

今回は一般ユーザーのホームディレクトリでちょこっと実験しただけですが、WordPress関連ファイルの所有者であるapacheのumask値を変更するのは上記方法ではできません。apacheユーザーでログインできるように設定していないですし。
apacheのumask値の確認はfunctionsでできました。
# vi /etc/rc.d/init.d/functions
このファイルの9行目
# Make sure umask is sane
umask 022
ただしfunctionsは沢山の関数が定義されている大元のファイルなので、ここを直接編集するのは危険だそうです。シェルを勉強していない私にはうまく説明できませんが、「/etc/sysconfig/httpd」ファイルに追記することで変更が可能になるようです。
ここから先はネット上を調べて回った&社内の人に聞いたメモ!実際に私は実験していません。今のところapacheのデフォルトパーミッションを変更しなければいけないような状況にはなっていないし、今の私にはまだちょっと失敗が恐いのでここはスルーさせて…w
# echo "umask 002" >> /etc/sysconfig/httpd
# /etc/init.d/httpd restart
umaskを002に変更したい時のコマンド。
「>>」は追加の意味になり、”"間のワードがファイルの最後の行に追記されます。1個だけの「>」だとファイル内の全てが”"間のワードに置き換わっちゃうので注意!

全てのサーバーがこの方法で対処できるとは限らないと思いますし、他の方法もあるかもしれません。ここは1つの方法として参考程度に留めていただければ。


——————–

毎回トップ画像に悩んでます。
マスクを描こうとした→口用マスクは風邪っぽい→顔全体を覆う仮面だとアノ○マスっぽい→アイマスクだと昼寝っぽい→んじゃマスカレードマスクで。
マスカレードマスクとか初めて描いたわ…イラレ難しー。