Linux Samba服务器配置问题:共享目录无权限访问及IP限制需求咨询
看起来你现在遇到两个核心问题:一是Samba共享目录的权限拒绝问题,二是后续需要配置IP访问限制。咱们一步步来解决:
一、解决共享目录权限拒绝问题
从日志里能看到,Samba用的是uid=65534(也就是nobody用户)去访问你的共享目录,但连进入目录都失败了——这大概率不是共享目录本身的777权限问题,而是父目录的权限限制(比如/home/x6或者/home/x6/Documents没有给nobody用户进入的权限)。
1. 修复父目录权限
Linux里,目录的执行权限(x)代表允许进入该目录。你需要确保nobody能访问到sharedFolder的所有父级目录:
# 给父目录添加others的执行权限 chmod o+x /home/x6 chmod o+x /home/x6/Documents
如果觉得给所有others权限太宽松,也可以把nobody加入你的用户组,然后给组权限:
# 把nobody加入x6组 usermod -aG x6 nobody # 给父目录添加组的执行权限 chmod g+x /home/x6 /home/x6/Documents
2. 优化Samba配置,明确用户映射
修改你的smb.conf,在[global]段添加:
guest account = nobody
然后在[data]共享段,可以添加force user来简化权限控制(把所有guest访问强制映射成你的x6用户,这样就用你自己的权限访问目录,避免nobody的权限问题):
[data] comment= Public data path = /home/x6/Documents/sharedFolder read only = no guest ok = yes guest only = yes # 强制只允许guest访问,避免其他用户认证 force user = x6 # 把guest请求映射为x6用户,权限更直接
修改完配置后,重启Samba服务生效:
sudo systemctl restart smbd nmbd
关于smbpasswd -a guest的问题
这个命令本来就不需要执行,因为guest是Samba的内置匿名用户,不需要设置密码,所以命令报错是正常的,不用管它。
二、配置IP访问限制
当权限问题解决后,你可以启用hosts allow来限制只有指定IP的设备能访问:
在[global]段取消注释并修改:
hosts allow = 192.168.1.10 192.168.1.11 192.168.1.0/24 # 替换成你的信任IP或子网 hosts deny = all # 拒绝其他所有IP
这里可以填单个静态IP(比如你路由器分配的信任设备IP),或者整个子网(比如192.168.1.0/24代表整个192.168.1.x网段),根据你的需求调整。重启Samba后就会生效。
三、Windows映射驱动器保存凭据的小提示
后续你要解决Windows 10重启后忘记映射驱动器凭据的问题,只需要在映射的时候勾选「记住我的凭据」,或者打开Windows的「凭据管理器」,手动添加一个「Windows凭据」:
- 互联网地址或网络地址:
\\你的服务器IP\data - 用户名:留空或者填
guest - 密码:留空
这样Windows就会持久保存凭据,重启后不会丢失。
备注:内容来源于stack exchange,提问作者Xaver

