Linuxのパーミッションについてよくわからないまま設定していませんか?
パーミッションの設定を間違えると他のユーザにファイルを操作されてしまったり、秘密のファイルを他人に見られてしまうことだってあり得ます。
Linuxは基本的に複数のユーザが一つのマシンを操作することを前提に設計されていますので、どのユーザにどのファイルを見せるかというのを制御する仕組みが備わっています。
ここではファイルの保護を実現するためのアクセス権について詳しく解説しています。
これを読めばLinuxのアクセス権限の仕組みやその設定方法がわかるようになります。
ファイルの所有者とグループとは
Linuxで扱われるファイルは個々のユーザが所有しているものから、システムが提供するライブラリや実行コマンドまで全てに所有者が割り当てられています。
所有者のことをオーナーと言ったりもします。
ファイルの所有者を確認する方法はlsコマンドに-lオプションをつけて実行します。
例として、cdコマンドの実行ファイルである/bin/cdの所有者を確認してみましょう。
rootと2つ表示されています。
一つ目がこのファイルの所有者で二つ目はファイルが所属しているグループを表しています。
つまり、/bin/cdファイルは所有者がrootでrootグループに所属していると言うことになります。
では、別のユーザがファイルを作成した場合はどうなっているのでしょうか?
testuserという名前のユーザで作成したファイルの所有者をみてみます。
testuserというユーザが作成したファイルの所有者は作成したユーザになることがわかります。
グループとは
グループとはユーザをまとめた集まりのことです。
例えば、システム管理者の役割を持つユーザが複数いる場合、管理者用のグループを作成し、そこにユーザを所属させます。
グループに権限を与えることでそこに所属するユーザに対してまとめて権限の指定をすることができます。
自分がどのグループに所属しているかを確認するためにはgroupsコマンドで確認することができます。
$ groups
testuser
ファイルのパーミッションとは
ファイルには、誰にどのような操作を許可するかという権限が決められています。
この情報のことをパーミッションと言います。
先ほどのcdコマンドの実行ファイルの詳細をもう一度見てみましょう。
先頭の「-」はファイルタイプを示します。
記号 | ファイルタイプ |
– | 通常ファイル |
d | ディレクトリ |
l | シンボリックリンク |
ファイルタイプの後ろの9文字「rwxr-xr-x」の部分はファイルモードと呼ばれ、これがパーミッションを表しています。
3文字ごとに1つのブロックになっていて、この場合「rwx」「r-x」「r-x」に分けることができます。
それぞれ、「オーナー」「グループ」「その他のユーザ」に対するパーミッションを表しています。
rやwなどの文字は権限を意味しています。
記号 | 意味 |
r | 読み取り(read) |
w | 書き込み(write) |
x | 実行(execute) |
それぞれの権限について許可されている場合はそれぞれの記号で表され、権限が与えられていない場合は「-」で表されます。
つまり、/bin/cdファイルに対する権限は以下のようになります。
ユーザ種別 | 読み取り | 書き込み | 実行 |
所有者 | 許可 | 許可 | 許可 |
グループ | 許可 | 禁止 | 許可 |
その他のユーザ | 許可 | 禁止 | 許可 |
ディレクトリのパーミッションとは
ファイルと同様にディレクトリにもパーミッションが設定されています。
ディレクトリに対するパーミッションの記号はファイルの記号と同じですがファイルの場合と意味が異なります。
記号 | 意味 |
r | 読み取り:ディレクトリに含まれるファイル一覧の取得 |
w | 書き込み:ディレクトリの下にあるファイル・ディレクトリの作成、削除 |
x | 実行:ディレクトリをカレントディレクトリにする |
例えば、あるディレクトリに対する読み込みのパーミッションが付与されていない場合、lsコマンドはエラーを出力します。
また、ディレクトリのパーミッションにwが設定されている場合、そのディレクトリ下のファイルの作成、削除が行えます。ここで、ファイルの削除ができるかどうかはディレクトリのパーミッションで決まり、ファイル自身のパーミッションによらないことに注意してください。
chmodコマンドでファイルのモードを変更する
ファイルやディレクトリのパーミッションを変更するにはchmodコマンドを使用します。
パーミッションの指定には2種類の方法があります。
- シンボルモード
- 数値モード
それぞれ解説していきます。
シンボルモード
シンボルモードは次のような書式で実行します。
chmod [ugoa] [+-=] [rwx] <ファイル名>
誰にどのような権限を<ファイル名>に与えるかという指定になります。
[ugoa]は対象ユーザを指定します。指定しなかった場合はaを指定したとみなされます。
記号 | 意味 |
u | 所有者(オーナー) |
g | グループ |
o | その他のユーザ |
a | ugoすべて |
記号 | 意味 |
+ | パーミッションを追加する |
– | パーミッションを禁止する |
= | 指定したパーミッションと等しくする |
例えば、file.txtというファイルに対してオーナーの書き込み権限を禁止したい場合は以下のようになります。
$ chmod u-w file.txt
数値モード
数値モードで指定する場合の書式は次の通りです。
chmod <数値> <ファイル名>
シンボルモードは相対的に権限を指定するのに対して、数値モードではrwxの全てに対して指定し直す、絶対指定をします。
設定値がrwxの3つでそれぞれ許可、禁止の2パターンなので8通りの組み合わせができます。
それを0~7の数値で指定していきます。
数値モードでのパーミッション数値は以下のようになっています。
意味 | 数字 |
読み取り | 4 |
書き込み | 2 |
実行 | 1 |
与えたい権限の数値を足してオーナー、グループ、その他のユーザの順に並べて指定します。
例えば、「rwxr-xr-x」というパーミッションは755と表すことができます。
$ chmod 755 file.txt
$ ls -l file.txt
-rwxr-xr-x 1 testuser testuser 0 Jan 29 20:24 file.txt
Linuxのファイルパーミッションまとめ
ファイルのパーミッションについて解説してきました。
新規にアプリケーションをインストールしたり、自分でシェルスクリプトを作成した場合には、権限設定を自分でする必要があります。
ここで解説したことを参考にして設定してみてください。
コメント