9. Learning the shell — Lesson 9: Permissions

Tatsuya Asami
9 min readJul 10, 2018

--

【所要時間】

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週間間が空いてしまったが、意外とそれまでに学んだコマンドを覚えていてよかった。

--

--

Tatsuya Asami
Tatsuya Asami

Written by Tatsuya Asami

Front end engineer. React, TypeScript, Three.js

Responses (1)