You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Windows不开启不安全来宾访问的前提下实现Samba共享的公开访问

如何在Windows不开启不安全来宾访问的前提下实现Samba共享的公开访问

刚好碰到过和你一模一样的需求,给你一套亲测能用的方案——核心就是让Samba把所有客户端发来的用户都映射到服务器上的一个专用账号,同时绕过密码验证,这样Windows客户端不用改任何组策略,随便输个用户名密码就能访问,完美替代原来的来宾访问功能。

具体操作步骤:

1. 创建专用共享账号

在Samba服务器上创建一个只用于共享访问的本地用户(不给它系统登录权限),再添加到Samba用户列表:

# 创建无系统登录权限的专用用户
useradd -r -s /sbin/nologin public_user
# 给该用户设置Samba密码(随便设即可,后续不会验证这个密码)
smbpasswd -a public_user

2. 配置用户映射:所有客户端用户转成专用账号

创建Samba用户映射文件,把客户端发来的任意用户名都映射到刚才创建的public_user

echo "* = public_user" > /etc/samba/smbusers

打开Samba主配置文件/etc/samba/smb.conf,在[global]段添加以下内容,指定使用这个映射文件:

[global]
    # 保留原有全局配置,新增此行
    username map = /etc/samba/smbusers

3. 让Samba接受任意密码

修改PAM配置,让它对Samba的认证请求直接放行——不管客户端输入什么密码都视为通过:

# 先备份原配置文件,防止出错
cp /etc/pam.d/samba /etc/pam.d/samba.bak
# 写入新的PAM规则
echo "auth required pam_permit.so" > /etc/pam.d/samba
echo "account required pam_permit.so" >> /etc/pam.d/samba

4. 配置目标共享

smb.conf末尾添加公开共享的配置(以安装包共享为例):

[public_installs]
    path = /mnt/public_install_kits  # 替换成你的共享目录路径
    comment = Public Installation Kits
    browseable = yes
    read only = yes  # 若需要写入权限,改为no,后续需调整目录权限
    force user = public_user  # 强制用该用户执行所有共享操作
    encrypt passwords = yes
    passdb backend = tdbsam
    guest ok = no  # 禁用来宾访问,避免触发Windows安全限制
    map to guest = never

5. 设置共享目录权限

确保public_user对共享目录有足够权限,只读场景执行:

chown public_user:public_user /mnt/public_install_kits
chmod 755 /mnt/public_install_kits

若需写入权限,将chmod命令改为775即可。

6. 重启Samba服务生效

systemctl restart smbd nmbd

测试验证

找一台Windows客户端,打开文件资源管理器,输入\\你的服务器IP\public_installs,弹出登录窗口时随便输入用户名和密码(比如test/123456),就能直接访问共享,完全无需修改Windows组策略!

注意事项

  • 此PAM配置会让所有Samba共享都接受任意密码,若服务器还有其他需严格认证的共享,该方案不适用。如需区分,可考虑运行两个独立的Samba实例,分别配置不同规则。
  • 公开共享建议设为只读,避免误操作或恶意修改。
  • 确保服务器防火墙允许139、445端口的入站流量,否则客户端无法连接。

备注:内容来源于stack exchange,提问作者Valentin Radu

火山引擎 最新活动