Envaderを利用して、Linuxにおける権限管理の基本を学ぶ。
今回は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 3月 22 18:56 .
drwxr-xr-x 1 root root 4096 9月 24 01:58 ..
-rw------- 1 envader envader 63 3月 22 19:08 .bash_history
-rw-r--r-- 1 envader envader 220 5月 15 2017 .bash_logout
-rw-r--r-- 1 envader envader 4198 9月 15 2021 .bashrc
-rw-r--r-- 1 envader envader 675 5月 15 2017 .profile
drwxr-xr-x 2 envader envader 4096 8月 30 2021 .ssh
-rw-r--r-- 1 envader envader 913 9月 15 2021 .tmux.conf
-rw-r--r-- 1 envader envader 19 9月 24 01:58 changeOwner.txt
-rwxrwxrwx 1 envader envader 27 9月 24 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 9月 24 01:58 changeOwner.txt
-rw-r--r-- 1 envader envader 27 9月 24 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 9月 24 01:58 changeOwner.txt
-rw-r--rwx 1 envader envader 27 9月 24 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 9月 24 01:58 changeOwner.txt
-rwxr----- 1 envader envader 27 9月 24 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 9月 24 01:58 changeOwner.txt
-rwxr----- 1 envader envader 27 9月 24 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 9月 24 01:58 changeOwner.txt
-rwxrwx--- 1 envader envader 27 9月 24 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 9月 24 01:58 changeOwner.txt
-rwxrwx--- 1 envader envader 27 9月 24 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 9月 24 01:58 changeOwner.txt
-rwxrwx--- 1 root envader 27 9月 24 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 9月 24 01:58 changeOwner.txt
-rwxrwx--- 1 root root 27 9月 24 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