Linuxのマスターユーザーと権限
Linuxでは、ユーザーはシステムとそのリソースにアクセスできる個人です。各ユーザーには一意のユーザー名とユーザーID(UID
)があり、システムに彼らを識別します。グループは、ファイルやディレクトリにアクセスするための共通の権限を共有するユーザーの集まりです。権限は、ファイルやディレクトリにアクセスできるユーザーと、それらに対して実行できるアクションを決定するルールです。
Linuxでは、読み取り、書き込み、実行の3種類の権限からなる権限システムを使用しています。これらの権限は、ファイルやディレクトリの所有者、ファイルやディレクトリの所有者であるグループのメンバー、およびシステム上の他のすべてのユーザーの3種類のユーザーに対して設定することができます。
Linuxでのユーザー、グループ、および権限の仕組みを理解することは、システムリソースへのアクセスの管理とシステムのセキュリティを確保するために重要です。
ユーザー
現在のユーザーの特定
Linuxで現在のユーザーを特定するには、whoami
コマンドを使用します。このコマンドは、ターミナルに現在のユーザーのユーザー名を表示します。
> whoami
tinymemo
さらに、$USER
環境変数の内容を確認することもできます。これにより、現在のユーザーのユーザー名も表示されます。
> echo $USER
tinymemo
ユーザーID
Linuxの各ユーザーは、システムに対してユニークなユーザーID(UID
)を持っています。id
コマンドを使用して、現在のユーザーのUID
を表示することができます。
> 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
のみを表示することもできます。
> id -u
1000
> echo $UID
1000
ユーザーのUID
は、ユーザーが作成される際に自動的に生成されます。ルートユーザーのUID
は常に0です。
Linuxシステム上のすべてのユーザーは、/etc/passwd
ファイルに格納されています。cat
コマンドを使用してこのファイルの内容を表示することができます。
> 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
を生成します。
> sudo adduser newusername
ユーザー `newusername' を追加中 ...
新しいグループ `newusername' (1000) を追加中 ...
新しいユーザー `newusername' (1000) をグループ `newusername' に追加中 ...
ホームディレクトリ `/home/newusername' を作成中 ...
`/etc/skel' からファイルをコピー中 ...
新しいパスワード:
新しいパスワードを再入力してください:
passwd: パスワードが正常に更新されました
newusername のユーザー情報を変更中
新しい値を入力するか、デフォルトのままにするには ENTER キーを押してください
フルネーム []:
部屋番号 []:
勤務先電話番号 []:
自宅電話番号 []:
その他 []:
情報は正しいですか? [Y/n] y
adduser
コマンドを実行すると、新しいユーザーのパスワードを入力するように求められます。また、passwd
コマンドを使用して新しいユーザーのパスワードを設定することもできます。
> sudo passwd newuser
新しいパスワード:
新しいパスワードを再入力してください:
passwd: パスワードが正常に更新されました
passwd
コマンドを実行する際にユーザー名を省略すると、現在のユーザーのパスワードが設定されます。
ユーザーの削除
Linuxでユーザーを削除するには、deluser
コマンドを使用します。このコマンドは、指定したユーザーをシステムから削除します。
> sudo deluser newusername
crontabの削除中...
ユーザー `newuser' の削除中...
完了しました。
グループ
グループは、ファイルやディレクトリにアクセスするための共通の権限を持つユーザーの集まりです。各グループには、システムに識別される一意のグループID(GID
)があります。現在のユーザーのGID
を表示するには、id
コマンドを使用できます。
> id
uid=1000(tinymemo) gid=1000(tinymemo) groups=1000(tinymemo),4(adm),27(sudo),44(video),50(staff)
上記のように、現在のユーザーのGID
は1000
です。-g
オプションを使用してGID
のみを表示することもできますし、id -g
コマンドを使用してGID
のみを表示することもできます。
グループへのユーザーの追加
ユーザーは複数のグループのメンバーになることができます。ユーザーをグループに追加するには、usermod
コマンドを使用します。このコマンドは、指定したユーザーを指定したグループに追加します。
> sudo usermod -a -G groupname username
-a
オプションは、usermod
コマンドに対してユーザーを現在のグループではなく指定したグループに追加するように指示します。-G
オプションは、usermod
コマンドに対して指定したグループにユーザーを追加するように指示します。
グループからユーザーを削除する
ユーザーをグループから削除するには、gpasswd
コマンドを使用します。このコマンドは、指定したユーザーを指定したグループから削除します。
> sudo gpasswd -d ユーザー名 グループ名
ユーザー newuser をグループ tinkink から削除しています
ユーザーグループを確認する
ユーザーが所属しているグループを確認するには、groups
コマンドを使用します。このコマンドは、指定したユーザーが所属しているグループを表示します。
> groups newuser
newuser : newuser tinkink
グループの作成と削除
Linuxで新しいグループを作成するには、addgroup
コマンドを使用します。このコマンドは、指定したグループ名とGID
で新しいグループを作成します。GID
を指定しない場合、addgroup
コマンドは新しいグループのためにGID
を自動的に生成します。
> sudo addgroup テストグループ
sudo addgroup テストグループ
グループ `テストグループ' (GID 1001) を追加しています...
完了しました。
Linuxでグループを削除するには、delgroup
コマンドを使用します。このコマンドは、指定したグループをシステムから削除します。
> sudo delgroup テストグループ
グループ `テストグループ' を削除しています...
完了しました。
権限
ユーザーとグループの理解の長い旅の後、ついに権限について話し合う準備が整いました。権限は次のことを決定するルールです:
- 誰がファイルやディレクトリにアクセスできるか
- それらをどのように操作できるか
これらの権限は、3つのタイプのユーザー(誰)に対して設定できます:
- ファイルやディレクトリの所有者
- ファイルやディレクトリの所有グループのメンバー
- システム上の他のすべてのユーザー
権限には3つのタイプ(何ができるか)があります:読み取り
、書き込み
、実行
。
したがって、ファイルやディレクトリの権限は、3つのタイプのユーザー(誰)と3つのタイプの権限(何ができるか)に設定できます。
権限の確認
ファイルやディレクトリの権限を確認するには、ls -l
コマンドを使用します。このコマンドは指定したファイルやディレクトリの権限を表示します。
> 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
コマンドの使用方法のいくつかの例を示します:
> 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
です。
次のコマンドを使用できます:
> chmod 644 file.txt
所有権の変更
ファイルやディレクトリの所有権を変更するには、chown
コマンドを使用します。このコマンドは指定したファイルやディレクトリの所有権を変更します。以下にchown
コマンドの使用方法の例を示します:
> chown tinymemo:tinymemo file.txt
> chown tinymemo: file.txt
> chown :tinymemo file.txt
> chown tinymemo file.txt
所有権の最初の構文は[ユーザー]:[グループ]
です。[ユーザー]
または[グループ]
を省略することもできます。
ディレクトリの所有権を再帰的に変更するには、-R
オプションを使用できます。
一般的なパーミッション
以下は一般的なパーミッションです:
- ファイルに対しては
644
が一般的であり、デフォルトのパーミッションでもあります - ディレクトリに対しては
755
が一般的であり、デフォルトのパーミッションでもあります - SSHの秘密鍵などの機密ファイルに対しては
600
もしくは400
を使用します - キャッシュファイルなどの一時ファイルに対しては
777
を使用します。また、開発、デバッグ、テスト中の場合にのみ使用し、本番環境では強く推奨されません
644
と 755
の違いは、ファイルまたはディレクトリの所有者に対する 実行
パーミッションです。なぜディレクトリに所有者の 実行
パーミッションが必要なのでしょうか?それは、ディレクトリへのアクセスが実際にはディレクトリの 実行
を意味するからです。つまり、ディレクトリ内のファイルやディレクトリをリストすることができます。
最終的なヒント
以下はいくつかの最終的なヒントです:
まず、ファイルやディレクトリのパーミッションは、親ディレクトリのパーミッションにも依存します。
例えば、ディレクトリに実行
パーミッションがない場合、そのディレクトリ内のファイルやディレクトリにアクセスすることはできません。たとえファイルやディレクトリの読み取り
パーミッションがあってもです。最も一般的な例は、ホーム
ディレクトリです。他のユーザーのホームディレクトリにはアクセスできません。たとえホームディレクトリ内のファイルやディレクトリの読み取り
パーミッションがあってもです。
したがって、他のユーザーとファイルやディレクトリを共有したい場合は、すべてのユーザーが実行
パーミッションを持つディレクトリ(ホーム
ディレクトリの外側)に配置する方が良いです。そうしないと、パーミッションの問題に遭遇する可能性があります。
次に、SELinux
もファイルやディレクトリのパーミッションに影響を与える場合があります。パーミッションの問題に遭遇し、パーミッションが正しいことを絶対に確認している場合は、SELinux
を無効にしてみてください。それで問題が解決するかどうか確認できます。
最後に、権限を設定する際には常に最小特権の原則を使用する必要があります。例えば、他のユーザーとファイルを共有したい場合、read
権限のみを与えるべきです。ウェブサーバーを実行している場合、write
権限ではなく read
と execute
権限のみを与えるべきです。
要約
この記事では、ユーザー、グループ、および権限について学びました。ユーザーとグループの作成方法、ユーザーをグループに追加する方法、ファイルやディレクトリの所有権を変更する方法、ファイルやディレクトリの権限を変更する方法について学びました。お楽しみいただければ幸いです。次回をお楽しみに!