Skip to content
On this page

Linuxのマスターユーザーと権限

🎫 コンテンツは 2023-08-02 に以下のプラットフォームで検証されました
✅ Ubuntu 22.04

Linuxでは、ユーザーはシステムとそのリソースにアクセスできる個人です。各ユーザーには一意のユーザー名とユーザーID(UID)があり、システムに彼らを識別します。グループは、ファイルやディレクトリにアクセスするための共通の権限を共有するユーザーの集まりです。権限は、ファイルやディレクトリにアクセスできるユーザーと、それらに対して実行できるアクションを決定するルールです。

Linuxでは、読み取り、書き込み、実行の3種類の権限からなる権限システムを使用しています。これらの権限は、ファイルやディレクトリの所有者、ファイルやディレクトリの所有者であるグループのメンバー、およびシステム上の他のすべてのユーザーの3種類のユーザーに対して設定することができます。

Linuxでのユーザー、グループ、および権限の仕組みを理解することは、システムリソースへのアクセスの管理とシステムのセキュリティを確保するために重要です。

ユーザー

現在のユーザーの特定

Linuxで現在のユーザーを特定するには、whoamiコマンドを使用します。このコマンドは、ターミナルに現在のユーザーのユーザー名を表示します。

sh
> whoami
tinymemo

さらに、$USER環境変数の内容を確認することもできます。これにより、現在のユーザーのユーザー名も表示されます。

sh
> echo $USER
tinymemo

ユーザーID

Linuxの各ユーザーは、システムに対してユニークなユーザーID(UID)を持っています。idコマンドを使用して、現在のユーザーのUIDを表示することができます。

sh
> id
uid=1000(tinymemo) gid=1000(tinymemo) groups=1000(tinymemo),4(adm),27(sudo),44(video),50(staff)

上記のように、現在のユーザーのUIDは1000です。-uオプションを使用してUIDのみを表示することもできますし、id -uコマンドを使用してUIDのみを表示することもできます。

sh
> id -u
1000

> echo $UID
1000

ユーザーのUIDは、ユーザーが作成される際に自動的に生成されます。ルートユーザーのUIDは常に0です。

Linuxシステム上のすべてのユーザーは、/etc/passwdファイルに格納されています。catコマンドを使用してこのファイルの内容を表示することができます。

sh
> cat /etc/passwd

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
tinymemo:x:1000:1000::/home/tinymemo:/bin/bash

/etc/passwdファイルの各行の2番目と3番目のフィールドは、それぞれユーザーのUIDとGIDです。ユーザーのUIDとGIDは異なることに注意してください。ユーザーのGIDは、ユーザーが所属するグループのIDです。次のセクションでグループについて説明します。

新しいユーザーの作成

Linuxで新しいユーザーを作成するには、adduserコマンドを使用します。このコマンドは、指定したユーザー名とUIDで新しいユーザーを作成します。UIDを指定しない場合、adduserコマンドは新しいユーザーのために自動的にUIDを生成します。

sh
> sudo adduser newusername

ユーザー `newusername' を追加中 ...
新しいグループ `newusername' (1000) を追加中 ...
新しいユーザー `newusername' (1000) をグループ `newusername' に追加中 ...
ホームディレクトリ `/home/newusername' を作成中 ...
`/etc/skel' からファイルをコピー中 ...
新しいパスワード:
新しいパスワードを再入力してください:
passwd: パスワードが正常に更新されました
newusername のユーザー情報を変更中
新しい値を入力するか、デフォルトのままにするには ENTER キーを押してください
	フルネーム []:
	部屋番号 []:
	勤務先電話番号 []:
	自宅電話番号 []:
	その他 []:
情報は正しいですか? [Y/n] y

adduserコマンドを実行すると、新しいユーザーのパスワードを入力するように求められます。また、passwdコマンドを使用して新しいユーザーのパスワードを設定することもできます。

sh
> sudo passwd newuser
新しいパスワード:
新しいパスワードを再入力してください:
passwd: パスワードが正常に更新されました

passwdコマンドを実行する際にユーザー名を省略すると、現在のユーザーのパスワードが設定されます。

ユーザーの削除

Linuxでユーザーを削除するには、deluserコマンドを使用します。このコマンドは、指定したユーザーをシステムから削除します。

sh
> sudo deluser newusername

