9. Learning the shell — Lesson 9: Permissions
【所要時間】
2時間44分(2018年7月10日)
【概要】
パーミッションについて学ぶ
・chmod — modify file access rights
・su — temporarily become the superuser
・sudo — temporarily become the superuser
・chown — change file ownership
・chgrp — change a file’s group ownership
【要約・学んだこと】
・Permissions
Unix-like operatingシステムはマルチタスキングだけでなく、マルチユーザーという点でも他のシステムとは異なる。
同時に複数人が一つのコンピュータを操作できる。
・File Permissions
Linuxシステムでは、それぞれのファイルやディレクトリごとに、アクセス権利を持ったオーナーと、その他メンバーが割り当てられる。権利にはファイルの読み込み、書き込み、実行などがある。
Tats-MacBA-3:~ AsamiTasuya$ ls -l /bin/bash
-r-xr-xr-x 1 root wheel 618448 Dec 2 2017 /bin/bash
このとき
“-r-xr-xr-x”が意味することは、
1文字目 “-”か”d” : “-”がレギュラーファイル、”d”がディレクトリを意味する。
次の3文字”r-x” がファイルオーナーが持つread, write, executeのパーミッション
その次の3文字”r-x”がグループオーナーが持つread, write, executeのパーミッション
最後の3文字”r-x”がその他全てのユーザーが持つread, write, executeのパーミッション
・chmod
chmodコマンドはファイルやディレクトリのパーミッションを変えるのに使われる。ここでは2つある方法のうちのoctal notation metho(8進表記)を学ぶ。
rwx --- rw- = 111 000 110
のように、”r” “w” “x” は1、”-”は0で表す。
もしowner, group, otherの3セットのパーミッションを、それぞれ一つの数字で表すには、下記のように表す。
0 : ---
4 : r--
5 : r-x
6 : rw-
7 : rex
なんでこの割り当てか調べると、r = 4, w =2, x = 1の合計値ということでした。
e.g):
755(rwx r-x r-x) : オーナーのみがread, write, executeでき、他のユーザーはreadとexecuteのみできる。全てのユーザーが使用するときによく使う。
700(rex — — — -) : オーナーのみがread, write, executeでき、他のユーザーは何も出来ない。オーナーのみが使用し、他のユーザーからプライベートを守りたいときによく使う。
644(rex r — r — ) : オーなのみがread, writeでき、他のユーザーはreadだけ出来る。全員が読み、オーナーのみが書き換え可能なデータファイルでよく使う。
“my_dir”ディレクトリの”1.bak”ファイルのパーミッションを変えてみる。
元々は
Tats-MacBA-3:my_dir AsamiTasuya$ ls -l
total 32
-rw-r — r — 1 AsamiTasuya staff 0 Jun 29 22:45 1.bak
“-rw-r — r — “ となっているので、”chmod 777 1.bak”とコマンド入力すると
Tats-MacBA-3:my_dir AsamiTasuya$ chmod 777 1.bak
Tats-MacBA-3:my_dir AsamiTasuya$ ls -l
total 32
-rwxrwxrwx 1 AsamiTasuya staff 0 Jun 29 22:45 1.bak
“-rwxrwxrwx” と変わった。
元のValueに戻すには”chmod 644" 1.bak”とコマンドする。
Tats-MacBA-3:my_dir AsamiTasuya$ chmod 644 1.bak
Tats-MacBA-3:my_dir AsamiTasuya$ ls -l
total 32
-rw-r — r — 1 AsamiTasuya staff 0 Jun 29 22:45 1.bak
“-rw-r — r — “ に戻った。
・Directory Permissions
chmodコマンドはディレクトリのアクセスパーミンションのコントロールでも使うことができる。8進表記でパーミッションをセットできるが、r, w , and x の属性の意味は異なる。
r : x属性がセットしていれば、ディレクトリの中身をリスト化することを許可する
w : x属性がせっとしていれば、 ディレクトリ内にファイルを作成、削除、リネームすることを許可する
x : ディレクトリに入ることを許可する。
755 (rex r-x r-x) : ディレクトリのオーナーはフルアクセスできる。他のユーザーはディレクトリをリスト化することは可能だが、ファイルの作成や削除はできない。
700 (rex — — — -) : ディレクトリのオーナーはフルアクセスできる。他のユーザーは何もできない。オーナーのみが使用することができ、他のユーザーからプライベートを守るときに使用する。
“my_dir”ディレクトリのパーミッションを変えてみよう。
Tats-MacBA-3:Demo AsamiTasuya$ ls -l
total 40
-rw-r — r — 1 AsamiTasuya staff 0 Jun 29 22:43 a.bak
-rw-r — r — 1 AsamiTasuya staff 0 Jun 29 22:43 b.bak
-rw-r — r — 1 AsamiTasuya staff 0 Jun 29 22:43 c.bak
-rw-r — r — 1 AsamiTasuya staff 0 Jun 29 22:08 file3
drwxrwxrwx 9 AsamiTasuya staff 288 Jun 30 21:19 my_dir
“drwxrwxrwx” となっている。これを”chmod 700 my_dir”で変えてみると
Tats-MacBA-3:Demo AsamiTasuya$ chmod 700 my_dir
Tats-MacBA-3:Demo AsamiTasuya$ ls -l
total 40
-rw-r — r — 1 AsamiTasuya staff 0 Jun 29 22:43 a.bak
-rw-r — r — 1 AsamiTasuya staff 0 Jun 29 22:43 b.bak
-rw-r — r — 1 AsamiTasuya staff 0 Jun 29 22:43 c.bak
-rw-r — r — 1 AsamiTasuya staff 0 Jun 29 22:08 file3
drwx — — — 9 AsamiTasuya staff 288 Jun 30 21:19 my_dir
変わった。
・Becoming The Superuser For A Short While
多くの場合、一時的にsuperuserとしてアクセスする権利を与えるsu(short for substitute user)というプログラムがある。(superuserとしてログインし続けると危険である。)
少量のタスクを行う場合などに使われる。
suコマンドではsuperuserのパスワードが要求される。
suコマンドを実行した後は、superuserとして新しいshell sessionが始まる。”exit”と入力すれば、元のセッションに戻る。
やってみよう。まずはsuperuserのパスワード設定。
Tats-MacBA-3:~ AsamiTasuya$ su
Password:
sh-3.2# exit
exit
Tats-MacBA-3:~ AsamiTasuya$
できた。
Ubuntuをはじめとするあるdistributionsでは、”su”ではなく”sudo”コマンドが使われる。sudoでは必要に応じて、1人以上のユーザーがsuperuserとしての権利が与えられる。sudoコマンドを実行した後は、superuserではなくuserパスワードを要求される。
やってみよう。
Tats-MacBA-3:~ AsamiTasuya$ sudo su
Password:
sh-3.2# exit
exit
Tats-MacBA-3:~ AsamiTasuya$
できた。ためしにルートユーザのパスワードを打ち込んでみると、だめだった。
・Changing File Ownership
chownコマンドはファイルのオーナーを変更することができる。
この場合、まずsuコマンドでsuperuserとなり、chownコマンドを実行し、exitで前のセッションに戻っている。
“chown”はディレクトリーでもファイルと同様に機能する。
まずは新しいユーザー”test”を作成。現在”a.bak”のファイルオーナーは
Tats-MacBA-3:Demo AsamiTasuya$ ls -l
total 32
-rw-r — r — 1 AsamiTasuya staff 0 Jun 29 22:43 a.bak
“AsamiTatsuya”になっている。
chownコマンドで”a.bak”のファイルオーナーシップを”test”に変更する。
Tats-MacBA-3:Demo AsamiTasuya$ sudo su
sh-3.2# chown test a.bak
sh-3.2# exit
exit
Tats-MacBA-3:Demo AsamiTasuya$ ls -l
total 32
-rw-r — r — 1 test staff 0 Jun 29 22:43 a.bak
オーナーシップが”test”に変わった。
・Changing Group Ownership
chgrpマンドは、ファイルやディレクトリのグループオーナーシップを変える。
この場合、some_fileのグループオーナーシップを、new_groupに変えた。chgrpを実行するには、ファイルやディレクトリのオーナーでなければならない。
まずは新しいグループ”testgroup”を作成。
“a.bak”のグループオーナーシップを”testgroup”に変更する。
Tats-MacBA-3:Demo AsamiTasuya$ sudo su
sh-3.2# chgrp testgroup a.bak
sh-3.2# exit
exit
Tats-MacBA-3:Demo AsamiTasuya$ ls -l
total 32
-rw-r — r — 1 test testgroup 0 Jun 29 22:43 a.bak
変更できた。
【わからなかったこと】
・特になし
【感想】
・1週間間が空いてしまったが、意外とそれまでに学んだコマンドを覚えていてよかった。