Linuxサーバー管理完全攻略 第2編:ユーザーと権限管理
Linux Server Administration Complete Guide Part 2
Linuxサーバー管理完全攻略シリーズ
第1編:基礎とファイルシステム | 第2編:ユーザーと権限管理(現在)| 第3編:パッケージ管理とサービス
はじめに:なぜユーザー管理が重要なのか?
Linuxはマルチユーザーオペレーティングシステムです。複数のユーザーが同時にシステムにアクセスでき、各ユーザーは固有の権限とワークスペースを持ちます。サーバーセキュリティの最初の防御線は、適切なユーザー管理と権限設定です。
今回は、ユーザーアカウント作成からグループ管理、ファイル権限設定、特殊権限、sudo設定まで、実務で必須の内容を扱います。
1. ユーザーアカウントの理解
1.1 ユーザータイプ
- rootユーザー:UID 0、システムのすべての権限を持つスーパーユーザー
- システムユーザー:UID 1-999、サービス実行用アカウント(nginx、mysqlなど)
- 一般ユーザー:UID 1000以上、実際の人が使用するアカウント
1.2 ユーザー情報ファイル
# /etc/passwd - ユーザー基本情報
username:x:1000:1000:Full Name:/home/username:/bin/bash
# フィールド:ユーザー名:パスワード位置:UID:GID:説明:ホームディレクトリ:デフォルトシェル
# /etc/shadow - 暗号化されたパスワード(rootのみアクセス可能)
username:$6$salt$encrypted:19000:0:99999:7:::
# フィールド:ユーザー名:暗号化パスワード:最終変更日:最小使用日:最大使用日:警告期間:...
1.3 ユーザー情報の確認
# 現在のユーザー確認
whoami
id
# 特定ユーザーの情報
id username
getent passwd username
# ログイン中のユーザー
who
w
2. ユーザーアカウント管理
2.1 ユーザー作成
# 基本ユーザー作成
sudo useradd username
# オプションを指定して作成
sudo useradd -m -d /home/devuser -s /bin/bash -c "Developer Account" devuser
# -m: ホームディレクトリ作成
# -d: ホームディレクトリパス指定
# -s: デフォルトシェル指定
# -c: 説明(コメント)
# パスワード設定
sudo passwd devuser
2.2 ユーザー変更
# ユーザー情報変更
sudo usermod -c "Updated Comment" username
sudo usermod -s /bin/zsh username # シェル変更
sudo usermod -d /new/home username # ホームディレクトリ変更
sudo usermod -l newname oldname # ユーザー名変更
sudo usermod -aG groupname username # グループに追加(-a必須!)
# アカウントロック/解除
sudo usermod -L username # ロック
sudo usermod -U username # 解除
2.3 ユーザー削除
# ユーザーのみ削除(ホームディレクトリ保持)
sudo userdel username
# ユーザーとホームディレクトリを一緒に削除
sudo userdel -r username
3. グループ管理
3.1 グループの理解
グループは複数のユーザーをまとめて権限を一括管理する単位です。各ユーザーは1つのプライマリグループと複数のセカンダリグループに所属できます。
# /etc/group - グループ情報
groupname:x:1000:user1,user2,user3
# フィールド:グループ名:パスワード:GID:メンバーリスト
3.2 グループ管理コマンド
# グループ作成
sudo groupadd developers
sudo groupadd -g 2000 devops # GID指定
# グループ変更
sudo groupmod -n newname oldname # 名前変更
sudo groupmod -g 2001 groupname # GID変更
# グループ削除
sudo groupdel groupname
# グループメンバー確認
getent group developers
groups username
3.3 グループ活用例
# 開発チームグループ作成とユーザー追加
sudo groupadd developers
sudo usermod -aG developers alice
sudo usermod -aG developers bob
# 共有ディレクトリ設定
sudo mkdir /srv/project
sudo chgrp developers /srv/project
sudo chmod 2775 /srv/project
4. ファイル権限の深掘り
4.1 権限構造のおさらい
-rwxr-xr-- 1 owner group 1024 Jan 21 10:00 file.txt
│└─┬┘└─┬┘└─┬┘
│ │ │ └── その他(Others):r--(読み取りのみ)
│ │ └────── グループ(Group):r-x(読み取り、実行)
│ └────────── 所有者(Owner):rwx(読み取り、書き込み、実行)
└───────────── ファイルタイプ:-(通常ファイル)
4.2 chmod - 権限変更
# 数値方式(Octal)
chmod 755 script.sh # rwxr-xr-x
chmod 644 file.txt # rw-r--r--
chmod 700 private/ # rwx------
chmod 777 public/ # rwxrwxrwx(セキュリティ上非推奨)
# 記号方式(Symbolic)
chmod u+x script.sh # 所有者に実行権限を追加
chmod g-w file.txt # グループから書き込み権限を削除
chmod o=r file.txt # その他を読み取りのみに設定
chmod a+r file.txt # 全員に読み取り権限を追加
chmod u=rwx,g=rx,o=r file # 複合設定
# 再帰的適用
chmod -R 755 directory/
4.3 chown - 所有権変更
# 所有者変更
sudo chown newowner file.txt
# 所有者とグループを同時に変更
sudo chown newowner:newgroup file.txt
# グループのみ変更
sudo chown :newgroup file.txt
sudo chgrp newgroup file.txt
# 再帰的適用
sudo chown -R webuser:www-data /var/www/
5. 特殊権限
5.1 SUID(Set User ID)
実行ファイルに設定すると、実行時にファイル所有者の権限で実行されます。
# SUID設定
chmod u+s program
chmod 4755 program
# 例:passwdコマンド
ls -l /usr/bin/passwd
# -rwsr-xr-x 1 root root ... /usr/bin/passwd
# 一般ユーザーも自分のパスワードを変更できる
5.2 SGID(Set Group ID)
ファイルに設定するとグループ権限で実行、ディレクトリに設定すると新しいファイルがディレクトリのグループを継承します。
# SGID設定
chmod g+s directory/
chmod 2775 directory/
# チーム共有フォルダに便利
sudo mkdir /srv/shared
sudo chgrp developers /srv/shared
sudo chmod 2775 /srv/shared
# この中に作成されるすべてのファイルはdevelopersグループに属する
5.3 Sticky Bit
ディレクトリに設定すると、ファイル所有者のみがそのファイルを削除できます。
# Sticky Bit設定
chmod +t directory/
chmod 1777 directory/
# 例:/tmpディレクトリ
ls -ld /tmp
# drwxrwxrwt 12 root root ... /tmp
# 全ユーザーがファイル作成可能だが、自分のファイルのみ削除可能
5.4 特殊権限の数値表記
| 権限 | 数値 | 表示 | 適用対象 |
|---|---|---|---|
| SUID | 4 | s(所有者実行位置) | 実行ファイル |
| SGID | 2 | s(グループ実行位置) | ファイル/ディレクトリ |
| Sticky | 1 | t(その他実行位置) | ディレクトリ |
6. sudo設定と管理
6.1 sudoとは?
sudo(Superuser Do)は一般ユーザーが管理者権限でコマンドを実行できるようにするツールです。rootで直接ログインするより安全で、すべての操作がログに記録されます。
6.2 sudoersファイルの編集
# 必ずvisudoを使用(構文チェックを実行)
sudo visudo
# /etc/sudoers 基本構造
# ユーザー名 ホスト=(実行ユーザー) コマンド
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
# 例:devuserにsudo権限を付与
devuser ALL=(ALL:ALL) ALL
# 特定コマンドのみ許可
webadmin ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx
# パスワードなしで実行許可
deploy ALL=(ALL) NOPASSWD: /usr/bin/git pull
6.3 sudoグループの活用
# Ubuntu/Debian:sudoグループ
sudo usermod -aG sudo username
# RHEL/CentOS:wheelグループ
sudo usermod -aG wheel username
# グループ設定確認
getent group sudo
getent group wheel
6.4 sudoログ確認
# sudo使用ログ
sudo cat /var/log/auth.log | grep sudo # Debian/Ubuntu
sudo cat /var/log/secure | grep sudo # RHEL/CentOS
7. 実践シナリオ
7.1 Web開発チーム環境構築
# 1. グループ作成
sudo groupadd webdev
# 2. ユーザー作成とグループ追加
sudo useradd -m -s /bin/bash -G webdev alice
sudo useradd -m -s /bin/bash -G webdev bob
sudo passwd alice
sudo passwd bob
# 3. プロジェクトディレクトリ設定
sudo mkdir -p /var/www/project
sudo chown root:webdev /var/www/project
sudo chmod 2775 /var/www/project
# 4. 特定sudo権限を付与
sudo visudo
# 追加:%webdev ALL=(ALL) /usr/bin/systemctl restart nginx
7.2 セキュリティ点検チェックリスト
# SUIDファイル検索(セキュリティ監査)
sudo find / -perm -4000 -type f 2>/dev/null
# 所有者のないファイル検索
sudo find / -nouser -o -nogroup 2>/dev/null
# world-writableファイル検索
sudo find / -perm -0002 -type f 2>/dev/null
# 空のパスワードアカウント検索
sudo awk -F: '($2 == "") {print $1}' /etc/shadow
8. よくある間違いと解決策
- usermod -G vs usermod -aG:
-aGは既存グループを維持して追加、-Gのみだと既存グループがすべて削除される - chmod 777:絶対に使用禁止。セキュリティ脆弱性の原因
- /etc/sudoersの直接編集:必ず
visudoを使用。構文エラーでシステムアクセス不可になる - rootアカウントの直接使用:sudoによる権限昇格を推奨。監査ログ記録のため
まとめ
ユーザーと権限管理はLinuxサーバーセキュリティの基礎です。適切なユーザー分離、最小権限の原則適用、sudoによる権限管理は、安全なサーバー運用の必須要素です。
次の第3編ではパッケージ管理とサービス運用を扱います。
シリーズ
← 第1編:基礎とファイルシステム | 第2編(現在)| 第3編:パッケージ管理とサービス →