あなたのIPv4アドレス:
オペレーティングシステム:
プロバイダー:

chmodのパーミッションの仕組み:755、644、スティッキービット

Unix系のシステムでは、chmodでファイルやディレクトリのアクセス権限を変更します。読み取り・書き込み・実行の権限は、所有者、グループ、その他のユーザーごとに個別に設定します。ディレクトリの権限には独自の意味があり、名前の一覧表示、エントリの作成や削除、既知のパスへのアクセスに影響します。

数値モードとシンボリックモード

chmod u+x script.shのようなシンボリック形式のコマンドを実行すると、所有者にファイルの実行権限が付きます。数値モードでは、読み取りが4、書き込みが2、実行が1です。つまり755はrwxr-xr-xを表し、所有者は読み取り・書き込み・実行ができ、グループとその他のユーザーは読み取りと実行ができます。644は一般公開する通常のファイルによく使われますが、それが適切かどうかはアプリケーション次第です。見慣れた数値を、どんな場面にも通用するセキュリティ設定だと考えないでください。

ディレクトリの権限が重要な理由

ディレクトリの場合、読み取り権限があれば中の名前を一覧表示でき、書き込み権限があればエントリを変更でき、実行権限があれば既知のパスをたどれます。ファイルを削除できるかどうかは、通常そのファイル自体の書き込み権限ではなく、親ディレクトリの権限で決まります。そのため、444に設定したファイルでも、ディレクトリに十分な権限を持つユーザーなら削除できてしまいます。この違いはGNU Coreutilsのマニュアルで説明されています。目的のファイルが読み取り可能に見えるのにアクセスできない場合は、すべての親ディレクトリと、サービスがどのユーザーで動作しているかを確認してください。

Webホスティングでの例

Webサーバーが読み取る必要はあるものの、更新できるのは所有者だけにしたいHTMLファイルのディレクトリがあるとします。出発点としては、ディレクトリを755、通常のファイルを644にするのが一般的です。それでも、サービスアカウントやグループ、ホスティング会社のルールは考慮する必要がありますし、非公開の設定ファイルにはさらに厳しい権限が必要な場合もあります。エラーを消すためにすべてを777にすると、ローカルユーザーに広範な変更権限を与えることになり、セキュリティ上の問題を招きかねません。変更する前に、statやls -lで現在の所有者と権限を確認しましょう。

setuid、setgid、スティッキービット

8進数の先頭に4桁目を付けると、特殊ビットを指定できます。setuidは4、setgidは2、スティッキービットは1です。たとえば4755は実行ファイルのsetuidを有効にしますが、455ではそうなりません。プログラムに欠陥があると所有者の権限で実行されてしまうおそれがあるため、setuidは慎重に使う必要があります。ディレクトリにsetgidを設定すると、新しく作られるエントリがディレクトリのグループを引き継ぐようにできます。/tmpのような共有ディレクトリにスティッキービットを付けると、他のユーザーのファイルを勝手に削除したり名前を変更したりできないよう制限されます。chmod -Rを実行する前には、対象のツリーをよく確認してください。通常のファイル、実行ファイル、ディレクトリのすべてに同じモードが必要になることはまずありません。