crontabの削除中...
ユーザー `newuser' の削除中...
完了しました。

グループ

グループは、ファイルやディレクトリにアクセスするための共通の権限を持つユーザーの集まりです。各グループには、システムに識別される一意のグループID(GID)があります。現在のユーザーのGIDを表示するには、idコマンドを使用できます。

sh
> id
uid=1000(tinymemo) gid=1000(tinymemo) groups=1000(tinymemo),4(adm),27(sudo),44(video),50(staff)

上記のように、現在のユーザーのGID1000です。-gオプションを使用してGIDのみを表示することもできますし、id -gコマンドを使用してGIDのみを表示することもできます。

グループへのユーザーの追加

ユーザーは複数のグループのメンバーになることができます。ユーザーをグループに追加するには、usermodコマンドを使用します。このコマンドは、指定したユーザーを指定したグループに追加します。

sh
> sudo usermod -a -G groupname username

-aオプションは、usermodコマンドに対してユーザーを現在のグループではなく指定したグループに追加するように指示します。-Gオプションは、usermodコマンドに対して指定したグループにユーザーを追加するように指示します。

グループからユーザーを削除する

ユーザーをグループから削除するには、gpasswdコマンドを使用します。このコマンドは、指定したユーザーを指定したグループから削除します。

sh
> sudo gpasswd -d ユーザー名 グループ名

ユーザー newuser をグループ tinkink から削除しています

ユーザーグループを確認する

ユーザーが所属しているグループを確認するには、groupsコマンドを使用します。このコマンドは、指定したユーザーが所属しているグループを表示します。

sh
> groups newuser

newuser : newuser tinkink

グループの作成と削除

Linuxで新しいグループを作成するには、addgroupコマンドを使用します。このコマンドは、指定したグループ名とGIDで新しいグループを作成します。GIDを指定しない場合、addgroupコマンドは新しいグループのためにGIDを自動的に生成します。

sh
> sudo addgroup テストグループ

sudo addgroup テストグループ
グループ `テストグループ' (GID 1001) を追加しています...
完了しました。

Linuxでグループを削除するには、delgroupコマンドを使用します。このコマンドは、指定したグループをシステムから削除します。

sh
> sudo delgroup テストグループ

