マルチユーザー環境やコンテナ基盤を運用するLinuxインフラストラクチャにおいて、ディレクトリやシステムファイルに対する適切なアクセス制御(DAC: Discretionary Access Control)の設計は、セキュリティ境界を確立する上で不可欠です。パーミッション設定や所有権の定義を誤ると、不審なプロセスによる設定ファイルの改ざんや、一般ユーザーによる機密データの閲覧、アクセス拒否によるアプリケーション停止といった障害に直結します。本稿では、Linuxにおけるアクセス権限の構造、chmod および chown による権限変更、アカウントのライフサイクル管理と実務におけるトラブルシューティング手順を整理・検証します。
設定ファイルの操作とエディタの基本
システム設定ファイル(例: /etc/passwd)の確認や編集には、ターミナル上で動作するモードレスなテキストエディタ nano が頻繁に使用されます。
nano エディタの起動と操作
ターゲットファイルを指定してエディタを起動します。
nano passwd
💡 操作およびマニュアルの参照手順
・終了手順: 編集作業完了後、Ctrl + X を押下します。変更が存在する場合は保存確認のプロンプトが表示されます。
・ヘルプとマニュアル: コマンドラインオプションの確認およびマニュアルの参照は以下のコマンドで実行します。
nano --help
man nano
※ man ページの閲覧を終了する際は q キーを押下します。
ファイル属性・所有権(chown)・アクセス権限(chmod)
Linuxの任意アクセス制御(DAC)は、「所有者(Owner/User)」、「グループ(Group)」、「その他(Others)」の3つの対象クラスに対して、読み取り(r)、書き込み(w)、実行(x)のビットマスクを割り当てることで機能します。
主要な管理コマンド
・chmod (Change Mode): ファイルおよびディレクトリのアクセス権限ビット(r, w, x)を変更します。
・chown (Change Owner): ファイルやディレクトリの所有ユーザーおよび所属グループを変更します。
chown [OWNER].[GROUP] FILENAME_OR_DIRECTORY
# または以下の構文を使用します
chown [OWNER]:[GROUP] FILENAME_OR_DIRECTORY
実務検証シナリオ
シナリオA: ディレクトリ権限の制限とアクセス拒否の検証
- ディレクトリの作成と所有権の再割り当て
master ユーザーでディレクトリ dir1 を作成します。デフォルトの umask 022 が適用される環境では、ディレクトリは 755 (rwxr-xr-x) で生成されます。
mkdir dir1
sudo chown master:master dir1
- パーミッションの絞り込み
dir1 の権限を変更し、「その他(Others)」クラスのアクセス権限を完全に剥奪します。
chmod 750 dir1
・8進数表現の分解 (750):
所有者 (
7->rwx): 読み取り、書き込み、ディレクトリトラバーサル(進入)の全権限。グループ (
5->r-x): 読み取りおよびディレクトリトラバーサル権限。その他 (
0->---): 全権限の剥奪。
- アクセス拒否の検証
一般ユーザー user1(「その他」に該当)へコンテキストを切り替え、ディレクトリへ移動を試みます。
su - user1
cd /path/to/dir1
結果: トラバーサル権限(x)が存在しないため、Permission denied エラーが発生し進入が拒否されます。
シナリオB: ファイル作成制約と動的な権限変更
- 所有者によるファイル作成
master ユーザーコンテキストで dir1 内にファイルを作成します。
touch dir1/test1.txt
masterはdir1に対してwおよびx権限を保持しているため、正常に作成されます。生成されたファイルのデフォルトパーミッションは664または644` となります。
- 非特権ユーザーによるファイル作成の失敗
user1 アカウントから dir1 内へのファイル生成を試みます。
touch dir1/test2.txt
結果: Permission denied で失敗します。ディレクトリ内に新規エントリを作成するには、親ディレクトリに対して 書き込み(w) および 実行(x) の両権限が必要となります。
- 「その他」クラスへの権限拡大
master アカウントに戻り、dir1 のパーミッションを書き換えます。
chmod 757 dir1
・8進数表現の分解 (757):
所有者 (
7->rwx): 全権限。グループ (
5->r-x): 読み取り・トラバーサル権限。その他 (
7->rwx): 全権限を許可。
- 再検証
再度 user1 からファイルを作成します。
touch dir1/test2.txt
結果: 作成が正常に完了します。「その他」に付与された 7 ビットにより、user1 によるディレクトリ構成変更が許可されます。
記号モード(Symbolic Mode)による詳細指定
8進数表記に加え、特定のフラグのみを追加・削除・設定可能な記号モードも広く利用されます。
記号表記の構成成分
| カテゴリ | 記号 | 説明 |
|---|---|---|
| 対象クラス | u | User: ファイルの所有ユーザー |
g | Group: ファイルの所有グループ | |
o | Others: その他のユーザー | |
a | All: 全てのクラス (u, g, o の組み合わせ) | |
| 演算子 | + | 権限の追加 |
- | 権限の剥奪 | |
= | 権限の明示的上書き設定 | |
| 権限フラグ | r | 読み取り (Read) |
w | 書き込み (Write) | |
x | 実行 / ディレクトリ進入 (Execute) |
代表的な実行コマンド例
# 所有者に書き込み権限を追加
chmod u+w filename
# グループとその他に書き込み権限を追加
chmod go+w filename
# 所有者に実行権限、グループ/その他に書き込み権限を同一パスで適用
chmod u+x,go+w filename
# 全クラスの権限を rwx に明示設定
chmod a+rwx filename
アカウントの生命周期管理 (adduser / userdel)
アクセス制御の前提となるユーザー識別子(UID)の管理手順です。
・アカウント作成:
adduser <username>
・アカウント削除(基本):
userdel <username>
※上記を実行した場合、/etc/passwd や /etc/shadow の登録情報のみが破棄され、ホームディレクトリやメールキューは残存します。
・アカウントおよび関連データの完全削除 (-r オプション):
userdel -r <username>
⚠️ -r オプション指定時の内部処理フロー
ユーザーアカウントエントリーの削除
ホームディレクトリ(
/home/<username>)の再帰的破棄スプール内の未処理メール(
/var/mail/<username>など)の削除
Troubleshooting
1. ディレクトリの実行権限(x)不足によるパス解決失敗
ファイル自体のパーミッションが 644 (rw-r--r--) であっても、上位ディレクトリに x 権限(トラバーサル権限)が付与されていない場合、プロセスはファイルへ到達できず Permission denied が返されます。
🛠️ 対処法: 親ディレクトリ構造の権限を確認し、最小限の実行権限を付与します。
chmod o+x /path/to/parent_directory
2. userdel -r 実行時のプロセス残存エラー
対象ユーザーがバックグラウンドプロセスを所有している場合、userdel コマンドは失敗します。
⚠️ 現象例:
userdel: user <username> is currently used by process <pid>
🛠️ 対処手順: 該当ユーザーのプロセスを停止してから削除を実行します。
pkill -u <username>
userdel -r <username>
Operational Notes
本環境でのディレクトリ設定、ユーザー切り替え、権限変更および結果検証時のターミナルログ出力例です。
master@edge-node:~$ mkdir dir1
master@edge-node:~$ sudo chown master:master dir1
master@edge-node:~$ chmod 750 dir1
master@edge-node:~$ ls -ld dir1
drwxr-x--- 2 master master 4096 Sep 15 10:00 dir1
master@edge-node:~$ su - user1
Password:
user1@edge-node:~$ cd /home/master/dir1
-bash: cd: /home/master/dir1: Permission denied
user1@edge-node:~$ exit
logout
master@edge-node:~$ chmod 757 dir1
master@edge-node:~$ ls -ld dir1
drwxr-xr-w 2 master master 4096 Sep 15 10:02 dir1
master@edge-node:~$ su - user1
Password:
user1@edge-node:~$ touch /home/master/dir1/test2.txt
user1@edge-node:~$ ls -l /home/master/dir1/test2.txt
-rw-r--r-- 1 user1 user1 0 Sep 15 10:03 /home/master/dir1/test2.txt
```</username></username></pid></username></username></username></username></username></username>