💍

Envaderを利用して、Linuxにおける権限管理の基本を学ぶ。

2022/03/24に公開

今回はLinuxにおける権限管理の基本について、Envaderを利用して実践しながら学んだので、その振り返りと自分なりのまとめです。

取り組んだ環境

今回も学習するにあたり利用したのは、Linuxの環境構築が不要でオンラインで学習する事ができるEnvaderを利用しました。

さくっとLinuxのコマンドや動きを確認できるので、いつも利用させていただいてます。
気になる方はリンクを貼っておきますので参考までに。

コース一覧

今回使用したシナリオ

はじめに

今回利用した環境では、Linuxにおける権限管理の基本として、

  • 権限とは何なのか?
  • chmodコマンドについて
  • chownコマンドについて

以上3つについて実際にコマンドを叩きながら学びました。

権限管理はLinuxにおける基本だけど、非常に重要な分野ですよね。。

権限について

Linuxには権限(パーミッション)という考え方があります。
LinuC教科書ではアクセス権とも表現されていました。

各ディレクトリやファイルには、この権限、アクセス権が設定されています。
普段PCを触るときにはこんな事気にしたことなかったのですが、実は裏側ではこんなシステムが存在していたんですね。

どのユーザーに対してどういった操作を許可するのか?
というのがこの権限の考え方です。

権限(パーミッション)が必要な理由

所有しているファイルが、他の人には見られたくないものだったり、機密にしておかなければならないファイルだった場合、それを編集されてしまったり覗かれてしまったら大変なことになってしまいます。
そういった場合に、権限を設定することで情報を守る事ができるようになります。
(ここで述べたのは一部で、さらにたくさんの理由があると思います。)

権限の種類

どのユーザーに対してどういった操作を許可するのか?
ですが、実際にどんな種類があるのかを見ていきます。

  • 読み込み権限(read) ファイルを読む事ができる
  • 書き込み権限(write) ファイルを編集する事ができる
  • 実行権限(execute) スクリプトファイル等を実行する事ができる

この3種類が権限として各ディレクトリ、ファイルに設定されています。

この権限が与えられていない場合、ファイルやディレクトリを読む事ができない、ファイルやディレクトリを編集できない、スクリプトファイル等を実行できないということになります。

例えば、読み込み権限がないと以下のようにPermission denied(権限がありません、正確には権限を拒否された)とエラーメッセージが表示されてファイルの中身をみる事ができません。

envader@172-19-1-2:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied

権限の設定を確認する

では、実際に各ファイルやディレクトリにどのような権限の設定がされているのか見てみます。
これを確認するにはls -lコマンドなどで確認できます。
今回はls -laコマンドで.ファイルの権限も表示させてみます。

envader@172-19-1-2:~$ ls -la
total 52
drwxr-xr-x 1 envader envader 4096  322 18:56 .
drwxr-xr-x 1 root    root    4096  924 01:58 ..
-rw------- 1 envader envader   63  322 19:08 .bash_history
-rw-r--r-- 1 envader envader  220  515  2017 .bash_logout
-rw-r--r-- 1 envader envader 4198  915  2021 .bashrc
-rw-r--r-- 1 envader envader  675  515  2017 .profile
drwxr-xr-x 2 envader envader 4096  830  2021 .ssh
-rw-r--r-- 1 envader envader  913  915  2021 .tmux.conf
-rw-r--r-- 1 envader envader   19  924 01:58 changeOwner.txt
-rwxrwxrwx 1 envader envader   27  924 01:58 secure.txt

上記の-rwxrwxrwxの部分が権限(パーミッション)を意味しています。
各ファイルやディレクトリに様々な権限が割り振られていて、全部同じではない事がわかります。

権限表示の内訳

-rwxrwxrwxがどのように権限を表現しているのかを見てみましょう。

-rwxrwxrwx
# 左から順に
# 1文字目 ファイルの種別(ディレクトリorファイルorシンボリックリンク)
# 2~4文字目のrwx ユーザー(所有者)の権限
# 5~7文字目のrwx グループの権限
# 8~10文字目のrwx その他のユーザーの権限

このような感じで権限を表しています。
単なるアルファベットの表示ではないんですね〜。

一番左の1文字の意味

まず最初に一番左の1文字の詳細です。
以下のように分類されます。

表示 意味
- ファイル
d ディレクトリ
l リンク(シンボリックリンク)

このようにしてファイルの種別を見分ける事ができます。

2~10文字目のrwxの意味

このrwxが、それぞれの権限の種類を表現しています。
以下説明

種類 名称 意味
r read 読み取り可能 ファイルやディレクトリの内容を参照できる
w write 書き込み可能 ファイルやディレクトリの内容を編集する事ができる
x execute ファイルの実行やディレクトリの移動ができる

Linuxにはユーザー(所有者) グループ(所有グループ) その他(所有者でない人)という考え方が存在していて、ファイルやディレクトリにはそれぞれの役割に応じて権限が設定できるようになっています。

それを考慮して先程の権限表示を見てみると少し理解ができると思います。

-rwxrwxrwx
# 左から順に
# 1文字目 ファイルの種別(ディレクトリorファイルorシンボリックリンク)
# 2~4文字目のrwx ユーザー(所有者)の権限
# 5~7文字目のrwx グループの権限
# 8~10文字目のrwx その他のユーザーの権限

つまり上記で言うと、これはファイルで、ユーザー、グループ、その他のユーザー、全てのグループ分けにおいて全ての権限が与えられている。 と言うことになる訳です。

