我最近在 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/share
1以及适当的 Samba 配置条目,例如writable = yes
。
1 a+rwX
表示A二(所有者、群组和其他人)将收到r埃德,瓦仪式,并且有条件埃X执行权限。“条件”表示仅当已向至少一个访问组(所有者、组、其他人)授予执行/遍历权限时才会添加执行/遍历权限。如果您想扩展所有者已可执行/遍历的文件和目录的执行/遍历权限,这很有用。