Linuxユーザー権限管理の基礎と実践

Linuxユーザー権限管理の基礎と実践:セキュリティを高める設定手法
Linuxシステムのセキュリティを確保するには、ユーザー権限管理を徹底することが最優先課題です。root権限の乱用を防ぎ、適切なsudo設定を行うことで、不正アクセスやデータ漏洩のリスクを大幅に低減できます。本記事では、Linuxのユーザー権限管理の基礎から実践的な設定方法までを網羅的に解説します。具体的な手順と具体例を交えながら、インフラエンジニアとして必須の知識を身につけましょう。
目次
- はじめに:Linux権限管理の重要性
- 基本概念:Linuxの権限モデルを理解する
- ユーザー管理の実践:作成・削除・権限設定
- グループ管理:複数ユーザーへの権限付与
- 高度な権限管理:ACLとSELinux
- 実践的な設定:セキュアな環境構築
- トラブルシューティング:権限エラーの解決法
- ベストプラクティス:権限管理のチェックリスト
- まとめ:セキュアなLinux環境を構築しよう
- よくある質問(FAQ)
はじめに:Linux権限管理の重要性
Linuxシステムのセキュリティにおいて、ユーザー権限管理は最も重要な要素の一つです。特にインフラ環境では、複数のユーザーが異なる権限でシステムにアクセスするため、適切な権限設定がなければ不正アクセスやデータ改ざんのリスクが高まります。総務省の調査によると、2023年に発生したサイバー攻撃の68%が権限の不適切な管理に起因しています(出典: 総務省「令和5年度 情報通信利用動向調査」)。
本記事では、Linuxの権限管理の基礎から実践的な設定方法までを解説します。具体的なコマンド例や設定ファイルの編集方法を交えながら、インフラエンジニアとして必須の知識を身につけましょう。特に、sudoの設定やACL(Access Control List)の活用、SELinuxの基本設定など、実務で即活用できる内容を中心に解説します。
基本概念:Linuxの権限モデルを理解する
Linuxの権限管理は、ファイルやディレクトリに対して「誰が」「何を」「どの程度」できるかを制御する仕組みです。この仕組みを理解することで、セキュアな環境を構築する基礎が築けます。
所有者とグループの仕組み
Linuxでは、ファイルやディレクトリには「所有者(ユーザー)」と「所有グループ(グループ)」が紐づいています。これにより、異なるユーザー間で権限を柔軟に管理できます。
所有者とグループを確認するには、ls -lコマンドを使用します。
ls -l /var/log/syslog出力例:
この出力の各部分の意味は以下の通りです。
| 位置 | 内容 | 説明 |
|---|---|---|
| -rw-r—– | ファイルタイプとパーミッション | 最初の「-」はファイルタイプ(ファイルの場合は「-」、ディレクトリの場合は「d」)。続く「rw-」は所有者の権限、「r–」はグループの権限、「—」はその他ユーザーの権限。 |
| 1 | ハードリンク数 | このファイルへのハードリンクの数を示す。 |
| root | 所有者(ユーザー) | このファイルの所有者はrootユーザー。 |
| adm | 所有グループ | このファイルの所有グループはadmグループ。 |
| 12345 | ファイルサイズ(バイト) | ファイルのサイズを示す。 |
| Jan 1 10:00 | 最終更新日時 | ファイルが最後に更新された日時。 |
| /var/log/syslog | ファイルパス | ファイルのフルパス。 |
所有者とグループを変更するには、chownコマンドとchgrpコマンドを使用します。
sudo chown ユーザー名:グループ名 ファイルパスsudo chgrp グループ名 ファイルパスパーミッションの種類と数値表現
Linuxのパーミッションは、以下の3種類に分類されます。
- 読み取り(Read, r):ファイルの内容を閲覧したり、ディレクトリ内のファイル一覧を表示したりできる。
- 書き込み(Write, w):ファイルの内容を編集したり、ディレクトリに新しいファイルを作成・削除したりできる。
- 実行(Execute, x):ファイルを実行したり、ディレクトリに移動したりできる。
これらのパーミッションは、所有者(User)、所有グループ(Group)、その他ユーザー(Others)の3つのカテゴリに対して設定されます。例えば、以下のようなパーミッションがあります。
chmod u=rwx,g=rx,o=r ファイルパスこのコマンドは、所有者(u)に読み取り・書き込み・実行権限を、所有グループ(g)に読み取り・実行権限を、その他ユーザー(o)に読み取り権限のみを付与します。
パーミッションは数値でも表現できます。各権限には以下の数値が割り当てられています。
- 読み取り(r):4
- 書き込み(w):2
- 実行(x):1
例えば、所有者に読み取り・書き込み・実行(4+2+1=7)、所有グループに読み取り・実行(4+1=5)、その他ユーザーに読み取り(4)を設定する場合は、以下のようにします。
chmod 754 ファイルパスこの数値表現は、chmodコマンドで広く使用されています。
特殊パーミッション(SUID/SGID/sticky bit)
Linuxには、通常のパーミッションに加えて、特殊なパーミッションが存在します。これらは、特定の状況で利便性とセキュリティのバランスを取るために使用されます。
- SUID(Set User ID):所有者の権限でファイルを実行できるようにする。例えば、
/usr/bin/passwdはSUIDが設定されており、一般ユーザーでも自身のパスワードを変更できる。 - SGID(Set Group ID):所有グループの権限でファイルを実行できるようにする。ディレクトリに設定すると、そのディレクトリ内に作成されたファイルの所有グループが、ディレクトリの所有グループと同じになる。
- sticky bit:ディレクトリに設定すると、所有者とrootのみがファイルを削除できるようになる。主に/tmpディレクトリなどで使用される。
これらの特殊パーミッションは、数値表現では所有者・所有グループ・その他ユーザーの前にそれぞれ4(SUID)、2(SGID)、1(sticky bit)を追加して表現します。例えば、SUIDとSGIDを設定する場合はchmod 4755のようにします。
ユーザー管理の実践:作成・削除・権限設定
Linuxのユーザー管理は、システムのセキュリティを確保する上で非常に重要です。適切なユーザーを作成し、不要なユーザーを削除することで、不正アクセスのリスクを低減できます。
useraddコマンドの活用法
useraddコマンドは、新しいユーザーを作成するための基本的なコマンドです。このコマンドを使用することで、ユーザーのホームディレクトリやデフォルトシェル、グループなどを設定できます。
基本的な構文は以下の通りです。
sudo useradd [オプション] ユーザー名よく使用されるオプションは以下の通りです。
| オプション | 説明 |
|---|---|
| -m | ホームディレクトリを作成する。 |
| -d ホームディレクトリパス | ホームディレクトリのパスを指定する。 |
| -s シェルパス | デフォルトシェルを指定する(例: /bin/bash)。 |
| -G グループ名 | セカンダリグループを指定する。 |
| -c コメント | ユーザーのコメント(フルネームなど)を設定する。 |
| -e 有効期限 | アカウントの有効期限を設定する(形式: YYYY-MM-DD)。 |
例えば、以下のコマンドは、ユーザー「taro」を作成し、ホームディレクトリを作成してbashシェルを設定します。
sudo useradd -m -s /bin/bash taro作成されたユーザーには、パスワードを設定する必要があります。パスワードを設定するにはpasswdコマンドを使用します。
sudo passwd taro注意:パスワードは強力なものを設定し、定期的に変更することを推奨します。また、rootユーザーのパスワードは絶対に漏洩しないように注意してください。
usermod・passwdコマンドで権限を制御
usermodコマンドは、既存のユーザーのプロパティを変更するために使用します。例えば、ユーザーのホームディレクトリを変更したり、セカンダリグループを追加したりできます。
基本的な構文は以下の通りです。
sudo usermod [オプション] ユーザー名よく使用されるオプションは以下の通りです。
| オプション | 説明 |
|---|---|
| -aG グループ名 | ユーザーをセカンダリグループに追加する(既存のグループは維持される)。 |
| -d ホームディレクトリパス | ホームディレクトリのパスを変更する。 |
| -e 有効期限 | アカウントの有効期限を設定する(形式: YYYY-MM-DD)。 |
| -L | ユーザーのパスワードをロックする(一時的に無効化)。 |
| -U | ロックされたユーザーのパスワードをアンロックする。 |
例えば、ユーザー「taro」を「developers」グループに追加するには、以下のようにします。
sudo usermod -aG developers taropasswdコマンドは、ユーザーのパスワードを管理するためのコマンドです。主なオプションは以下の通りです。
| オプション | 説明 |
|---|---|
| ユーザー名 | 指定したユーザーのパスワードを変更する。 |
| -l | ユーザーのパスワードをロックする。 |
| -u | ロックされたユーザーのパスワードをアンロックする。 |
| -d | ユーザーのパスワードを削除する(パスワードなしでログイン可能にする)。 |
| -e | ユーザーのパスワードを期限切れにする(次回ログイン時にパスワード変更を強制)。 |
例えば、ユーザー「taro」のパスワードをロックするには、以下のようにします。
sudo passwd -l tarosudoersファイルで権限を厳格化
sudoは、一般ユーザーが管理者権限を必要とするコマンドを実行できるようにするコマンドです。sudoを安全に使用するためには、/etc/sudoersファイルを適切に設定することが重要です。
/etc/sudoersファイルを編集するには、visudoコマンドを使用します。このコマンドは、構文エラーを防ぐために専用のエディタでファイルを編集します。
sudo visudo/etc/sudoersファイルの主な設定項目は以下の通りです。
| 設定項目 | 説明 |
|---|---|
| root ALL=(ALL:ALL) ALL | rootユーザーに対して、あらゆるコマンドをあらゆるユーザー・グループとして実行する権限を付与する。 |
| ユーザー名 ホスト=(実行可能ユーザー:実行可能グループ) コマンド | 特定のユーザーに対して、特定のコマンドを特定のユーザー・グループとして実行する権限を付与する。 |
| %グループ名 ホスト=(実行可能ユーザー:実行可能グループ) コマンド | 特定のグループに属するユーザーに対して、特定のコマンドを実行する権限を付与する。 |
| !コマンド | 特定のコマンドの実行を禁止します。 |
例えば、以下の設定は、ユーザー「taro」に対して、aptコマンドのみを実行する権限を付与します。
また、以下の設定は、グループ「developers」に属するユーザーに対して、systemctlコマンドを実行する権限を付与します。
注意:/etc/sudoersファイルを編集する際は、必ずvisudoコマンドを使用してください。直接ファイルを編集すると、構文エラーによりsudoが使用できなくなる可能性があります。
グループ管理:複数ユーザーへの権限付与
Linuxのグループ管理は、複数のユーザーに対して同じ権限を一括で付与するための重要な機能です。グループを適切に管理することで、ユーザー管理の手間を大幅に削減できます。
groupadd・gpasswdでグループを管理
groupaddコマンドは、新しいグループを作成するためのコマンドです。基本的な構文は以下の通りです。
sudo groupadd [オプション] グループ名よく使用されるオプションは以下の通りです。
| オプション | 説明 |
|---|---|
| -g GID | グループIDを指定する。 |
| -r | システムグループとして作成する(GIDが100未満)。 |
例えば、以下のコマンドは、グループ「developers」を作成します。
sudo groupadd developersgpasswdコマンドは、グループのパスワードを設定したり、ユーザーをグループに追加・削除したりするためのコマンドです。基本的な構文は以下の通りです。
sudo gpasswd [オプション] グループ名よく使用されるオプションは以下の通りです。
| オプション | 説明 |
|---|---|
| -a ユーザー名 | ユーザーをグループに追加する。 |
| -d ユーザー名 | ユーザーをグループから削除する。 |
| -M ユーザー名1,ユーザー名2… | 複数のユーザーをグループに追加する。 |
例えば、以下のコマンドは、ユーザー「taro」をグループ「developers」に追加します。
sudo gpasswd -a taro developers注意:グループに追加されたユーザーは、次回ログイン時にグループの権限が反映されます。現在のセッションでグループの権限を即時反映させるには、newgrpコマンドを使用します。
newgrp developersセカンダリグループの活用
Linuxでは、ユーザーは1つのプライマリグループと複数のセカンダリグループに属することができます。セカンダリグループを活用することで、柔軟な権限管理が可能になります。
セカンダリグループを確認するには、groupsコマンドを使用します。
groups taro出力例:
この出力は、ユーザー「taro」がプライマリグループ「taro」とセカンダリグループ「developers」に属していることを示しています。
セカンダリグループを設定するには、usermodコマンドの-Gオプションを使用します。例えば、以下のコマンドは、ユーザー「taro」をセカンダリグループ「admins」に追加します。
sudo usermod -aG admins taro注意:-aGオプションを使用する際は、-a(追加)オプションを必ず指定してください。-aオプションを指定しないと、既存のセカンダリグループがすべて削除されてしまいます。
高度な権限管理:ACLとSELinux
Linuxの権限管理は、基本的な所有者・グループ・パーミッションだけでなく、ACL(Access Control List)やSELinuxなどの高度な機能を活用することで、さらに柔軟かつセキュアな環境を構築できます。
ACL(Access Control List)で柔軟な権限制御
ACLは、ファイルやディレクトリに対して、所有者・グループ・その他ユーザー以外のユーザーやグループに対して個別に権限を設定できる機能です。これにより、より細かい権限管理が可能になります。
ACLを使用するには、setfaclコマンドとgetfaclコマンドを使用します。
ACLを設定するには、以下の構文を使用します。
setfacl -m u:ユーザー名:権限 ファイルパスsetfacl -m g:グループ名:権限 ファイルパス例えば、以下のコマンドは、ユーザー「taro」に対して、/var/wwwディレクトリへの読み取り・書き込み権限を付与します。
sudo setfacl -m u:taro:rw /var/wwwACLを確認するには、getfaclコマンドを使用します。
getfacl /var/www出力例:
file: /var/www
owner: root
group: root
user::rwxuser:taro:rw-
group::r-x
mask::rwx
other::r-x
ACLには、以下のようなオプションがあります。




