必须通过组合共享层权限、acl细粒度控制和smb账户隔离实现:先创建专用账户并禁用访客访问,再在共享设置中设基础权限,最后用终端命令配置acl(如chmod +a添加allow write与deny read规则)并启用smb绑定账户。

要在Mac自带文件共享中为Windows访问者设置专门的只读或只写权限,必须绕过系统界面默认的“读与写”“只读”二选一限制,通过组合共享层权限、ACL细粒度控制和SMB账户隔离来实现——因为macOS图形界面不提供“只写不可读”选项,且Windows通过SMB连接时会直接映射POSIX权限行为。
创建专用共享账户并禁用访客访问
打开“系统设置”→“通用”→“共享”,确认“文件共享”已开启;在页面底部取消勾选“允许访客访问”,【否则任何人在未登录状态下都能看到共享列表并尝试连接】。
点击“用户”区域旁的“+”按钮,在弹出窗口中选择“新建用户”,填写英文用户名(如win_reader)、全名(可填Windows只读用户),设置强密码;勾选“管理员”前的复选框不必要,普通账户即可满足权限配置需要。
前往“系统设置”→“用户与群组”,解锁后确认该新用户已存在且密码非空;【无密码账户无法通过SMB协议完成身份验证,Windows将拒绝连接】。
在共享设置中分配基础权限
回到“共享”→“文件共享”页,在“共享文件夹”列表中点击“+”,添加目标文件夹(如“Public_Reports”)。
在下方“用户”列表中找到刚创建的win_reader账户,点击其权限下拉菜单,选择“只读”——这一步仅控制SMB协议层面的可见性与基础操作,实际能否“真正只读”还需ACL加固。
若需设置只写权限(即投放文件夹),不能在此处选“只读”或“读与写”;必须先将其设为“读与写”,后续用终端ACL禁用读取能力,否则SMB连接会失败。
用终端命令实现真正的只写不可读
打开“终端”,执行以下命令锁定只写行为:
chmod +a "win_writer allow write,append,delete_child,file_inherit,directory_inherit" /路径/到/共享文件夹
再添加拒绝读取规则:
chmod +a "win_writer deny read,readattr,readextattr,readsecurity,listdirectory" /路径/到/共享文件夹
运行 ls -le /路径/到/共享文件夹 验证输出中同时存在 allow write… 和 deny read… 两行,且顺序为 deny 在 allow 之后(系统按顺序匹配,后写的规则优先)。
注意:此操作不可逆,若误删关键deny条目,需用 chmod -E /路径 清空全部ACL后重配;只写用户将无法在Windows资源管理器中双击进入该文件夹,但可通过拖入文件方式上传——这是只写投放文件夹的标准行为。
启用SMB并绑定账户
在“文件共享”页点击右下角“选项”,勾选“使用SMB来共享文件和文件夹”。
在“Windows 文件共享”列表中,仅勾选 win_reader 和 win_writer 两个专用账户,取消勾选当前登录用户或其他泛用账户。
为每个勾选账户输入其对应系统密码(不是Apple ID密码),输错会导致Windows端提示“登录失败:用户名或密码错误”。
关闭窗口,系统自动应用变更,无需重启服务或重新登录。
在Windows端验证权限效果
在Windows 11中打开“运行”(Win+R),输入 \Mac的IPv4地址(如\192.168.1.20),回车。
弹出登录框时,输入 win_reader 及密码,应能正常浏览文件夹内容但无法上传或修改任何文件。
另开一个窗口,输入相同地址,改用 win_writer 账户登录,应能看到空文件夹(因被deny read),但可向其中拖入文件;上传后立即断开再重连,仍不可见内容——确认只写生效。











