samba 共享怎么让有权限的人才看得见目录,没权限的不显示
单位共享盘按部门分了目录,想把规矩立细:财务的目录只有财务的人能在列表里看见,其他同事那里压根不出现这个条目——不是不给看的问题,是不想让无关的人知道有哪些目录存在。samba 里 browseable = no 试了一把,发现那是把整段共享对所有人一起藏掉,谁也看不见,跟需求南辕北辙。真正想要的是"按人可见",samba 里另有对应的机关。
原因分析
browseable 管的是这条共享出不出现在浏览列表里,开关一拨就是全局动作,不分人。按人可见的需求,靠的是另一套机制——基于访问权限的枚举:共享列表按每个账号的实际读权限来呈现,读不了的共享直接不出现在他的列表里,而不是列出来等人点进去碰壁。与它配套的还有目录级隐藏:同一个共享内部的子目录,无权读取的同样可以从列表里隐去。要紧的是,这两层开关的判断依据都是文件系统上的真实权限——权限先落到目录本身,开关才有意义,配置与目录权限两张皮,枚举就会失真。Windows 服务器那边的共享也有同名的"基于访问权限的枚举",思路相通,会一边另一边也就好理解了。
分步解决
- 分清两个开关:browseable = no 是对全员整段藏共享;按人可见走 access based share enum,两个工具别混用,混了现象就会来回跳。
- 开共享级枚举:在 smb.conf 的 [global] 段加 access based share enum = yes,此后用户没有读权限的共享不再出现在他的浏览列表里。
- 开目录级隐藏:要把共享内部无权的子目录也隐掉,在该共享段加 hide unreadable = yes,无读权限的文件与子目录一并从列表里隐去。
- 把权限落到目录:用 chown、chmod 配合共享段的 valid users、write list,让"谁可读"在文件系统层先成立;枚举开关只认真实权限,不认配置里的美好愿望。
- 双账号实测:重载配置后,拿有权限与无权限两个账号分别登录看列表——一个见、一个不见才算配成;顺手确认有权限账号的读写没被误伤。
预防
共享清单与人员权限表两份文档同步维护,部门人员调整时一起动,别让列表与权限各走各的。上新的共享先在测试环境验证枚举效果再推生产。目录列表干净了,无关的入口不露面,共享盘的规矩也就立住了;后来的人一看列表就知道哪些是自己的地盘,用起来心里有数,管起来也省口舌。