Permission とは?
- だれがどのファイルを編集できるかを制限できるもの
- ユーザー,グループ,その他の単位で制限できる
- 強制アクセス制御を用いることでもっと細かく制限できるがここでは割愛
- 大規模計算機など複数人で共有するマシンでは適切なパーミッションを設定することが重要
Permission の基本
- 制御の単位は「書き込み・読み込み・実行」を「自分・グループ・その他」に対して制御する
-
ls -l
で現在のパーミッションを確認できる
$ ls -lh
合計 344M
-rw-r--r--. 1 hogehoge foo 36M 6月 10 22:52 Python-2.7.10-centos6.tar.xz
drwxr-xr-x. 15 hogehoge foo 4.0K 6月 11 00:33 R-3.2.0/
- 最初の
drwxr-xr-x
となっている部分がパーミッションを表す. -
hogehoge foo
の部分は最初が所有しているユーザー名,次がグループ名
Permission の読み方
-
drwxr-xr-x
の部分は4つにわけて考える
-
d
の部分はディレクトリか否かを表す - 次の
rwx
は所有しているユーザーの権限を表す
-
r
は読み込み可(Directoryでは一覧を取得可) -
w
は書き込み可(Directoryはファイルの作成や削除ができる) -
x
は実行可(Directoryではアクセス可)
- その次の
r--
はグループに所属するユーザーの権限を表す
- 各項目は所有ユーザーと同じで,権限がない場合には
-
になる
- 最後の
r--
はその他のユーザーの権限を表す
自分の所属するグループの確認法
-
id
コマンドで確認できる
$ id
uid=1001(hogehoge) gid=1004(foo) groups=1004(foo),1007(bar)
- この例ではユーザー
hoge
はグループfoo
とbar
に属している - どのようなユーザーやグループが存在しているかは
getent passwd
とgetent group
で調べることができる- ファイルとしては
/etc/passwd
や/etc/group
に書かれているが,環境によってはすべて書かれているとは限らないのでgetent
で調べる
- ファイルとしては
Permissionの変更方法
-
chmod
で変更できる(Change Modeの略) -
すべてのユーザーに対して実行権限を付加する
chmod +x hoge
-
すべてのユーザーに対して実行権限と読み込み権限を付加する
chmod +rx hoge
-
所有しているユーザーに対して書き込み権限を付加する
chmod u+w hoge
-
所有しているユーザーとグループに対してに対して読み込み権限を付加する
chmod ug+r hoge
-
chmod [ugo]+[rwx] FILE
で権限を付加する-
u
が所有ユーザー,g
は所有グループ,o
はその他 -
r
は読み込み,w
は書き込み,x
は実行権限
-
-
chmod [ugo]-[rwx] FILE
で権限を剥奪する -
これ以外に現状にかかわらず特定のパーミッションに設定することもできる
-
chmod 600 FILE
は所有ユーザーにのみ読み書きの権限を与える -
権限の種類で数字を決定する
-
1
は実行権限 -
2
は書き込み権限 -
4
は読み込み権限 - これらの数字の和を使う
-
-
3桁の数字は前から所有ユーザー,所有グループ,その他のユーザー
Ownerの変更方法
- ファイルの所有者を変更にするには
chown
コマンドを使用する(Change
Ownerの略) -
chown USER:GROUP FILE...
として使う - 管理者権限がない場合には所有ユーザーを書き換えることはできない
$ chown hogehoge:bar sample.txt
この例ではsample.txt
を所有ユーザーをhogehoge
に,所有グループを
bar
に書き換えている
課題
- 自分のホームディレクトリに自分と
student
グループに所属する人だけが見れるファイルを作成しなさい - 自分のホームディレクトリに自分以外のユーザーが書き込めるけど中身をみることができないディレクトリを作成しなさい
- テスト用環境では学部生は
student
とundergraduate
に所属し,院生は
student
とgraduate
グループに所属している
こたえ
-
chmod 640 FILE
とchown :student FILE
を実行する -
chmod 733 DIR
を実行する- フォルダの中身にアクセスし,ファイルの作成などはできるが,リストはとれない
まとめて変更する
-
chmod
もchown
も-R
オプションをつけることでディレクトリの中身をまとめて変更できる - 多くの場合,ディレクトリは755にして,ファイルは644にするが,
-R
でやると区別がつかないので注意- その場合には
find
と組み合わせるとよいがここでは解説しない
- その場合には
補足:実行権限とは?
- 実行可能なプログラムには実行権限をつける必要がある
- 実行可能なプログラムはCをコンパイルして作ったバイナリの他,Shell Script や Python のプログラムが含まれる
- Python のプログラムでは
python SCRIPT.py
の様に実行する場合には実行権限をつける必要はないが,./SCRIPT.py
として,python
をつけずに実行する場合には権限をつける必要がある- 1行目に
#!/usr/bin/env python
といった Shebang を書く必要がある - Ruby や Shell Script も同様
- 1行目に
補足:rootユーザーとは?
- rootユーザーはパーミッションを無視してすべてのファイルが読み書き可能
- 実行権限だけは所有のパーミッションの影響を受ける
-
sudo
を使うことで一時的にroot
ユーザーになれる- ただし,許可されている場合のみ
余談
- 誰がログインしているかは
who
コマンドで調べられる - 誰が何をしているかは
w
コマンドで調べられる - 誰がどのようなコマンドが実行しているかは
ps aux
で調べられる
まとめ
- Permission は誰がどのファイルにアクセスでき,読み込みや書き込み,実
行ができるのかを制限できる -
chmod
とchown
でパーミッションを変更したり,所有者を変更することが
できる