松実のStudy Knowledge

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
  • rwss は 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設定

松実 エンジニア(♂)

都内で働く園児ニア。
1996年生まれ
独立を夢見る、東京都内で働くOLD園児
Power Platform,Azure の分析基盤関係を主体に仕事をしている。
まずは継続的に記事を書きたい。