Linuxユーザー権限管理の基礎と実践:セキュリティを高める設定手法

Linuxシステムのセキュリティを確保するには、ユーザー権限管理を徹底することが最優先課題です。root権限の乱用を防ぎ、適切なsudo設定を行うことで、不正アクセスやデータ漏洩のリスクを大幅に低減できます。本記事では、Linuxのユーザー権限管理の基礎から実践的な設定方法までを網羅的に解説します。具体的な手順と具体例を交えながら、インフラエンジニアとして必須の知識を身につけましょう。


目次


はじめに:Linux権限管理の重要性

Linuxシステムのセキュリティにおいて、ユーザー権限管理は最も重要な要素の一つです。特にインフラ環境では、複数のユーザーが異なる権限でシステムにアクセスするため、適切な権限設定がなければ不正アクセスやデータ改ざんのリスクが高まります。総務省の調査によると、2023年に発生したサイバー攻撃の68%が権限の不適切な管理に起因しています(出典: 総務省「令和5年度 情報通信利用動向調査」)。

本記事では、Linuxの権限管理の基礎から実践的な設定方法までを解説します。具体的なコマンド例や設定ファイルの編集方法を交えながら、インフラエンジニアとして必須の知識を身につけましょう。特に、sudoの設定やACL(Access Control List)の活用、SELinuxの基本設定など、実務で即活用できる内容を中心に解説します。


基本概念:Linuxの権限モデルを理解する

Linuxの権限管理は、ファイルやディレクトリに対して「誰が」「何を」「どの程度」できるかを制御する仕組みです。この仕組みを理解することで、セキュアな環境を構築する基礎が築けます。

所有者とグループの仕組み

Linuxでは、ファイルやディレクトリには「所有者(ユーザー)」と「所有グループ(グループ)」が紐づいています。これにより、異なるユーザー間で権限を柔軟に管理できます。

所有者とグループを確認するには、ls -lコマンドを使用します。

ls -l /var/log/syslog

出力例:

-rw-r—– 1 root adm 12345 Jan 1 10:00 /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 taro

passwdコマンドは、ユーザーのパスワードを管理するためのコマンドです。主なオプションは以下の通りです。

オプション説明
ユーザー名指定したユーザーのパスワードを変更する。
-lユーザーのパスワードをロックする。
-uロックされたユーザーのパスワードをアンロックする。
-dユーザーのパスワードを削除する(パスワードなしでログイン可能にする)。
-eユーザーのパスワードを期限切れにする(次回ログイン時にパスワード変更を強制)。

例えば、ユーザー「taro」のパスワードをロックするには、以下のようにします。

sudo passwd -l taro

sudoersファイルで権限を厳格化

sudoは、一般ユーザーが管理者権限を必要とするコマンドを実行できるようにするコマンドです。sudoを安全に使用するためには、/etc/sudoersファイルを適切に設定することが重要です。

/etc/sudoersファイルを編集するには、visudoコマンドを使用します。このコマンドは、構文エラーを防ぐために専用のエディタでファイルを編集します。

sudo visudo

/etc/sudoersファイルの主な設定項目は以下の通りです。

設定項目説明
root ALL=(ALL:ALL) ALLrootユーザーに対して、あらゆるコマンドをあらゆるユーザー・グループとして実行する権限を付与する。
ユーザー名 ホスト=(実行可能ユーザー:実行可能グループ) コマンド特定のユーザーに対して、特定のコマンドを特定のユーザー・グループとして実行する権限を付与する。
%グループ名 ホスト=(実行可能ユーザー:実行可能グループ) コマンド特定のグループに属するユーザーに対して、特定のコマンドを実行する権限を付与する。
!コマンド特定のコマンドの実行を禁止します。

例えば、以下の設定は、ユーザー「taro」に対して、aptコマンドのみを実行する権限を付与します。

taro ALL=(ALL) /usr/bin/apt

また、以下の設定は、グループ「developers」に属するユーザーに対して、systemctlコマンドを実行する権限を付与します。

%developers ALL=(ALL) /usr/bin/systemctl

注意:/etc/sudoersファイルを編集する際は、必ずvisudoコマンドを使用してください。直接ファイルを編集すると、構文エラーによりsudoが使用できなくなる可能性があります。


グループ管理:複数ユーザーへの権限付与

Linuxのグループ管理は、複数のユーザーに対して同じ権限を一括で付与するための重要な機能です。グループを適切に管理することで、ユーザー管理の手間を大幅に削減できます。

groupadd・gpasswdでグループを管理

groupaddコマンドは、新しいグループを作成するためのコマンドです。基本的な構文は以下の通りです。

sudo groupadd [オプション] グループ名

よく使用されるオプションは以下の通りです。

オプション説明
-g GIDグループIDを指定する。
-rシステムグループとして作成する(GIDが100未満)。

例えば、以下のコマンドは、グループ「developers」を作成します。

sudo groupadd developers

gpasswdコマンドは、グループのパスワードを設定したり、ユーザーをグループに追加・削除したりするためのコマンドです。基本的な構文は以下の通りです。

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

この出力は、ユーザー「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/www

ACLを確認するには、getfaclコマンドを使用します。

getfacl /var/www

出力例:

file: /var/www

owner: root

group: root

user::rwx
user:taro:rw-
group::r-x
mask::rwx
other::r-x

ACLには、以下のようなオプションがあります。

【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。
ABOUT ME
たから
サラリーマンをしながら開業して経営やってます。 今年、本業で独立・別事業を起業予定です。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900/FE/サーティファイC言語 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営