Linuxにおけるファイルのアクセス権について,再勉強したのでまとめておく。
アクセス権とは
アクセス権とは,ユーザやグループがファイルやディレクトリに対して,アクセスするための権限のことである。
Linuxは1つのシステムを複数のユーザーで共有できる,マルチユーザー型のシステムなので,システム上のデータをどのユーザーでも自由に操作可能であると,セキュリティ上に問題がある。そこで,ファイルやディレクトリに対して,どういう操作を許可するのかというアクセス権を設定する。
ファイルやディレクトリは,ファイルの形式,アクセス権限,所有者,所有グループ,最終更新日時などの属性を持っている。ls -lコマンドによって,これらの属性を確認する事ができる。左から順番に,パーミッション,ファイルの所有者,ファイルの所有グループ,ファイルサイズ,最終更新日時,ファイル名となっている。

アクセス権には「読み取り権」,「書き込み権」,「実行権」の3種類がある。ファイルやディレクトリに対して,設定可能な3種類の権限について,以下の表にまとめる。
| 意味 | アルファベット表記 | 数字表記 | 説明 |
|---|---|---|---|
| 読み取り | r | 4 | ディレクトリ内の一覧表示が可能 |
| 書き込み | w | 2 | ディレクトリ内でファイルの作成/変更/削除が可能 |
| 実行 | x | 1 | ディレクトリ内のファイルにアクセスが可能 |
※パーミッション表記の一番左側に付けられる「d」や「c」などのアルファベットはファイルの種類を表している。「d」はディレクトリ,「c」は特殊ファイルとなる。
パーミッションのアルファベット表記について
パーミッションのアルファベット表記は,ls -lコマンドでファイルのパーミッションを表示した際に使用される。

上記画像では,赤枠で囲った部分がファイルのパーミッションである。これは,各アルファベットと-を3つずつに区切り,左から「所有者の権限」,「所有グループの権限」,「その他のユーザーの権限」と解釈する。

