Linux permission(権限)まとめ 初心者用

Linuxではファイルやディレクトリ等に読書や実行の可否を設定したpermissionと呼ばれる権限が付いています。

Permission(権限)の見方

Desktopがある行の一番左に、『drwxr-xr-x』となっています。これの一番左の『d』はディレクトリを表し、ichiri.txtの行だと、一番左の文字が『-』となっていてファイルという事を表します。(詳しくは『Linux lsコマンドの使い方と出力表示の見方』も参考にしてください。)

『drwxr-xr-x』の一番左の文字を除く9文字が3文字づつ権限を表します。 

  • 『d rwx r-x r-x』一番左の3文字が所有者の権限(通常作成者)
  • 『d rwx r-x r-x』次の3文字が所有グループ権限
  • 『d rwx r-x r-x』最後の3文字がその他のユーザー権限
$ ls -l
total 4304
drwxr-xr-x 2 ichiri ichiri    4096 12月 21 17:51  Desktop
drwxr-xr-x 4 ichiri ichiri    4096 12月 27 08:32  Documents
drwxr-xr-x 6 ichiri ichiri    4096  3月  2 18:03  Downloads
-rwx------ 1 ichiri ichiri     104  1月 13 09:40  ichiri.sh
-rw-rw-r-- 1 ichiri ichiri      52  2月  9 14:16  ichiri.txt
-rwxrw---- 1 ichiri ichiri     115  1月 20 09:38  ichiri2.sh
  • 文字は『r』『w』『x』の3文字で、順番も必ずこの通りです。
  • 『r』は、Readableで読み出し可能である権限を示します。
  • 『w』は、Writeableで書き込み可能である権限を示します。
  • 『x』は、eXecutableで実行可能であることを権限します。
  • もし権限がない場合は、『-』となっています。
  • 例えば『r』の部分が『-』であるファイルはアプリやviで開いて閲覧出来ません。
  • 『w』がないファイルの場合は、編集出来ません。
  • 『x』がないファイルは実行出来ません。(シェルスクリプトや.exeファイル等)
  • 例えば『ichiri2.sh』の場合は、『-rwxrw—-』となっているので、以下のようになります。
    • 所有者は読書と実行できる
    • グループは読書出来るが実行できない
    • その他ユーザーは読書も実行もできない

所有者、所有グループ

『ichiri2.sh』の行で『ichiri ichiri』となっているところが、そのファイルやディレクトリの所有ユーザーと所有グループを表します。

  • 所有者『ichiri ichiri』
    • whoamiで現在実行中のユーザー名を表示できます。 下の例の場合では、『ichiri』と表示されたので、現在のユーザー名は『ichiri』です。 なので、所有者が『ichiri』の部分の権限があり、『ichiri2.sh』については読書は出来るが、実行するにはroot権限で実行しなければならないことになります。 このファイルはユーザーichiriによって作成されたので、ファイルの所有者はichiriになっています。 そしてid ichiriでichiriのグループ名はichiriになっています。 なのでこのファイルの所有グループ名もichiriになっています。
  • 所有グループ『ichiri ichiri
    • 他のユーザーとファイル等を共有する時に使います。 例えば他のユーザーJohnがアクセスしようとすると、Johnはユーザーとしてichiriにはなれません。 この時、Johnがichiriグループに所属すると、所有グループichiriのファイルやディレクトリにアクセス出来るようになります。
$ ls -l ichi*
-rwx------ 1 ichiri ichiri     104  1月 13 09:40  ichiri.sh
-rw-rw-r-- 1 ichiri ichiri      52  2月  9 14:16  ichiri.txt
-rwxrw---- 1 ichiri ichiri     115  1月 20 09:38  ichiri2.sh

$ whoami
ichiri

$id ichiri
uid=1000(ichiri) gid=1000(ichiri) groups=1000(ichiri),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),132(lxd),133(sambashare)

$ groups ichiri   //  id でなくてgroupsでもOK。 sudoが使える事が分かります。
ichiri : ichiri adm cdrom sudo dip plugdev lpadmin lxd sambashare

ユーザーをグループに追加するには

// 最も一般的
$ gpasswd -a USER GROUP

//Debian系(uBuntu、Rasbian含む)
$ adduser USER GROUP

