Linuxのセキュリティモデルは、厳密なアクセス制御に基づいて構築されています。その中心となるのが「ユーザ」「グループ」「ファイル権限」の三要素です。これらが連携して、誰が何をどこで実行できるかを決定します。
シェル:ユーザとカーネルの仲介者
Linuxシステムは、カーネル(ハードウェア操作の核)、シェル(コマンドインタフェース)、およびユーティリティツールから成ります。シェル(例:bash)は単なる入力窓ではなく、以下の役割を担います:
- コマンド解釈:ユーザが入力した文字列を解析し、カーネルに適切なシステムコールとして伝達
- 結果整形:カーネルからの返答を人間が読みやすい形式に変換して表示
- アクセスフィルタリング:不正または未実装の操作を事前に遮断し、カーネルへの不要な負荷やリスクを回避
ユーザ種別と特権管理
Linuxでは、ユーザは主に二つのカテゴリに分けられます:
- rootユーザ:UID 0 の唯一の特権アカウント。全ファイル・デバイス・プロセスへの完全制御権を持つ
- 一般ユーザ:通常UID 1000以上で作成され、自身のホームディレクトリと一時領域のみに限定されたアクセス権を持つ
ユーザ切り替えにはsuコマンドを使います:
su -l alice # aliceユーザへログインシェルを起動して切り替え
su -c "ls /root" root # rootで1回限りのコマンド実行
日常作業中は、sudoによる一時的特権昇格が推奨されます。対象ユーザは/etc/sudoersに登録済みである必要があります:
sudo systemctl restart nginx
ファイルの所有関係と権限構造
ls -l出力の先頭部分は、ファイルのタイプとアクセス権限を示します:
-rw-r--r-- 1 alice devteam 1024 Jan 15 10:30 config.yaml
- 第1文字:ファイルタイプ(
-=通常ファイル、d=ディレクトリ、l=シンボリックリンクなど) - 次3文字(rw-):所有者(owner)の権限
- 次3文字(r--):所属グループ(group)の権限
- 次3文字(r--):その他(others)の権限
各権限ビットの意味:
| 記号 | 数値 | 意味(ファイル) | 意味(ディレクトリ) |
|---|---|---|---|
| r | 4 | 内容の読込可 | エントリ一覧表示可(ls) |
| w | 2 | 内容の編集可 | エントリの追加/削除可(touch, rm) |
| x | 1 | 実行可能(スクリプト/バイナリ) | カレントディレクトリへの移動可(cd) |
権限の変更手法
権限設定は、数値表現(オクタル)または記号表現のいずれかで行えます。
オクタル表記による設定
各3ビットを8進数1桁で表現。例:755 = rwxr-xr-x
chmod 644 document.txt # 所有者:rw-, グループ:r--, others:r--
chmod 750 script.sh # 所有者:rwx, グループ:r-x, others:---
記号表記による微調整
既存権限を維持しつつ、特定の権限を追加・削除できます:
chmod u+x script.sh # 所有者に実行権を付与
chmod go-w private.conf # グループ・othersから書き込み権を剥奪
chmod a+r data.log # 全ユーザ(all)に読み込み権を付与
所有者とグループの再割り当て
所有者の変更にはchown、グループの変更にはchgrpを使用します。これらの操作はrootまたはsudo権限が必要です:
chown bob:admins project/ # 所有者をbob、グループをadminsに
chown :developers file.txt # グループのみ変更(所有者は不変)
chgrp engineering archive.tar.gz