如何允许 Windows PC 通过 Samba 服务器修改 Linux 文件而不允许完全 777 访问?

如何允许 Windows PC 通过 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 {} \;

您还需要将该组设置为 nog​​roup,这是 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埃德仪式,并且有条件X执行权限。“条件”表示仅当已向至少一个访问组(所有者、组、其他人)授予执行/遍历权限时才会添加执行/遍历权限。如果您想扩展所有者已可执行/遍历的文件和目录的执行/遍历权限,这很有用。

相关内容