//これは危険なので使わない事。 GROUPSにあるように、aを付ずセカンダリグループ全て列挙しないと現在所属するセカンダリグループを置き換えてしまう。
//aは、addの意味。 aなしではmodのmodify(変更)の意味。
usermod -aG GROUPS USER

他ユーザーJohnとファイルを共有する場合

  1. これから作るグループ名が被らないか確認 cat /etc/group
  2. 『ichiri2』(何でも構いません)というグループを作る sudo addgroup ichiri2 *sudo実行
  3. ユーザーichiriもグループichiri2に追加 sudo adduser ichiri ichiri2 *sudo実行
    • Johnをichiriグループに追加してしまうと、ichiriが作ったファイル全てにアクセスできてしまうので、別グループを作成。
  4. ユーザーichiriの所属するグループを確認 id ichiri
    • セカンダリグループの最後にichiri2がありますね
  5. ichiri.txtの所属グループをichiri2に変更 sudo chown :ichiri2 ichiri.txt *sudo実行
  6. ichiri.txtの所属グループがichiri2に変更されています ls -l ichi*
  7. ユーザーJohnをグループichir2に追加 sudo adduser John ichiri2
  8. これでユーザーJohnはichiri.txtの変更は出来ませんが閲覧は出来るようになりました。
$ cat /etc/group

$ sudo addgroup ichiri2
Adding group `ichiri2' (GID 1001) ...
Done.

$ sudo adduser ichiri ichiri2
Adding user `ichiri' to group `ichiri2' ...
Adding user ichiri to group ichiri2
Done.

$ id ichiri
uid=1000(ichiri) gid=1000(ichiri) groups=1000(ichiri),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),132(lxd),133(sambashare),1001(ichiri2)

$ sudo chown :ichiri2 ichiri.txt    // <----グループ変更

$ ls -l ichi*
-rwx------ 1 ichiri ichiri     104  1月 13 09:40  ichiri.sh
-rw-r----- 1 ichiri ichiri2     52  2月  9 14:16 ichiri.txt   // 所有グループがichiri2になりました
-rwxrw---- 1 ichiri ichiri     115  1月 20 09:38  ichiri2.sh

$ sudo adduser John ichiri2
Adding user `John' to group `ichiri2' ...
Adding user John to group ichiri2
Done.

rootユーザー

Linuxで全ての実行ができる最強管理者名。 Linuxのシステム全てを消し去る事も可能なので、非常に危険で本当に必要な時しか使わない。 suで切り替える。(switch user) 切り替わるとプロンプトが$から#になる。 ユーザーichiriに戻る場合はsu ichiri。 因みに、ユーザーichiriにとっては『/home/ichiri』がホームディレクトリなので『~』と表示されていますが、rootユーザーにとって『/home/ichiri』はホームディレクトリでないので、そのままの表示になっていますね。

危険!
~$ su
Password: 
/home/ichiri#

/home/ichiri# su ichiri    // <---これでichiriに戻ります
~$

ichiri.shは、root権限でないと実行出来ません。 そのroot権限で実行する場合、Linuxの場合、sudoを付けて実行します。

$ ls -l ichi*
-rwx------ 1 root   root      104  1月 13 09:40  ichiri.sh  // <---これ
-rw-rw-r-- 1 ichiri ichiri2     52  2月  9 14:16 ichiri.txt
-rwxrw---- 1 ichiri ichiri     115  1月 20 09:38  ichiri2.sh

sudo

root権限で読書や実行する時、rootユーザーで実行せず、sudoで実行します。 sudoとはSuper user Do (スーパーユーザーが実行)の事です。 スーパーユーザーとはrootと同等権限を持ったrootとは異なるユーザーの事です。  初期設定ではrootと同じ権限を持っていて、何でも出来ます。 しかし違いは2つあります。

  1. sudoを付けないと権限を持たないディレクトリやファイルなど間違って消してしまわない。 suでrootに入ってしまうと、何も付けずにディレクトリやファイルを消してしまいます。 その時パスワード入力もなく、確認や警告も出てきません。 しかも一度消すと二度と復旧出来ません。 sudoの場合、sudoと追加で打ち込む事で多少なりとも意識をし失敗を防げます。 しかも偶にしか使わない場合、sudoで実行する場合パスワードを入力しなければならず、ここでも多少の歯止めが効きます。 特にrm -rを実行する際等は要注意です。
  2. /etc/sudoers.d/の下にsudoの権限を設定する事も出来ます。 初期値では、全ての人がsudoを使え、全てのコマンドを実行出来るという設定になっているので、sudoを使うとrootユーザーと同じ権限になっています。 しかし、sudoersで以下の事を設定出来ます。
    1. 誰がsudoを実行できるか
    2. 誰が何のコマンドを実行できるか