グループ `テストグループ' を削除しています...
完了しました。

権限

ユーザーとグループの理解の長い旅の後、ついに権限について話し合う準備が整いました。権限は次のことを決定するルールです:

  • 誰がファイルやディレクトリにアクセスできるか
  • それらをどのように操作できるか

これらの権限は、3つのタイプのユーザー(誰)に対して設定できます:

  • ファイルやディレクトリの所有者
  • ファイルやディレクトリの所有グループのメンバー
  • システム上の他のすべてのユーザー

権限には3つのタイプ(何ができるか)があります:読み取り書き込み実行

したがって、ファイルやディレクトリの権限は、3つのタイプのユーザー(誰)と3つのタイプの権限(何ができるか)に設定できます。

権限の確認

ファイルやディレクトリの権限を確認するには、ls -l コマンドを使用します。このコマンドは指定したファイルやディレクトリの権限を表示します。

sh
> ls -l

-rw-r--r-- 1 tinymemo tinymemo  0 Aug  1 16:00 file.txt
drwxr-xr-x 2 tinymemo tinymemo 40 Aug  1 16:00 directory
-rwxr-xr-x 1 tinymemo tinymemo  0 Aug  1 16:00 script.sh

ls -l コマンドの出力の各行の最初の文字は、ファイルの種類を示します。最も一般的な種類は次のとおりです。

  • 通常のファイルの場合は -
  • ディレクトリの場合は d

次の9文字は、ファイルやディレクトリの権限です。最初の3文字はファイルまたはディレクトリの所有者の権限です。次の3文字はファイルまたはディレクトリを所有するグループの権限です。最後の3文字はシステム上の他のすべてのユーザーの権限です。

3文字のグループごとの最初の文字は 読み取り 権限を示します。3文字のグループごとの2番目の文字は 書き込み 権限を示します。3文字のグループごとの3番目の文字は 実行 権限を示します。

例として file.txt を取ります:

  • 最初の3文字は rw- であり、これはファイルの所有者が 読み取り書き込み の権限を持っていることを意味しますが、実行 の権限はありません。

  • 次の3文字は r-- で、ファイルを所有するグループ(tinymemo グループ)が 読み取り 権限を持っていますが、書き込み実行 の権限はありません。

  • 最後の3文字は r-- で、システム上の他のすべてのユーザーが 読み取り 権限を持っていますが、書き込み実行 の権限はありません。

権限の変更

ファイルやディレクトリの権限を変更するには、chmod コマンドを使用します。このコマンドは指定したファイルやディレクトリの権限を変更します。以下に chmod コマンドの使用方法のいくつかの例を示します:

sh
> chmod +x file.txt
> chmod -x file.txt
> chmod u+x file.txt
> chmod g+x file.txt
> chmod o+x file.txt
> chmod 755 file.txt
> chmod 644 file.txt
> chmod 777 file.txt
> chmod 400 file.txt

権限の最初の構文は [役割][演算子][権限] です。

  • 役割 は、ファイルやディレクトリの所有者に対して u、ファイルやディレクトリを所有するグループに対して g、またはシステム上の他のすべてのユーザー(所有者とファイルやディレクトリを所有するグループ以外のすべてのユーザー)に対して o です。役割 を省略すると、すべての3つの役割に適用されます。
  • 演算子 は、権限を追加するための +、権限を削除するための -、または権限を設定するための = です。
  • 権限 は、読み取り のための r書き込み のための w、または 実行 のための x です。

2つ目のパーミッションの構文は、3つの数字で構成されており、各数字は所有者、グループ、システム上の他のすべてのユーザーのパーミッションを表します。例えば、最初の数字は所有者のパーミッションを、2番目の数字はグループのパーミッションを、3番目の数字はシステム上の他のすべてのユーザーのパーミッションを表します。

各数字の範囲は0から7までです。実際には、これは3桁のバイナリ数です。最初の桁は「読み取り」のパーミッションを表し、2番目の桁は「書き込み」のパーミッションを表し、3番目の桁は「実行」のパーミッションを表します。桁が1の場合、パーミッションが設定されていることを意味します。桁が0の場合、パーミッションが設定されていないことを意味します。例えば、7はバイナリで111であり、すべての3つのパーミッションが設定されていることを意味します。6はバイナリで110であり、読み取りと書き込みのパーミッションが設定されているが、実行のパーミッションは設定されていないことを意味します。

したがって、ファイルのパーミッションをrw-r--r--に設定したい場合、各桁のバイナリ数を計算することができます:

  • rw-はバイナリで110であり、10進数では6です。
  • r--はバイナリで100であり、10進数では4です。
  • r--はバイナリで100であり、10進数では4です。

次のコマンドを使用できます:

sh
> chmod 644 file.txt

所有権の変更

ファイルやディレクトリの所有権を変更するには、chownコマンドを使用します。このコマンドは指定したファイルやディレクトリの所有権を変更します。以下にchownコマンドの使用方法の例を示します:

sh
> chown tinymemo:tinymemo file.txt
> chown tinymemo: file.txt
> chown :tinymemo file.txt
> chown tinymemo file.txt

所有権の最初の構文は[ユーザー]:[グループ]です。[ユーザー]または[グループ]を省略することもできます。

ディレクトリの所有権を再帰的に変更するには、-Rオプションを使用できます。

一般的なパーミッション

以下は一般的なパーミッションです:

  • ファイルに対しては 644 が一般的であり、デフォルトのパーミッションでもあります
  • ディレクトリに対しては 755 が一般的であり、デフォルトのパーミッションでもあります
  • SSHの秘密鍵などの機密ファイルに対しては 600 もしくは 400 を使用します
  • キャッシュファイルなどの一時ファイルに対しては 777 を使用します。また、開発、デバッグ、テスト中の場合にのみ使用し、本番環境では強く推奨されません

644755 の違いは、ファイルまたはディレクトリの所有者に対する 実行 パーミッションです。なぜディレクトリに所有者の 実行 パーミッションが必要なのでしょうか?それは、ディレクトリへのアクセスが実際にはディレクトリの 実行 を意味するからです。つまり、ディレクトリ内のファイルやディレクトリをリストすることができます。

最終的なヒント

以下はいくつかの最終的なヒントです:

まず、ファイルやディレクトリのパーミッションは、親ディレクトリのパーミッションにも依存します。

例えば、ディレクトリに実行パーミッションがない場合、そのディレクトリ内のファイルやディレクトリにアクセスすることはできません。たとえファイルやディレクトリの読み取りパーミッションがあってもです。最も一般的な例は、ホームディレクトリです。他のユーザーのホームディレクトリにはアクセスできません。たとえホームディレクトリ内のファイルやディレクトリの読み取りパーミッションがあってもです。

したがって、他のユーザーとファイルやディレクトリを共有したい場合は、すべてのユーザーが実行パーミッションを持つディレクトリ(ホームディレクトリの外側)に配置する方が良いです。そうしないと、パーミッションの問題に遭遇する可能性があります。

次に、SELinuxもファイルやディレクトリのパーミッションに影響を与える場合があります。パーミッションの問題に遭遇し、パーミッションが正しいことを絶対に確認している場合は、SELinuxを無効にしてみてください。それで問題が解決するかどうか確認できます。

最後に、権限を設定する際には常に最小特権の原則を使用する必要があります。例えば、他のユーザーとファイルを共有したい場合、read 権限のみを与えるべきです。ウェブサーバーを実行している場合、write 権限ではなく readexecute 権限のみを与えるべきです。

要約

この記事では、ユーザー、グループ、および権限について学びました。ユーザーとグループの作成方法、ユーザーをグループに追加する方法、ファイルやディレクトリの所有権を変更する方法、ファイルやディレクトリの権限を変更する方法について学びました。お楽しみいただければ幸いです。次回をお楽しみに!