Linux権限管理応用【応用編】

権限管理応用 - 高度なセキュリティ設定

権限管理の基礎を身につけたら、次は応用技術をマスターしましょう。この応用編では、所有者変更、グループ管理の実践、デフォルト権限設定、特殊権限を詳しく解説します。実務で必須の高度な権限管理技術を習得できます。

目次

  1. chown/chgrp - 所有者の変更
  2. groups - グループ管理の実践
  3. umask - デフォルト権限の設定
  4. 特殊な権限

1. chown/chgrp - 所有者の変更

chown - 所有者とグループの変更

所有者のみ変更

$ chown newuser file.txt

所有者とグループを同時に変更

$ chown newuser:newgroup file.txt

グループのみ変更

$ chown :newgroup file.txt

再帰的に変更

$ chown -R webuser:www-data /var/www/html/

chgrp - グループの変更

$ chgrp developers project/

🛠️ 実務でのchown活用例

Webサーバーのファイル所有者設定

目的: Apache/Nginxが正常にファイルを読み書きできるよう設定

# ファイルはwww-dataが所有、グループも同じ
$ sudo chown -R www-data:www-data /var/www/html/

# 設定ファイルのみrootが所有
$ sudo chown root:root /etc/apache2/sites-available/*

ログファイルの権限設定

目的: アプリケーションログをサービスユーザーが書き込み、管理者が読み取り可能に

# ログファイルをアプリユーザーが所有、adminグループで管理
$ sudo chown app-user:admin /var/log/application.log
$ sudo chmod 664 /var/log/application.log

バックアップスクリプトの権限

目的: バックアップユーザーのみが実行可能なスクリプト

# バックアップスクリプトをbackupユーザーのみ実行可能に
$ sudo chown backup:backup /usr/local/bin/backup.sh
$ sudo chmod 700 /usr/local/bin/backup.sh

⚠️ chown使用時の注意点

システムファイルの変更禁止

危険な例:

$ sudo chown user:user /etc/passwd    # 絶対禁止!
$ sudo chown user:user /bin/bash       # システム破壊!

システムファイルの所有者を変更すると、システムが起動しなくなる可能性があります。

再帰的変更の注意

推奨パターン:

# まず対象を確認
$ ls -la /path/to/directory/

# 段階的に変更
$ sudo chown user:group /path/to/directory/
$ sudo chown -R user:group /path/to/directory/*

2. groups - グループ管理の実践

Linuxではユーザーをグループに分類してアクセス権限を効率的に管理できます。groupsコマンドでグループ情報を確認し、実際の権限管理に活用しましょう。

🔍 グループの基本概念

グループは複数のユーザーをまとめて管理するメカニズムです。ファイルやディレクトリに対して、個々のユーザーではなくグループ単位で権限を設定できます。

プライマリグループ

  • ユーザーが作成するファイルのデフォルトグループ
  • 通常はユーザー名と同じ名前
  • /etc/passwdで定義

セカンダリグループ

  • ユーザーが追加で所属するグループ
  • 複数のセカンダリグループに所属可能
  • /etc/groupで定義

📋 groupsコマンドの基本使用法

現在のユーザーのグループを確認

$ groups
alice alice sudo developers www-data

解説: alice(プライマリ)、sudo、developers、www-data(セカンダリ)に所属

特定ユーザーのグループを確認

$ groups username
bob : bob developers marketing

詳細なグループ情報を確認

$ id
uid=1001(alice) gid=1001(alice) groups=1001(alice),27(sudo),1002(developers),33(www-data)

解説: UID、プライマリGID、所属する全グループのGIDが表示

グループメンバーの確認

$ getent group developers
developers:x:1002:alice,bob,charlie

解説: developersグループのメンバー一覧が表示

🛠️ 実務でのグループ活用シナリオ

シナリオ1: Web開発チームの権限管理

課題: 開発者全員が/var/www/projectディレクトリで協力作業したい

✅ 解決手順
  1. 開発グループを作成
    $ sudo groupadd webdevs
  2. ユーザーをグループに追加
    $ sudo usermod -a -G webdevs alice
    $ sudo usermod -a -G webdevs bob
    $ sudo usermod -a -G webdevs charlie
  3. プロジェクトディレクトリの所有者を設定
    $ sudo chown -R :webdevs /var/www/project
    $ sudo chmod -R 775 /var/www/project
  4. 新規ファイルのデフォルトグループを設定
    $ sudo chmod g+s /var/www/project

    (SGID設定で新規ファイルが自動的にwebdevsグループになる)

🎯 結果
  • webdevsグループのメンバー全員が読み書き可能
  • 新規作成ファイルも自動的にグループ権限が設定
  • 他のユーザーは読み取り・実行のみ

シナリオ2: データベース管理者グループ

課題: MySQL設定ファイルをDBA(データベース管理者)のみがアクセス可能にしたい

✅ 解決手順
  1. DBAグループを作成
    $ sudo groupadd dba
  2. DBAユーザーを追加
    $ sudo usermod -a -G dba alice
    $ sudo usermod -a -G dba bob
  3. MySQL設定ファイルの権限を設定
    $ sudo chown mysql:dba /etc/mysql/mysql.conf.d/
    $ sudo chmod 750 /etc/mysql/mysql.conf.d/
    $ sudo chmod 640 /etc/mysql/mysql.conf.d/*.cnf
🎯 結果
  • DBAグループのメンバーのみ設定ファイルを編集可能
  • MySQL プロセスは常にアクセス可能
  • 他のユーザーはアクセス不可

💡 グループ管理のベストプラクティス

🎯 適切なグループ設計

  • 役割ベース: developers, admins, users
  • プロジェクトベース: project-a, project-b
  • 機能ベース: www-data, mysql, ssh-users

目的を明確にしてグループを作成

🔒 セキュリティ考慮事項

  • 最小権限の原則: 必要最小限のグループのみ追加
  • 定期的な監査: 不要なグループメンバーシップを削除
  • sudo権限の制限: sudoグループは慎重に管理

📋 運用上の注意点

  • グループ変更後: ログアウト/ログインが必要
  • 名前規則: 一貫したグループ命名規則を採用
  • ドキュメント化: グループの目的と権限を文書化

🔧 よくあるグループ関連の問題と解決法

❌ 問題: グループに追加したのにアクセスできない

症状: usermod -a -G group user したのに権限エラーが発生

✅ 解決法
  1. 新しいグループ権限を反映するため再ログイン
  2. またはnewgrpコマンドを使用:
    $ newgrp groupname
  3. 現在のグループを確認:
    $ groups

❌ 問題: グループの削除ができない

症状: groupdel: cannot remove the primary group of user

✅ 解決法
  1. グループを使用しているユーザーを確認:
    $ getent group groupname
  2. プライマリグループとして使用している場合は変更:
    $ sudo usermod -g newgroup username
  3. セカンダリグループから削除:
    $ sudo gpasswd -d username groupname

📚 グループ管理コマンドリファレンス

コマンド 用途 説明
groups [user] グループ確認 groups alice ユーザーの所属グループを表示
id [user] 詳細情報 id alice UID、GID、グループ一覧を表示
getent group グループ情報 getent group developers グループの詳細情報とメンバー
newgrp group グループ切替 newgrp developers 一時的にプライマリグループを変更
groupadd group グループ作成 sudo groupadd webdevs 新しいグループを作成
usermod -a -G グループ追加 sudo usermod -a -G group user ユーザーをグループに追加
gpasswd -d グループ削除 sudo gpasswd -d user group グループからユーザーを削除

3. umask - デフォルト権限の設定

umaskは、新規作成されるファイルとディレクトリのデフォルト権限を制御します。

現在のumask値を確認

$ umask
0022

umaskの計算方法

デフォルト権限からumask値を引いた値が実際の権限になります:

  • ファイル:666 - umask = 実際の権限
  • ディレクトリ:777 - umask = 実際の権限

例:umask 022の場合

  • ファイル:666 - 022 = 644 (rw-r--r--)
  • ディレクトリ:777 - 022 = 755 (rwxr-xr-x)

umaskの変更

$ umask 077    # より制限的(ファイル600、ディレクトリ700)

🛠️ 実務でのumask活用

一般ユーザー向け(umask 022)

  • ファイル: 644 (他者読み取り可)
  • ディレクトリ: 755 (他者実行可)
  • 用途: 一般的な作業環境

セキュアな環境(umask 077)

  • ファイル: 600 (所有者のみアクセス)
  • ディレクトリ: 700 (所有者のみアクセス)
  • 用途: 機密データ、個人環境

グループ共有環境(umask 002)

  • ファイル: 664 (グループ書き込み可)
  • ディレクトリ: 775 (グループ書き込み可)
  • 用途: チーム開発、共有プロジェクト

永続的なumask設定

# ~/.bashrcに追加
echo "umask 077" >> ~/.bashrc

# システム全体での設定
sudo echo "umask 022" >> /etc/profile

4. 特殊な権限

通常の権限以外に、3つの特殊な権限ビットがあります。

SUID (Set User ID) - 4000

実行時に、ファイル所有者の権限で動作します。

$ chmod u+s program    # または chmod 4755 program
$ ls -l program
-rwsr-xr-x 1 root root 12345 Jan 11 10:00 program

SGID (Set Group ID) - 2000

実行時にグループ権限で動作。ディレクトリでは新規ファイルが同じグループになります。

$ chmod g+s directory/    # または chmod 2755 directory/
$ ls -ld directory/
drwxr-sr-x 2 user group 4096 Jan 11 10:00 directory/

Sticky Bit - 1000

ディレクトリ内のファイルは所有者のみが削除可能になります。

$ chmod +t /tmp/shared/    # または chmod 1777 /tmp/shared/
$ ls -ld /tmp/shared/
drwxrwxrwt 2 root root 4096 Jan 11 10:00 /tmp/shared/

🔍 特殊権限の実用例

SUID の活用例

passwd コマンド

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 Jan 11 10:00 /usr/bin/passwd

一般ユーザーでもroot権限でパスワード変更が可能

SGID の活用例

共有ディレクトリ

$ chmod g+s /shared/project/

新規作成ファイルが自動的にprojectグループに属する

Sticky Bit の活用例

/tmp ディレクトリ

$ ls -ld /tmp
drwxrwxrwt 15 root root 4096 Jan 11 10:00 /tmp

誰でも書き込めるが、他人のファイルは削除できない

⚠️ 特殊権限のセキュリティ注意点

SUID の危険性

  • 攻撃者がroot権限を取得する可能性
  • 定期的な監査が必要
  • 不要なSUIDファイルは削除
# SUID ファイルを検索
$ find / -perm -4000 -type f 2>/dev/null

適切な使用方針

  • 必要最小限の場所でのみ使用
  • 代替手段がないか検討
  • セキュリティログの監視

🎯 次のステップ

応用編では、chown・chgrp・umask・特殊権限など、より高度な権限管理技術をマスターしました。

次の実践編では、実際の現場で役立つセキュリティ運用とトラブルシューティングを学習します。

🔐 権限管理シリーズ全体

  1. 基礎編 - 権限の仕組み、危険回避、chmod基本
  2. 応用編(この記事) - chown、グループ管理、umask、特殊権限
  3. 実践編 - 実務シナリオ、トラブルシューティング、セキュリティ
📢 アフィリエイトリンクについて

当サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである「Amazonアソシエイト・プログラム」の参加者です。商品価格に影響はありません。

🎉 実践で権限管理をマスターしよう

書籍で応用知識を習得したら、Penguin Gym Linuxの実践課題で手を動かして学習を定着させましょう。chown、グループ管理、umask、特殊権限を実際に使うことで、確実にスキルアップできます。