在項目開發的時候,經常需要將文件上傳到指定的目錄下。
例如這次用thinkphp5的時候,需要在public目錄下建立uploads目錄用於存放上傳的資源。
首先在命令窗口下輸入:
1 mkdir uploads
當前,前提是當前執行命令的用戶需要權限(假設此處有,非root)。
問題來了,即使你目錄創建成功,對於項目來說並不算成功。
因為項目運行的時候上傳文件以及新建目錄的時候,可以看出是apache用戶。
apache對該用戶創建的目錄並沒有寫入權限啊!
當然你可以繼續輸入:
1 chmod -R 0777
這樣,的確apache是可以訪問到了,但是,這樣的話,實屬下冊~~
因為所有的人都可以來這里隨便指點一下,隨便來刪除一下啊。
記得當初一個兄弟的遭遇:
剛進一間公司不久,然后執行了一下刪除命令,沒想到把該公司的一個項目的
所有上傳的資源全部刪掉了~悲催!此處先不討論做該項目的人的部署問題。
如果操作得當,大家都可以避免。既然可以在開始就避免,何樂而不為呢!
然后我就用了當前的用戶來執行修改文件夾的所有者,畢竟,如果可以將該
文件的所有者修改為apache的話,那只有root和apahce可以在該文件下操縱。
1 chown apache uploads
然后問題就來了,發現命令執行失敗了。
1 chown: changing ownership of `uploads': Operation not permitted
剛看到的時候,糾結於一個問題:會不會系統沒有apache用戶。
就缺沒去創建了~其實細想一下,那之前的項目是怎么上傳的,文件的創建者還是apache
不行的朋友可以去執行一下:
1 cat /etc/passwd
就知道了
然后突然記起,我並不是在root帳號下操作的。
然后修改了一下命令:
1 sudo chown apache uploads
發現可以執行成功。證實猜想成功。這個命令的執行需要一定的權限。
權限的限制可能來自上級目錄或者命令的本身。