これがもし権限が与えられていなかった場合、記事の最初で表示したPermission deniedが表示されてしまうのです。

envader@172-19-1-2:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied

権限を変更してみる(chmodコマンド)

権限を変更するには、chmodコマンドを使用します。
change modeの略と言われているみたいです。
基本の書式は以下になります。

chmod [オプション] アクセス権 ファイル名

オプションは私は使った事がないのですが、基本的にはアクセス権の所に設定したい権限を記述して変更します。

アクセス権を指定する方法として、アルファベットによる指定と数値による指定の2種類があります。

アルファベットでの権限変更

アルファベットで権限を設定する場合

対象 該当 説明
u ユーザー ファイルの所有者
g グループ ユーザーが所属するグループ
o その他 グループ以外の全ユーザ
a 全て 上の3つ全てが対象
+ 権限を追加する
- 権限を削除する
= 権限を指定する

私は数字で権限を設定する派なのですが、試しにやってみましょう。

envader@172-19-8-2:~$ ls -l
total 8
-rw-r--r-- 1 envader envader 19  924 01:58 changeOwner.txt
-rw-r--r-- 1 envader envader 27  924 01:58 secure.txt

secure.txtに対してその他のユーザに全ての権限を指定する。

#複数の権限を指定する時は以下のように指定する。
envader@172-19-3-2:~$ chmod o=rwx secure.txt
envader@172-19-3-2:~$ ls -l
total 8
-rw-r--r-- 1 envader envader 19  924 01:58 changeOwner.txt
-rw-r--rwx 1 envader envader 27  924 01:58 secure.txt

# その他のユーザにrwxの権限が設定されている

できましたね。

では逆に権限を削除してみます。

# -で削除する
envader@172-19-3-2:~$ chmod o-rwx secure.txt
envader@172-19-3-2:~$ ls -l
total 8
-rw-r--r-- 1 envader envader 19  924 01:58 changeOwner.txt
-rwxr----- 1 envader envader 27  924 01:58 secure.txt

# その他のユーザの権限がなくなっている。

ちゃんとその他のユーザの権限を全て削除する事ができました。

初めてアルファベットでの権限変更をやりましたが、これはこれで便利ですね。

数字での権限変更

続いて数字での権限変更です。

数値 対象
4 r
2 w
1 x

この数字をchmodコマンドで指定する事で、権限を変更できます。

まずはグループの権限を追加します。

# グループには権限がrしかない
envader@172-19-3-2:~$ ls -l
total 8
-rw-r--r-- 1 envader envader 19  924 01:58 changeOwner.txt
-rwxr----- 1 envader envader 27  924 01:58 secure.txt

# ユーザとグループに7でrwxの権限を指定
envader@172-19-3-2:~$ chmod 770 secure.txt

# グループにrwxの権限が追加された
envader@172-19-3-2:~$ ls -l
total 8
-rw-r--r-- 1 envader envader 19  924 01:58 changeOwner.txt
-rwxrwx--- 1 envader envader 27  924 01:58 secure.txt

ファイルの所有者、所有グループを変更する。(chownコマンド)

次はファイルやディレクトリの所有者を変更するコマンドを実践してみます。
正直使った事がありませんでした。

ここで注意が必要なのが、変更できるのはスーパーユーザーのみになると言う事。
なので、コマンドを実行する時にはsudoコマンドを使うか、rootユーザに変更する必要があります。

基本の書式(所有者の変更)

chown オプション user名 ファイルorディレクトリ

グループを変更する場合

chown オプション :group名 ファイルorディレクトリ

ファイルの所有者とグループを同時に変更する

chown オプション user名:group名 ファイルorディレクトリ
# 所有者、グループ共にenvaderになっている

envader@172-19-3-2:~$ ls -l
total 8
-rw-r--r-- 1 envader envader 19  924 01:58 changeOwner.txt
-rwxrwx--- 1 envader envader 27  924 01:58 secure.txt

# ユーザをrootへ変更

envader@172-19-3-2:~$ sudo chown root secure.txt
envader@172-19-3-2:~$ ls -l
total 8
-rw-r--r-- 1 envader envader 19  924 01:58 changeOwner.txt
-rwxrwx--- 1 root envader 27  924 01:58 secure.txt

# グループをrootへ変更

envader@172-19-3-2:~$ sudo chown :root secure.txt
envader@172-19-3-2:~$ ls -l
total 8
-rw-r--r-- 1 envader envader 19  924 01:58 changeOwner.txt
-rwxrwx--- 1 root    root    27  924 01:58 secure.txt

所有者、グループ共にrootにした場合には、一般ユーザでファイルを見ようとした場合エラーになりました。

envader@172-19-3-2:~$ cat secure.txt
cat: secure.txt: Permission denied

chownコマンドは私はあまり使う機会がまだありませんが、業務でLinuxを触る場合には必要な場面が出てくるのでしょう。
しっかり使い方を覚えておきたいと思います。

まとめ

  • Linuxには権限(パーミッション)という考え方があり、各ディレクトリやファイルには、この権限、アクセス権が設定されている。

  • どのユーザーに対してどういった操作を許可するのか?
    というのがこの権限の考え方。

  • 権限の種類は、read write executeの3つ。

  • 権限を変更するにはchmodコマンドを使用し、権限の指定にはアルファベットと数値で指定する2つの方法が存在する。

  • ファイルの所有者、グループを変更するにはchownコマンドを使用する。

やっぱり私は、権限変更には数値を指定した方が好きだなと記事を書いていて改めて感じました。

最後まで読んでいただきありがとうございました。

Discussion