Laravel 資料夾的權限設定

Laravel 部署在 Linux 上的權限設定

一直對 Linux 的檔案權限部屬不太熟悉,趁這次有機會部署新的專案來查資料

這篇文章對我的幫助很大,後續查到的也是差不多的方式進行部署

參考網站: https://stackoverflow.com/questions/30639174/how-to-set-up-file-permissions-for-laravel

簡單的對此篇做翻譯與稍微筆記一下

內文與回覆一再的強調,禁止對任何檔案或目錄設定 777,設定777的意味著任何人(anyone)可以對檔案或目錄上傳病毒並執行,這是非常危險的事情。

兩種方式可以針對專案的權限進行設定

1. 對專案設定 OwnerGroup 給 WebService

1
$ sudo chown -R www-data:www-data /path/to/your/laravel/root/directory
  • 如果要使用一些FTP的套件進行檔案異動可能會遇到問題,可以將要使用FTP的User 加入群組(GROUP)
    1
    $ sudo usermod -a -G www-data ubuntu
  • 設定檔案與資料夾權限
    1
    2
    $ sudo find /path/to/your/laravel/root/directory -type f -exec chmod 644 {} \;
    $ sudo find /path/to/your/laravel/root/directory -type d -exec chmod 755 {} \;

實際操作後會有許多問題,像是檔案權限已交付予 www-data ,在 git pull時會有權限上的問題存在

後來是使用第二個方法,配合寫的script才解決


2. 對專案設定 OwnerGroup 給 User (較簡單形式)

  • 先到 Laravel 的目錄中
    1
    $ cd /var/www/html/laravel/ # 假設這是專案目錄
    1
    $ sudo chown -R $USER:www-data .
  • 設定檔案與資料夾權限
    1
    2
    $ sudo find . -type f -exec chmod 664 {} \;   
    $ sudo find . -type d -exec chmod 775 {} \;
  • 給予 WebServer (Group) 可寫(w)可執行(x)的權限
    1
    2
    $ sudo chgrp -R www-data storage bootstrap/cache
    $ sudo chmod -R ug+rwx storage bootstrap/cache

如果檔案需要更新的話,直接下指令進行git pull 會造成檔案的owner 會被異動,後續變成權限問題

爬了文之後,大部分的解決方式都是用 git 的 hook 方式,在更新檔案後再進行一次權限異動

參考文章: https://www.coder.work/article/7580117

我自己是在根目錄寫了一個.sh檔案 執行 git pull + chown

如果有更方便的方法,再麻煩大家分享,感謝

1
2
3
4
5
6
7
8
9
#!/bin/sh
git fetch --all
git reset --hard origin/master

sudo chown -R $USER:www-data .
sudo find ./ -type f -exec chmod 664 {} \;
sudo find ./ -type d -exec chmod 755 {} \;
sudo chgrp -R www-data storage bootstrap/cache;
sudo chmod -R ug+rwx storage bootstrap/cache;

筆記小角落

  • chgrp 修改檔案的 Group
  • rwx 421 => 7
  • chmod [ugoa] + wrx
    • u : user 檔案所有人
    • g : group 檔案群組
    • o : others 其他使用者
    • a : all 所有使用者 等同於 ugo