Web サーバー用ディレクトリの安全な編集設定
背景
Apache や Nginx などの Web サーバーを作成している場合、HTMLやCSS、JavaScriptが配置される/var/www/htmlは通常root 所有で保護されてます。
しかし、開発や更新作業を行う際に特定ユーザーで直接ファイルを編集を行う必要がありました。
※エラー画面の例
安全性を確保しつつ編集を可能にするには、直接 root 権限で作業するのではなく、特定グループに属するユーザーのみ編集可能にする権限管理がこの時は最適でした。
これにより以下のメリットがあります:
- Web サーバーの権限構造を崩さずにファイル編集が可能
- 複数ユーザーが安全に同じディレクトリを管理可能
- 新しいファイル・フォルダも自動的にグループ権限を継承
このような背景から、グループ管理と setgid ビットを活用した権限設定を実施しました。
目的
- 特定のフォルダ(/var/www/html)に対して、編集用グループに属していれば編集できるようにする
手順
① 編集用グループを作る
sudo groupadd webedit
※すでに編集用グループがある場合は、それを使ってもOKです。その場合はグループ名を置き換えてください
② ユーザーをグループに追加
sudo usermod -aG webedit username
確認:
groups username
出力例:
username : username webedit
③ /var/www/html のグループを変更
sudo chown -R root:webedit /var/www/html
④ グループに書き込み権限を与える
sudo chmod -R 2775 /var/www/html
2(setgidビット)により、新しく作成されるファイル・フォルダも自動的に webedit グループに属します。
⑤ 権限確認
ls -ld /var/www/html
出力例:
drwxrwsr-x 3 root webedit 4096 10月 8 21:00 /var/www/html
- root webedit になっていれば OK
- rws の s は setgid が有効であることを意味します
⑥ ユーザーの再ログイン
グループ変更を反映するため、一度ログアウト・ログイン(または再起動)してください。
確認
cd /var/www/html touch test.txt
問題なく作成できれば成功です。
「許可がありません」と出る場合は、まだログインセッションに新しいグループが反映されていません。再ログインまたは再起動で解決します。
まとめ
| コマンド | 目的 |
|---|---|
sudo groupadd webedit |
グループ作成 |
sudo usermod -aG webedit username |
ユーザー追加 |
sudo chown -R root:webedit /var/www/html |
所有グループ変更 |
sudo chmod -R 2775 /var/www/html |
グループ書き込み+setgid設定 |