パーミッションの数値表記について
パーミッションの数値表記は,chmodコマンドでファイルのパーミッションを変更する際に使用される。chmodを使って,ファイルやディレクトリのパーミッションを変更する際の書式は以下のようになる。
chmod -c パーミッション ファイル名
記述例としては,以下のようになる。
chmod 764 smokydog.txt
「764」は数値表記のパーミッションである。数値表記のパーミッションは,所有者に与えられた権限が「rwx」(アルファベット表記)の場合,「4」+「2」+「1」=「7」となる。同様に「rw-」の場合は「4」+「2」=「6」,「r–」の場合は「4」となる。つまり,パーミッションの数値表記は,パーミッションの内容が足し算によって表される。
アクセス権の変更方法について
既に上記でも紹介したが,改めてchmodコマンドについて説明する。chmodコマンドは,ファイルやディレクトリのアクセス権を変更する際に使用する。
chmodコマンドの書式は,以下のようになる。
chmod オプション アクセス権 ファイル名
「オプション」には,代表的なものとして-Rがあるが,これはディレクトリのパーミッションを変更する際に,ディレクトリに含まれる全てのファイルのパーミッションを一緒に変更するオプションである。「アクセス権」の指定は,「対象ユーザー」,「操作」,「権限」の3つを指定することができる。
「アクセス権」に指定できる「対象ユーザー」「操作」「権限」の種類は以下の表のようになっている。
| 対象ユーザー | 説明 |
|---|---|
| u | 所有者 |
| g | 所有グループに属するユーザー |
| o | その他のユーザー |
| a | 全てのユーザー |
| 操作 | 説明 |
|---|---|
| + | 権限を追加する |
| – | 権限を削除する |
| = | 権限を指定する |
| 権限 | 説明 |
|---|---|
| r | 読み取り権限 |
| w | 書き込み権限 |
| x | 実行権限 |
| s | SUID,またはSGID |
| t | スティッキービット |
記述例としては,以下のようになる。
a.txtにその他のユーザーの読み取り権限を追加
chmod o+r a.txt
a.txtから所有者及び所有グループに属するユーザーの実行権限を削除
chmod ug-x a.txt
デフォルトのアクセス権について
ファイルやディレクトリを作成したときに設定されるデフォルトのアクセス権は,umask値で決定される。umask値は3桁の数値で,ファイルは「666」,ディレクトリは「777」からumask値を引いた値が,デフォルトのアクセス権となる。umask値はユーザーごとに設定される。
umask値を設定する際の書式は以下のようになる。
umask マスク値
具体的な記述例としては,以下のようになる。
umask 022
SUIDについて
SUID(Set User ID)とは,特殊なパーミッション(アクセス権)の一つで,実行可能ファイルに対して設定することが出来る。ファイルのパーミッションには「読み取り権」「書き込み権」「実行権」が存在するが,このうちの「実行権」に対してRootユーザのユーザIDをセットすることができる。RootユーザのユーザIDがセット出来ることによってRootユーザにしか実行権限がなかったファイルに対して編集などが可能になる。
例えば,/etc/passwdファイルは,ユーザー名やパスワードなどのユーザーアカウント情報を格納するファイルであるが,このファイルはパーミッションが「rw-r–r–」となっており,所有者である「root」以外は書き込みができないようになっている。しかし,一般ユーザがpasswdコマンドで自身のパスワードを変更すると,新しいパスワードは/etc/passwdファイルに保存される。何故このようなことが可能かというと,passwdコマンドには特殊なパーミッションであるSUIDが設定されており,実行時にroot権限に切り替わるからである。
SUIDを設定する際の書式は以下のようになる。
chmod u+s ファイル名
SUIDを設定するには,chmodコマンドで所有者「u」に対して権限「s」を追加する。SUIDが設定されたファイルのパーミッションの数値表記は,3桁の数値表記に「4000」を加えたものになり,「4777」のように書き表される。
SGIDについて
SGID(Set Group ID)とは,特殊なパーミッション(アクセス権)の一つで,実行可能ファイルおよびディレクトリに対して設定することができる。SGIDは,SUIDと機能的にはほとんど同じで,ファイルの「実行権」に対して,GroupのグループIDをセットすることができる。ディレクトリに対してSGIDを設定すると,そのディレクトリ内に作成されたファイルやディレクトリの所有グループが,ディレクトリ自体の所有グループに設定される。
SGIDを設定する際の書式は以下のようになる。
chmod g+s ファイル名
SGIDを設定するには,chmodコマンドで所有グループに属するユーザー「g」に対して,権限「s」を追加する。SGIDが設定されたファイルのパーミッションの数値表記は,3桁の数値表記に「2000」を加えたものになり,「2777」のように書き表される。
スティッキービットについて
スティッキービットとは,特殊なパーミッション(アクセス権)の一つで,ディレクトリに対して設定することができる。スティッキービットが設定されたディレクトリでは,書き込み権限はあっても,自分以外のユーザーが所有するファイルを削除することはできない。これはファイルのパーミッションを「777」に設定したいが,ファイル自体は他のユーザーに削除されたくない場合に使用する。
スティッキービットを設定する際の書式は以下のようになる。
chmod o+t ファイル名
スティッキービットを設定するには,chmodコマンドでその他のユーザー「o」に対して,権限「t」を追加する。スティッキービットが設定されたファイルのパーミッションの数値表記は,3桁の数値表記に「1000」を加えたものになり,「1777」のように書き表される。
ファイルの拡張属性について
ext2やext3といったファイルシステムでは,通常の属性(パーミッションや更新日時など)のほかに,拡張属性を設定することができる。ファイルの拡張属性を変更するには,chattrコマンドを使用する。
chattrコマンドの書式は,以下のようになる。
chattr オプション 拡張属性 ファイル名
拡張属性の指定は「操作」「属性」の2つを指定する。
「属性」に指定できる「操作」「属性」の種類を以下の表に示す。
| 操作 | 内容 |
|---|---|
| + | 属性を追加する |
| – | 属性を削除する |
| = | 属性を指定する |
| 属性 | 内容 |
|---|---|
| i | 変更不可 |
| d | dumpコマンド実行時にバックアップの対象にしない |
具体的な記述例としては,以下のようになる。
例では,ファイル「test.txt」に変更不可の属性を設定している。
chattr +i test.txt
また,拡張属性を確認するには,lsattrコマンドを使用する。
lsattrコマンドの書式は以下のようになる。
lsattr ファイル名
参考
かんたん!アクセス権 | ウナのLinux講座 | ウナのIT資格一問一答