ファイルのパーミッションとアクセス制御
パーミッションとは、ファイルやディレクトリなどに設定する、ユーザーやユーザーグループごとのアクセス権限のことをいいます。
パーミッション
「誰に対してアクセス権限を設定するのか?」と、「どのようなアクセス権限を与えるのか?」を設定します。
誰に対してアクセス権限を設定するのか
パーミッションは、「User(所有者)」 「Group(グループメンバー)」 「Other(他のユーザー)」の3つの立場に対して、設定をすることができます。
ls
コマンドを使用してファイルのアクセス権限を確認してみます。
$ ls -l drwx------ 15 shin staff 480 Jul 6 22:18 Documents lrwxr-xr-x 1 shin staff 17 Aug 25 2019 WebSite -> ../Documents/Site -rwx------ 1 shin staff 18124 Feb 15 2011 tips.xlsx $
r, w, x, - という文字が、3つのブロックで並んでいるのが確認できます。これがアクセス権限です。
s, t といった特殊な権限もあります。
$ ls -l /usr/bin/crontab -rwsr-xr-x 1 root wheel 171104 Sep 5 18:17 /usr/bin/crontab $ $ ls -l /usr/bin/write -r-xr-sr-x 1 root tty 119200 Sep 5 18:17 /usr/bin/write $ $ ls -dl /tmp drwxrwxrwt 27 root wheel 864 Oct 13 23:13 /tmp $
どのようなアクセス権限を与えるのか
アクセス権限は以下の通りです。
ファイルタイプ | 意味 |
---|---|
d | ディレクトリ |
- | ファイル |
l | シンボリック・リンク |
権限 | 意味 | chmodビット | ファイル | ディレクトリ |
---|---|---|---|---|
r | 読み込み | 4 | ファイルの内容を表示 | ディレクトリ内のリスト表示 |
w | 書き込み | 2 | ファイルの上書き、変更 | ディレクトリ内にファイル作成、削除 |
x | 実行 | 1 | 実行ファイルの実行 | そのディレクトリに移動 |
- | 権限なし | 0 | 権限なし | 権限なし |
s | SUID | 4 | コマンドが所有者の権限で実行される | 意味なし |
s | SGID | 2 | コマンドが所有グループの権限で実行される | 意味なし |
T, t | スティッキービット | 1 | 意味なし | 所有者およびrootのみ削除や名前の変更が可能、他のユーザーはファイルは作れるが削除は不可能(/tmp などに利用されている) |
※ SUID, SGIDは、実行可能なコマンドのみ有効、ただしスクリプトファイルには無効
ちょっとわかりにくいディレクトリのアクセス権限
条件 | 権限 | 動作 |
---|---|---|
読み込み権限が無い | r → - | ディレクトリ内のファイルの一覧が表示できない。 |
書き込み権限が無い | w → - | ディレクトリ内にファイルやディレクトリを作成/削除できない。 |
実行権限が無い | x → - | ディレクトリ内に移動する事ができない。ディレクトリ内のファイルの内容/所有者/権限も確認できない。 |
読み込み権限はあるが 実行権限がない | r-- rw- |
ファイルの一覧は表示できるが、ディレクトリ内に移動する事はできない。ファイルの所有者や権限情報も表示できない。(ls dir はできるが ls -l dir はできない) |
読み込み/実行権限はあるが 書き込み権限がない | r-x | ディレクトリ内に移動する事はできるが、ディレクトリ内にファイルを作成する事はできない。 |
読み込み/書き込み/実行権限がある | rwx | ディレクトリに移動やディレクトリ内にファイルやディレクトリを作成/削除ができる。 |
他のユーザーにファイル作成は許可するが、削除は禁止したい | rwt | ディレクトリに対してスティッキービット(t)を設定する。 |
ディレクトリの実行権限の影響 | x | 下記のようなディレクトリで、それぞれに 読み込み/書き込み/実行権限がある場合/home/user01/dir1/dir2/dir3/ dir1の書き込み権限を削除してもdir2,dir3で書き込みができなくなることはないが、dir1の実行権限を削除するとdir2,dir3にも移動ができなくなる。 書き込み権限では、その親ディレクトリの権限を確認すれば分かるが、実行権限が足りなくて操作できない場合、所属する上層のディレクトリも確認しなければならないことがある。 |