在用sftp上傳的狀況下

我在Linux下建立了兩個使用者A和B

A和B有相同的群組G

一個資料夾F(群組G可讀寫)

資料夾裡面的檔案群組G也都可以讀寫

但是當A已建立一個檔案file1

如果B要將那個檔案覆蓋時卻無法覆蓋(但是可讀寫修改刪除)

只能先手動刪除舊檔在把新檔放入

一定得這樣做嗎?還是有什麼設定可以讓B直接蓋掉A的檔案
linux只有玩玩爾以,
應該是權限的問題,
要刪除資料夾下的檔案,
看看資料夾F的權限設定,
而不是該檔案的權限設定。
無法覆蓋時的訊息是?
TzengPC wrote:
在用sftp上傳的狀...(恕刪)
錯誤訊息如下
Permission denied.
Error code: 3
Error message from server: Permission denied

資料夾的權限已開

如果是用ssh登入時是可以順利覆蓋的

使用WinSCP和filezilla才會出現權限不足

所以推測是因為使用sftp連入的關係
目錄權限改為 2770

chmod 2770 目錄名稱

chown root:G群組 目錄名稱

第一碼 2 的是特殊權限
用在目錄是 setGID (set Group ID)的意思

如果用 GUI 圖形界面的軟體去改目錄權限,注意看有沒有一個 setGID 的選項,打勾。

sitGID 用途意義:(用在目錄)
凡是在這個目錄底下創建的新檔案或新目錄,擁有者群組,會「繼承」上層目錄的群組。

用在檔案是另一個意思,如果那檔案可執行,執行時會以群組權限執行。

*******************************************

詳解說明:

你原先應是 目錄權限 設定 770

但這有一個問題就是:
當 A使用者 創建一個新檔案或新目錄時,檔案的建立者一定是 A 沒錯,但建立群組卻也會是 A,而不是 G群組。

比方說

如果 ls- l 去查看新建的檔案

可能會是這樣:
-rw-rw---- 1 A使用者 A群組 ...... 檔案名稱

而不是這樣:
-rw-rw-r-- 1 A使用者 G群組 ...... 檔案名稱

為什麼呢?

這是因為當初新增每個帳號的時候,新增的同時,預設就會自動加入與那帳號同名稱的群組,為第一個群組。

後來再去加入 G群組,算第二個群組。優先順序弱於第一個。

而在創建新檔案或新目錄時,登記檔案建立者的身份群組,會以第一個群組為優先去登記。


最簡單的解決方法,如前面說的,給頂層目錄,更改權限 2770

另一個方法是去改每個帳號使用者的群組表,把 G群組 改為第一優先。不過那樣做太麻煩囉唆,沒效率。也不是合理的操作方法,會產生其它問題。

合理的操作是善用 setGID。


**************************************

順帶一提:

只改頂層目錄權限,底下原本舊有的子目錄、檔案,並不會作用到。

更改後,只對新創建的檔案或目錄有效。對原先已經存在的無效。


如果要連底下子目錄全改,不能直接加參數 -R

例如:chmod 2770 -R 目錄名稱 <--- 這是不好的

因為這會連檔案的權限都變成 2770,檔案有 x 執行權限,會有安全漏洞。


較好的方法,利用 find 分離出 目錄 和 檔案,並對應相關的修改

舉例:

# find 找出該目錄底下所有子目錄,改為 2770

find /目錄的絕對路徑 -type d -print0 | xargs -0 chmod 2770

# find 找出該目錄底下所有檔案,擁有者改為 root:G群組

find /目錄的絕對路徑 -type f -print0 | xargs -0 chown root:G群組

-----------------------

補充:

突然發現上面的舉例,不完整

子目錄除了改為 2770

還要把擁有者群組也改成 G群組 才行。否則有可能會繼承到錯誤的群組。

# 子目錄也要改擁有者群組

find /目錄的絕對路徑 -type d -print0 | xargs -0 chown root:G群組


順便說一下,特殊權限像 2770 這種的 rwx 會如何表現?

2770
rwx rws ---

x 那個地方,會變成 s,代表有特殊權限
特殊權限 2,是控制 Group 群組的,所以出現在第二組的位置

如果是 2750 則
rwx r-s ---
(可讀,可進,但不可寫)
fedora wrote:
目錄權限改為 277...(恕刪)


我是利用umask來設定的

所以使用者產生的檔案會是

-rw-rw-r-- 1 A使用者 G群組 ...... 檔案名稱

如果是用ssh連線登入的時候不管是要寫入覆蓋都不會有問題

但是使用使用WinSCP和filezilla才會出現已下訊息

Permission denied.
Error code: 3
Error message from server: Permission denied

所以我才在想會不會跟權限沒有太大關係

因為如果是權限問題,我是用ssh或sftp連線登入後去覆蓋檔案也會發生相同問題才是,

但是卻可以正常覆蓋檔案

使用WinSCP和filezilla不也是走sftp

怎麼會有不同結果?
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!