PHP 取得 Group ID 並設定檔案 Group 權限

PHP 在 Linux 的 Web 和 Cron 要執行的環境,常常會遇到權限不足的情況。

Debian / Ubuntu Linux 的 Apache / Nginx 使用的 User 是 www-data,通常這個 user 都是無法登入的,所以會建立一個帳號來另外存取執行,要怎麼確保權限都是可以讀寫的呢?

PHP 取得 Group ID 並設定檔案 Group 權限

帳號設定:

  • Apache / Nginx:www-data
  • Cron / Script:user

先將這兩個 User 設定互為 Group

  • vim /etc/group # 中間數字是隨便寫的,請自行參照自己機器的設定
    • www-data:x:33:user
    • user:x:100:www-data

檔案寫入的時候,都會是自己 owner 的權限,要趁權限是自己 owner 的時候,把 group 的權限設定好,避免被預設的權限蓋掉

所以範例步驟 與 測試程式 可以這樣寫:

  1. touch filename.txt # 使用 user 產生一個檔案
  2. chown user.root filename.txt # 先故意設定一個不同的 group 做測試,看 root group 能不能修改成 user group
  3. vim change_group.php # 此程式在 script / Web server 都可以執行,產出檔案應該都可以互相寫入
    <?php
    $filename = 'filename.txt';
    $my_group_id = getmygid();
    var_dump(chgrp($filename, $my_group_id)); // true, 修改成自己的 group
    var_dump(chmod($path, 0775)); // true, 設定 group 可寫入
    ?>
  4. php change_group.php
  5. ls -lh filename.txt # user.user

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料