UNIX系のアクセス権

なにやら「共用サーバー上のwordpressで設定ファイルを他のユーザーに読まれ、乗っ取られる」みたいな話がある様子なのですが、その周辺の話を見ていると「設定ファイルのアクセス権を444から404にしたのにパスワードを読まれたのでおかしい」みたいなのがあって、画面の前で軽くこけました。


UNIX系(と言うかlinux)のシステムではよくアクセス権の制限について三桁の数字が並ぶことがあります。

chmod 644 filename


まずそれぞれの数字、これは3bit分の設定をまとめて書いているもので、0から7になります。なぜ3ビットかというと「読み込み」「書き込み」「実行」の三つの権利について設定するものだからですね。

真面目にまとめると、以下のようになります。二つ目は対応する2進数表現です。

  • 0:000 何もできません
  • 1:001 実行のみできます
  • 2:010 書き込みのみできます
  • 3:011 書き込みと実行ができます
  • 4:100 読み込みのみできます
  • 5:101 読み込みと実行ができます
  • 6:110 読み込みと書き込みができます
  • 7:111 読み込みと書き込みと実行ができます


次にそれぞれの桁が何を意味するかというと、

  • ファイル(ディレクトリ)の所有者であるユーザー
  • ファイルの所有者であるグループに所属しているユーザー
  • 上記のどちらでもないユーザー

に割り当てられた権利を意味しています。

UNIX系ではファイルにユーザーとグループの2種類の所有者が設定されます。

chown foo:bar filename

とすると「ユーザーはfoo、グループはbar」として所有権が設定されます。

最も一般的な設定では、ユーザーfooに対応してグループfooが存在してファイルの所有者は「ユーザーがfoo、グループもfoo」になっている事が多いですが、複数の人間が一つのファイルを触る時にはグループを作成してグループの所有権を利用して作業したりします。


一番最初にあげた例では「所有者は読み書き可能、それ以外は読み込みのみ可能」という設定になります。(chmodはアクセス権を変更するコマンド。)



…という一連の説明を読んでもらうと分かると思うのですが、「アクセス権を404に設定する」というのは「全ユーザーで読み取り可能」という意味になるので、「他のユーザーが読めても当然じゃないか」と言うことになるわけです。

しかも「444から404」に変えても、読み込み可能なユーザーには変化がありません。あえて言うと「所有者グループ」のメンバーは読めなくなったかもしれません。*1手元のlinuxで「004」を設定すると、所有者からは読めなくなりました。
ロリポップのサイト改ざん事件に学ぶシンボリックリンク攻撃の脅威と対策 | 徳丸浩の日記」によると、レンタルサーバーでは「利用者全員を含むグループがある」とのことなので、その意図でグループの読み取り権限を制限しているようです。


「その他のユーザー」に所有者より大きな権限が与えられているというパターンは普通はありません。



一般的にアクセス権を制限していく時には「最後の桁から0にしていく」と言う手順になります。「444から440」で所有者(ユーザーとグループ)でない他のユーザーには読めなくなり、「440から400」で所有ユーザーにしか読めなくなります。「400から000」にするとだれにも読めなくなります(笑)

*1:ひょっとしてその効果を狙ったのかもしれません。どのlinux系でも共通してそういう動作になるのかどうかは不明です。…しかし、それで制御できるパターンはかなり苦しいものしか思いつかない。