Yuki's Tech Blog

仕事で得た知見や勉強した技術を書きます。

【もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ!】セクション6: パーミッションとスーパーユーザーで知らなかったことをざっくりまとめてみた

目次

マルチユーザーシステムとは

マルチユーザーシステムとは、 一つのコンピュータを複数人で扱えるようにするための仕組みです。 LinuxがインストールされているサーバーにSSH接続する際にログイン画面が出ると思いますが、それはマルチユーザーシステムのために用意されている仕組みです。

(注) Linux OSはマルチユーザーシステムを採用しています。

ログインは何のために行うのか

ログインを行う理由は、 今そのコンピュータを扱っているのが誰なのかを明確にするためです。ログインがあることで、今誰がどんな操作をしているのかがを管理できます。

アクセス権限とは

マルチユーザーシステムを採用している場合、複数の開発者が一つのコンピュータを扱っているので、自分のファイルを他の誰かが削除したり変更してしまう可能性があります。また削除してはいけないファイルを誰かが削除してしまう恐れもあります。これらのマルチユーザーシステムの問題点を解決するために、パーミッション(アクセス権限)という仕組みが生まれました

パーミッション(アクセス権限)とは、ファイルごとに誰がどんな操作をできるかを定めたものです。 ファイルにパーミッションを設定することで、重要なファイルを削除できなくしたり、自分のファイルを勝手に編集・削除させないようにできます。パーミッションはファイルごとに設定されています。

フールプルーフとは

利用者が賢い人間であることを前提に置くことは、設計的にみるとあまり良い設計とは言えないです。どちらかというと良い設計とは、どんなに愚かな人が使っても正しく動く、間違いようがない設計です。このような設計をフールプルーフと言います。つまり、フールプルーフとは、どんな人が使っても間違えようがなく正しく動く設計のことです。

(※) foolは愚か者、proofは耐えるという意味です。

オーナー(所有者)と所有グループとは

パーミッションを設定する単位があります。オーナー(所有者)と所有グループとその他の人です。オーナーにはこのパーミッション、所有グループにはこのパーミッション、って感じです。

オーナー(所有者)とは

オーナーとは、 ファイルの所有者のことです。Linuxで扱われる全てのファイルにはオーナーが設定されています。 オーナーはファイルの所有者なので、他のユーザーに比べて非常に強い権限(パーミッション)が付与されています。

所有グループとは

所有グループとは、 あるファイルを所有しているグループのことです。ファイルを所有しているのはオーナーだけではなく、所有グループもファイルを所有しています。 所有グループは複数人のユーザーからなります。グループに所属しているユーザー全員に共通のパーミッションが付与されます。所有グループを使うことで、グループごとにパーミッションを付与できるので、ユーザーに同じパーミッションを何回も付与しなくて良くなります。オーナーほどではないが所有グループにもそれな理に強い権限(パーミッション)が与えられることが多いです。

オーナーでもなければ所有グループにも属していないユーザーには、個別にパーミッションが与えられています。基本的にはそういったユーザーはオーナーでも所有者でもないので、弱い権限(パーミッション)が付与されています。

まとめると、Linuxではファイルごとにパーミッションが付与されていて、パーミッションの単位には、オーナー(所有者)、所有グループ、その他のユーザーです。

パーミッションを確認する

ls -lでパーミションを確認できます。drwxrwxr-xの部分がファイルのに付与されたパーミッション(アクセス権限)です。最初の- or dはファイル種別を表しています。-はファイル、dはディレクトリです。シンボックリンクの場合、lになります。最初の文字以降のrwxrwxr-xはオーナー、所有グループ、その他の人の3つずつに意味が分かれています。パーミッションの単位ごとにどんな権限が与えられているかを表します。「rは読み取り」、「wは書き込み」、「xは実行(execute)」です。

また、ec2-user ec2-userの最初のec2-userはそのファイルの所有者(オーナー)を表し、後ろのec2-userはファイルの所有グループの名前を表します。

