はじめに
パーミッションと聞くと難しそうで苦手意識があります。勉強したので備忘録。
参考文献:新しいLinuxの教科書、著者 三宅英明・大角祐介
パーミッションとは
パーミッション=アクセス権のこと。
Linuxで使用されるファイルやディレクトリに対してオーナーはアクセス権限を自由に設定できます。
オーナー(所有者)・グループ・その他のユーザーそれぞれに対して、読み取り・書き込み・実行の3つの権限を設定できます。
パーミッションの確認
下記コマンド(ls -la
)でカレントディレクトリの中のファイルやディレクトリのパーミッションを確認可能。
$ ls -la
-rwxr-xr-- 1 owner group 3771 3月 31 21:10 file1
drwxr-xr-x 6 owner group 4096 3月 31 21:10 dir1
ファイルの場合先頭文字が-、ディレクトリの場合は先頭文字がdで表示されます。(ファイルタイプ)
先頭文字以降の9文字の文字列がパーミッションを表しています。
文字列は3文字ごとに1つのブロックになっており先頭から、オーナー・グループ・その他のユーザーに対応しています。
ファイルのパーミッション
-rwxr-xr-- 1 owner group 3771 3月 31 21:10 file1
オーナー:rwx
グループ:r-x
その他のユーザー:r--
r | w | x |
---|---|---|
読み取り(read) | 書き込み(write) | 実行(execute) |
操作が許可されているときはr
・w
・x
という記号、許可されていない時は-
で表示されます。
つまり、このファイルに対して、オーナーには読み取りと書き込みと実行の権限、グループ所属ユーザーには読み取りと実行の権限のみ、その他のユーザーには読み取りの権限のみが与えられていることになります。
ディレクトリのパーミッション
drwxr-xr-x 6 owner group 4096 3月 31 21:10 dir1
オーナー:rwx
グループ:r-x
その他のユーザー:r-x
r | w | x |
---|---|---|
読み取り ディレクトリに含まれるファイル一覧取得 |
書き込み ディレクトリ下のファイル・ディレクトリ作成と削除 |
実行 ディレクトリをカレントディレクトリにする |
ファイルと同じように操作の許可と非許可は同じ記号で表示されますが、操作内容が異なっています。
上記の表のとおり、ディレクトリのパーミッションに「w」が設定されている場合、そのディレクトリ下のファイルの削除ができます。
これは、そのファイル自身のパーミッションには関係なく削除できてしまうため注意が必要です。
パーミッションの変更
パーミッションの変更はchmodコマンドを使用します。
※パーミッションを変更できるのはオーナーかスーパーユーザーのみ。
- 数値モード
$ chmod <8進数の数値> <ファイル名>
パーミッションを数値で表現して指定する方法です。
4 | 2 | 1 |
---|---|---|
読み取り(r) | 書き込み(w) | 実行(x) |
rwxのうち許可する操作の分だけ数値を足し算して、オーナー・グループ・その他のユーザーの順に並べて指定します。
以下のようなパーミッションを持つfile2のパーミッションを変更してみます。
$ ls -l file2
-rw-r--r-- 1 owner group 0 3月 31 22:35 file2
// オーナー: 読み取りと書き込み、グループとその他のユーザー: 読み取り
$ chmod 755 file2
$ ls -l file2
-rwxr-xr-x 1 owner group 0 3月 31 22:35 file2
// オーナー: 読み取りと書き込みと実行、グループとその他のユーザー: 読み取りと実行
上記chmodコマンド(chmod 755 file2
)ではオーナーに 7 (4+2+1)、グループとその他のユーザーに 5 (4+1)のパーミッションを指定しています。
絶対指定となるため、元のパーミッションが何であれ指定したものへ変更されます。
- シンボルモード
$ chmod [ugoa][+-=][rwx] <ファイル名>
誰にどのような権限を指定するのかを指定する方法です。
パーミッションの一部だけ変更したい場合に使用されることが多いです。
u | g | o | a |
---|---|---|---|
オーナー | グループ | その他のユーザー | ugoすべて |
+ | - | = |
---|---|---|
追加 | 削除 | 指定した権限と等しくする |
ユーザーの指定を省略するとaと同義になります。以下例。
$ ls -l file3
-r--r--r-- 1 owner group 0 3月 31 22:45 file3
// オーナー、グループ、その他のユーザー: 読み取りのみ
$ chmod u+w file3
$ ls -l file3
-rw-r--r-- 1 owner group 0 3月 31 22:45 file3
// オーナー: 読み取りと書き込み、グループとその他のユーザー: 読み取りのみ
$ ls -l file4
-rw-rw-r-- 1 owner group 0 3月 31 22:50 file4
// オーナー、グループ: 読み取りと書き込み、その他のユーザー: 読み取りのみ
$ chmod g-w file4
$ ls -l file4
-rw-r--r-- 1 owner group 0 3月 31 22:50 file4
// オーナー: 読み取りと書き込み、グループとその他のユーザー: 読み取りのみ
$ ls -l file5
-rwxrwxrwx 1 owner group 0 3月 31 23:04 file5
// オーナー、グループ、その他のユーザー: 読み取りと書き込みと実行
$ chmod go=r file5
$ ls -l file5
-rwxr--r-- 1 owner group 0 3月 31 23:04 file5
// オーナー: 読み取りと書き込みと実行、グループとその他のユーザー: 読み取りのみ