Laravel 資料夾的權限設定
Laravel 部署在 Linux 上的權限設定
一直對 Linux 的檔案權限部屬不太熟悉,趁這次有機會部署新的專案來查資料
這篇文章對我的幫助很大,後續查到的也是差不多的方式進行部署
參考網站: https://stackoverflow.com/questions/30639174/how-to-set-up-file-permissions-for-laravel
簡單的對此篇做翻譯與稍微筆記一下
內文與回覆一再的強調,禁止對任何檔案或目錄設定 777,設定777的意味著任何人(anyone)可以對檔案或目錄上傳病毒並執行,這是非常危險的事情。
兩種方式可以針對專案的權限進行設定
1. 對專案設定 Owner
與 Group
給 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. 對專案設定 Owner
與 Group
給 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 | #!/bin/sh |
筆記小角落
- chgrp 修改檔案的 Group
- rwx 421 => 7
- chmod [ugoa] + wrx
- u : user 檔案所有人
- g : group 檔案群組
- o : others 其他使用者
- a : all 所有使用者 等同於 ugo