如何允許 Windows 電腦透過 Samba 伺服器修改 Linux 檔案而不允許完全 777 存取?

如何允許 Windows 電腦透過 Samba 伺服器修改 Linux 檔案而不允許完全 777 存取?

我最近在 Linux 伺服器上設定了 Samba,並輕鬆發現了 Windows 電腦上的共用驅動器,但無法將檔案複製到該驅動器,因為它會要求額外的權限。

我能夠以 777 權限寫入子資料夾,但主磁碟機的權限為 775。

據我所知,777 權限非常不安全,如何修改群組以包含從 Windows 瀏覽且在 Linux 伺服器中沒有使用者級權限的使用者?

這是一個家庭網絡,對 Samba 伺服器的存取透過阻止來自網路外部的存取的全域設定進行限制(透過將以下行新增至 /etc/samba/smb.conf)

[global]
hosts allow = 192.168.0.
hosts deny = ALL

因此,我並不擔心網路內的安全性 - 如果使用者位於 192.168.0.x 子網路上,我很高興假設他們是合法的,並且目前不想添加進一步的身份驗證步驟。

答案1

我明白你想要什麼。 LAN 上的所有使用者/電腦都應該是“訪客”,並對檔案共用具有完全的“讀取/寫入”存取權限。

腳步:

檢查 Samba 配置。分享內容是否包括這些:

[Share]
available = yes
browsable = yes
public = yes
writeable = yes

檢查 POSIX 權限。範例 ls -lh:

drwxrws---+ 1 nobody nogroup  252 May 12 14:55 Music

您需要在那裡設定黏性位,否則檔案共享的行為將不會像您在 Windows 中所期望的那樣。 chmod 2770 [dir]... 若要套用所有目錄的權限,請使用 find。例子

find . -type d -exec chmod 2770 {} \;
find . -type f -exec chmod 2760 {} \;

您還需要將群組設定為 nogroup,這是 samba 的預設來賓群組。

最後是 acls。使用獲取事實設定值。您需要為使用者nobody 和群組nogroup 設定預設值。完成此操作後,透過 samba 建立的任何內容都將繼承良好的權限。下面是目錄 ACL 的範例:

# file: Downloads
# owner: nobody
# group: nogroup
# flags: -s-
user::rwx
group::rwx
mask::rwx
other::---
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::---

要獲得一些預設值,請使用 find:

find . -type d -exec setfacl -d -m u::rwx {} \;
find . -type d -exec setfacl -d -m g::rwx {} \;

要修復現有文件:

find . -type f -exec chgrp nogroup {} \;
find . -type f -exec chmod 660 {} \;
find . -type f -exec setfacl -m g::rw {} \;

想要更多 !

假設您不想更改 POSIX 群組。然後您可以使用 ACL 明確新增群組。例子:

setfacl -m g:linuxgroup:rw [filename]

透過這些設置,我可以在 ubuntu、windows、RPi、android 和其他 Linux 應用程式之間共用。

答案2

通常,人們不希望向每個具有網路存取權限的人授予對目錄的寫入權限。通常有更好的解決方案可以在用戶群組之間共享文件,例如為每個人提供自己的網路共享,並為其他人提供(部分)讀取存取權限。這就是不使用全域可寫存取權限的建議的由來。

但是,就您而言,這似乎正是您想要的。因此,請繼續使用chmod -R a+rwX /path/to/share1以及適當的 Samba 設定條目,例如writable = yes.


1 a+rwX意味著A(所有者、團體和其他人)將收到r電子頭,w儀式,和有條件的eX執行權限。 「有條件」表示僅當執行/遍歷權限已授予至少一個存取群組(擁有者、群組、其他)時才會新增執行/遍歷權限。如果您想擴展擁有者已經可執行/可遍歷的那些檔案和目錄的執行/遍歷權限,這非常有用。

相關內容