以上の事よりsudoの方が安全なので、suでrootで実行せずroot権限のファイルの閲覧や編集はsudoで実行するようになっています。

権限変更

前述の通り、所有者権限・所有グループ権限・その他ユーザー権限のそれぞれに、『rwx』の3文字分で権限を表します。 この3文字はそれぞれ以下の数字に相当します。

  • 『r』は『4』権限あり、『0』権限なし
  • 『w』は『2』権限あり、『0』権限なし
  • 『x』は『1』権限あり、『0』権限なし

そしてこれらを足した数字が権限に相当します。 例えば、7(=4+2+1)は全ての権限があることになり、6(=4+2)は読書出来るが実行が出来ないということです。 4(=4)の場合は、読み出しだけ出来るという事です。 0であればどれも出来ない事になります。 つまり、0~7の数字で権限を表します。

この0~7の数字一桁として所有者権限・所有グループ権限・その他ユーザー権限のそれぞれに割り付けて権限を設定します。 例えば、以下の例ではそれぞれ600、700、664となります。 今回、rootユーザーでichiri3.txtを追加しています。

$ ls -l ichiri*
-rw------- 1 root   root      0  3月  6 12:11 ichiri3.txt  // 600
-rwx------ 1 ichiri ichiri  104  1月 13 09:40 ichiri.sh    // 700
-rw-rw-r-- 1 ichiri ichiri2  52  2月  9 14:16 ichiri.txt   // 664

この権限を変更するコマンドがchmodです。

chmod 権限 ファイル名 で権限を変えることが出来ます。 root所有など他ユーザー所有のファイルはsudo chmodで変更します。 

$ chmod 751 ichiri.sh
$ sudo chmod 660 ichiri3.txt

$ ls -l ichiri*
-rw-rw---- 1 root   root      0  3月  6 12:11 ichiri3.txt  // 660
-rwxrwx--x 1 ichiri ichiri  104  1月 13 09:40 ichiri.sh    // 751
-rw-rw-r-- 1 ichiri ichiri2  52  2月  9 14:16 ichiri.txt   // 664

chmodの権限は、作成者とrootとなるので、上記のrwx権限とは異なります。

ディレクトリ権限

ディレクトリにも権限がありますがファイルとは若干異なります。 ここでは、ホームディレクトリ下に『ichiri』ディレクトリを作って確認します。 それぞれ所有者権限削除して見てみます。

  • 『r』(読出可能権限)がないと、そのディレクトリを閲覧できません。
$ ls -ld ichi/
d-wx------ 2 ichiri ichiri 4096  3月  6 11:42 ichi/
$ ls -la ichi
ls: ディレクトリ 'ichi' を開くことが出来ません: 許可がありません
  • 『w』(書込可能権限)がないと、そのディレクトリにファイルやディレクトリを作成できません。
$ ls -ld ichi*/
dr-x------ 2 ichiri ichiri 4096  3月  6 11:42 ichi/
$ touch ./ichi/ichi.txt
touch: './ichi/ichi.txt' に touch できません: 許可がありません
  • 『x』(実行可能権限)がないと、そのディレクトリに移動出来ません。  またそのディレクトリ内にあるファイルやディレクトリが存在することは分かりますが、詳細情報を読みだせません。
$ ls -ld ichi*/
drw------- 2 ichiri ichiri 4096  3月  6 11:42 ichi/
$ cd ichi
bash: cd: ichi: 許可がありません
$ ls -la ichi
ls: 'ichi/i.txt' にアクセスできません: 許可がありません
合計 0
d????????? ? ? ? ?             ? .
d????????? ? ? ? ?             ? ..
-????????? ? ? ? ?             ? i.txt

コメント