[ec2-user@ip-10-0-10-10 repos]$ ls -l
total 0
drwxrwxr-x 3 ec2-user ec2-user 28 Nov 11 14:43 rails
drwxrwxr-x 2 ec2-user ec2-user 23 Nov 11 11:28 react
drwxrwxr-x 3 ec2-user ec2-user 19 Nov 11 10:57 react-1
-rw-rw-r-- 1 ec2-user ec2-user  0 Nov 11 15:06 sample5.rb
-rw-rw-r-- 1 ec2-user ec2-user  0 Nov 11 15:05 sample.py
-rw-rw-r-- 1 ec2-user ec2-user  0 Nov 11 14:17 sample.rb
-rw-rw-r-- 1 ec2-user ec2-user  0 Nov 11 15:05 sample.ts

ディレクトリにおけるパーミッション

ディレクトリにおいて「r(読み取り)」、「w(書き込み)」、「x(実行)」とは、以下のような意味を持ちます。

文字 意味
r ディレクトリ配下のファイル・ディレクトリ一覧が取得できる
w ディレクトリ配下のファイル・ディレクトリの作成・削除ができる
x ディレクトリをカレントディレクトリにすることができる

chmodコマンドでファイル・ディレクトリのパーミッションを変更する

新規生成したファイルには「実行権限」が付与されていません。 シェルスクリプトなどでファイルを実行する場合、ファイルに実行権限を付与する必要があります。

[ec2-user@ip-10-0-10-10 repos]$ ls
rails  react  react-1
[ec2-user@ip-10-0-10-10 repos]$ touch sample.rb
[ec2-user@ip-10-0-10-10 repos]$ ls
rails  react  react-1  sample.rb
[ec2-user@ip-10-0-10-10 repos]$ ls -l
total 0
drwxrwxr-x 3 ec2-user ec2-user 28 Nov 11 14:43 rails
drwxrwxr-x 2 ec2-user ec2-user 23 Nov 11 11:28 react
drwxrwxr-x 3 ec2-user ec2-user 19 Nov 11 10:57 react-1
-rw-rw-r-- 1 ec2-user ec2-user  0 Nov 14 03:12 sample.rb

chmodコマンド(チェンジモード)を使用してファイルのパーミッションを変更します。chmodコマンドには「数値モード」と「シンボルモード」の2つの指定方法があります。

シンボルモード

パーミッションの一部だけを変更したい場合、シンボルモードが楽です。シンボルモードでは「誰に」、「何を」、「どうする」かを指定します。

指定するもの 種類
誰に 「u(オーナー)」、「g(グループ)」、「o(その他のユーザー other)」、「a(ugo全て)」
何を 「r(読み取り)」、「w(書き込み)」、「x(実行)」
どうする 「+(権限の追加)」、「-(権限の削除)」、「=(指定した権限と等しくする)

以下のコマンドを実行することで、オーナーとグループにファイルの実行権限を付与します。

// sample.rbの部分は対象のファイル名
chmod ug+x sample.rb

権限を制限したい場合、以下のようなコマンドを実行します。

chmod ug-x sample.rb

数値モード

数値モードでは、「r」を「4」、「w」を「2」、「x」を「1」というように数値が割り当てられています。オーナー、グループ、その他のユーザーごとにr、w、xの数値を足した値を指定します。

例) 「rwx」→「4 + 2 + 1 = 7」、「r-x」→「4 + 1 = 5」

スーパーユーザーとは

スーパーユーザーとは、 管理者権限を持つ特別なユーザーのことです。ユーザー名がrootであることから、「rootユーザー」とも呼ばれます。 管理者権限とは、あらゆる操作が許可された強い権限のことです。スーパーユーザーはファイルのパーミッションの影響を受けずに、全てのファイルに対して読み込み、書き込み、実行が可能です。権限が強いあまり、Linuxの動作に必要なファイルも削除できてしまうので、扱いには細心の注意が必要です。管理者権限でしか実行できないコマンドを実行したい場合、sudoをつけます。

参考記事

もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ!】 | Udemy