
我試圖弄清楚為什麼當從 Windows 編輯器保存在 SAMBA 安裝的 Unix 分割區上的檔案的權限發生變更時,會出現特定行為。
情況:
我們在 Unix 上有一個文件,權限為 777:
-rwxrwxrwx 1 testuser users 4859 Jan 23 15:09 fbparser.pl*
該檔案所在的目錄是透過 Samba 從 Windows 7 PC 掛載的。
我們打開檔案以在“Notepad++”或“Sublime”編輯器中進行編輯。
當檔案被變更並儲存時,在 UNIX 端,權限變更為:
-rw-rwxrwx 1 testuser users 4859 Jan 23 15:09 fbparser.pl*
現在,我懷疑這可能不是由於Samba掛載造成的,因為同樣的問題才不是在常規 Windows 記事本中開啟和儲存檔案時會發生這種情況!
因此,我最初的想法是,這是因為上面提到的程式編輯器可能被設定為 - 而不是簡單地儲存檔案 - 將原始檔案重新命名為,$orig_filename.bak
然後使用原始檔案名稱將新內容儲存為新檔案。這是基於我自己之前使用 UltraEdit 編輯器解決相同問題的經驗。
然而,如果這是燙髮變化的原因,我無法解釋我觀察到的另外兩個症狀:
首先,一開始就沒有建立備份檔案。
其次,當在 Unix Shell 中的同一目錄中建立新檔案(使用
touch
)時,新檔案的權限-rw-rwxrwx
根本不存在。第三,如果重要的話,文件的 inode # 在編輯後保持不變。
還有什麼問題可能存在?
當我告訴 UE 不要透過重命名來備份檔案時,我自己的 UltraEdit 問題就消失了;但是Notepad++沒有這樣的選項。
答案1
我在嘗試解決一個非常相似的問題時發現了這個問題。我的解決方案是添加map archive = no
到 smb.conf 的全域部分。
根本問題是 Samba 將權限從 Dos 對應到 Linux 的方式。
看來,當notepad++儲存檔案時,它正在設定/重置dos檔案的「存檔」屬性。預設情況下,Samba 使用它來管理檔案上使用者權限的執行屬性。
因此,如果您設定 Samba 參數:
map archive = no
此屬性未映射,使用者執行權限將按照先前的設定保留。
答案2
我也有同樣的情況。對我來說幫助更改 smb.conf 檔案中的建立遮罩參數。
create mask = 0600 -> create mask = 0700