為了方便在windows環境中操作linux虛擬機中的文件,您選擇將gulp工具放在windows磁盤上,并通過網絡驅動器映射的方式來編輯虛擬機中的php文件。這種方法旨在節省虛擬機的磁盤空間并加速svn的更新和提交操作。然而,在實際操作中遇到了權限不足的錯誤。
嘗試通過在虛擬機中對文件增加chmod 777權限,以及在Windows下的git bash中對文件增加chmod 777權限都未能解決問題。
接下來,檢查了虛擬機的Samba設置,確保共享文件夾的權限已經放開:
[share] path = /var/www available = yes browseable = no public = yes writable = yes
盡管權限已經放開,問題依然存在。
使用虛擬機的共享文件夾功能可以將Windows的文件共享到虛擬機中進行操作,但這并不符合您的需求。此外,在設置共享文件夾的過程中遇到了問題,如果/mnt/hgfs目錄存在,但共享文件夾未顯示,通過mount -t vmhgfs .host:/shared /mnt/hgfs掛載共享文件并確保已安裝open-vm-dkms或open-vm-tools,卻一直提示Error: cannot mount Filesystem: No such device,這可能是由于虛擬機操作系統版本與VMware Tools版本不兼容導致的。
回到權限不足的問題,通過對比gulp的錯誤提示和linux文件權限,發現提示權限不足的文件的所有者在虛擬機中都是root,而其他文件的所有者是nobody:nogroup。
因此,嘗試將文件的所有者更改為nobody:nogroup:
chown nobody:nogroup * -R
更改成功后,再次運行gulp,文件權限問題得到了解決。
那么,nobody:nogroup到底是什么?
-
Windows系統在安裝后會自動建立一些用戶賬戶,Linux系統中也有一些在系統安裝后就有的用戶賬戶,類似于Windows中的內置賬戶。
-
這些賬戶用于完成特定任務,例如nobody和ftp等。我們訪問www.php-note.com的網頁程序時,服務器會讓客戶以nobody身份登錄(相當于Windows中的匿名賬戶);匿名訪問FTP時,會使用ftp或nobody用戶。
-
nobody是一個普通用戶,非特權用戶。其目的在于允許任何人登錄系統,但其UID和GID不提供任何特權,只能訪問人人皆可讀寫的文件。
-
許多系統中默認創建一個nobody用戶,并盡量限制其權限至最小。當服務器向外提供服務時,可能會讓客戶端以nobody身份登錄。
-
nobody是一個普通賬戶,默認登錄shell是/sbin/nologin,因此無法直接登錄系統,提高了安全性。其權限配置得非常低,遵循最小權限原則。
簡而言之,使用nobody用戶可以讓任何人操作我們的文件,從而解決了權限不足的問題。