
简介本资源是一份面向Linux系统管理员、运维工程师及初学者的Samba服务配置实战案例以某公司五个部门的文件共享需求为背景完整演示了从需求分析、目录规划、用户/用户组创建到smb.conf权限配置的整个落地过程。文档详细说明了如何实现不同部门管理员与普通用户的分级访问控制包含各部门专属目录、公用共享目录及工具目录的具体配置示例并给出Samba安装启动、SELinux处理、testparm检测及重启验证等关键操作步骤。资源包共1个doc文档大小约63KB内容结构清晰、命令注释明确可直接作为企业内部分享环境搭建的参考模板。该资料已有130人学习下载适合希望快速掌握Samba多目录权限配置的读者对照练习尤其能帮助理解valid users、create mask、force user等参数在实际场景中的组合用法。1. 一个真实企业案例五部门共享权限怎么拆Samba 是 Linux 与 Windows 之间文件共享的事实标准但很多刚上手的企业管理员会把smb.conf当成单纯的目录映射表结果配出来要么人人可写、要么干脆连不上。这次要拆的专题资料是 2021-2022 年间真实落地的一套五部门文件共享方案人事、财务、技术、市场、生产各自独立目录公用区里再分部门共享和工具目录每个部门两个账号管理员完全控制普通用户只能新建自己的文件、动不了管理员上传的内容。这类需求在中小企业里非常典型难点不在 Samba 安装而在 Linux 权限与 Samba 权限的叠加设计。适合正在做 SMB 共享授权、想搞清valid users和1770这类参数到底怎么配合的人读完可以直接照抄配置并解释给同事听。2. 权限模型与账号规划Samba 如何叠加 Linux 权限2.1 Samba 权限双层结构Linux 文件权限是最终裁决者在security user模式下Samba 会先要求客户端通过 SMB 认证然后把当前连接映射到对应的 Linux 系统用户。后续所有文件操作都以这个 Linux 用户身份执行Samba 配置里的read only、valid users只是前置闸门真正决定“谁能删除谁的文件”的是 Linux 目录属主、属组和特殊权限位。这里有个最容易踩的坑valid users hradmin中的hradmin指的是 Linux 系统组而不是 Samba 自建概念。如果系统里没有这个组或者用户没有被加入该组认证就会直接失败。文档里用useradd -g jishuadmin jishuuser把普通用户放进管理员组正是为了让组权限同时作用于管理员和普通用户这也是整套权限模型的基础。另外要注意admin users参数。它会将指定用户映射为 root 身份访问共享从而绕过大部分 POSIX 权限限制但只作用于 Samba 服务进程不代表 Linux shell 下也有 root 权限。本案例中部门管理员既是目录属主又被设为admin users两者叠加才有了“完全控制”的效果。2.2 Company 目录树与账号矩阵案例规划的目录根是独立分区的/Company其下五个部门目录HR / CaiWu / JiShu / ShiChang / ShengChan和一个Share父目录Share下再建同名五个部门目录和Tools。这样做的收益是部门私有目录和跨部门交流目录物理隔离chown和chmod可以分别设置互不干扰。/Company ├── HR ├── CaiWu ├── JiShu ├── ShiChang ├── ShengChan └── Share ├── HR ├── CaiWu ├── JiShu ├── ShiChang ├── ShengChan └── Tools账号与目录对应关系如下部门管理员账号普通用户账号部门私有目录Share 下共享目录人事行政部hradminhruser/Company/HR/Company/Share/HR财务部caiwuadmincaiwuuser/Company/CaiWu/Company/Share/CaiWu技术部jishuadminjishuuser/Company/JiShu/Company/Share/JiShu市场部shichangadminshichanguser/Company/ShiChang/Company/Share/ShiChang生产部shengchanadminshengchanuser/Company/ShengChan/Company/Share/ShengChan公共admin无无/Company/Share/Tools注意普通用户的属组被设置为管理员同名组。比如hruser的属组是hradmin这不是随手写的而是为了用组权限统一控制访问。部门目录的属主设为管理员属组设为管理员组普通用户属于该组组权限位的读写执行就自然作用到普通用户身上。2.3 从需求倒推权限设计sticky bit 是关键需求里“普通用户能新建文件但不能修改和删除管理员上传的文件”看似复杂实际上用目录属主加 sticky bit 就能解。Linux 目录的写权限允许在目录内新建和删除文件但如果目录开启了 sticky bit权限数字第一位是 1删除动作就受限制只有文件属主、目录属主或 root 能删除目录中的文件。具体到这个案例管理员是目录属主普通用户属于目录属组并拥有写权限sticky bit 打开后普通用户删除自己创建的文件没问题但删除管理员名下的文件时会收到Operation not permitted。这就是为什么/Company下的部门目录用chmod 1770而Share下的目录用chmod 1775前者完全拦住无关用户后者允许其他部门用户只读遍历因为共享区本来就允许跨部门查看。3. RPM 安装与 1770 权限落地用户、目录和特殊位3.1 RPM 包安装与 Samba 服务初始化在 RHEL/CentOS 这类系统上第一步先确认是否已安装 Sambarpm -qa | grep samba rpm -qa | grep smb如果输出为空挂载系统安装光盘或配置好的本地 YUM 源后安装rpm -ivh samba* rpm -ivh smb*注意这里的通配符要按当前系统版本实际包名来匹配RHEL 6 时代smb*还能匹配到samba-commonRHEL 7 以后包名统一为samba、samba-client、samba-common建议直接用yum install -y samba samba-client。安装完成后配置文件smb.conf位于/etc/samba/目录。启动与自启设置如下service smb start chkconfig --level 35 smb on--level 35表示在运行级别 3多用户文本和 5图形下自动启动。随后要关闭 SELinux编辑/etc/selinux/config把SELINUX改为disabled。如果不关闭Samba 默认策略可能拒绝共享目录的写操作日志会出现在/var/log/audit/audit.log。如果不想全关也可以用setsebool -P samba_export_all_rw on但这份资料面向快速落地直接禁用最省事。3.2 用 useradd 与 smbpasswd 建立双身份账号Samba 需要两套身份Linux 系统用户和 SMB 密码库用户。先用useradd创建系统账户并限制其不能登录 shelluseradd -s /sbin/nologin hradmin useradd -g hradmin -s /sbin/nologin hruser-s /sbin/nologin让这些账号无法通过 SSH 或控制台登录只作为 Samba 映射身份。-g hradmin是关键它把普通用户hruser的主组指定为hradmin和 2.3 节分析的组权限模型对应。管理员账号不指定-g系统会默认创建同名组因此hradmin的属组也是hradmin组内成员可以共享目录访问权。然后为每个账号设置 SMB 口令smbpasswd -a hradmin smbpasswd -a hruser-a表示向 tdbsam 密码库添加账号。注意 SMB 密码与系统密码是两套必须通过smbpasswd写入。如果系统用户存在但没有执行这一步客户端连接时会报NT_STATUS_LOGON_FAILURE。全部账号为 5 个管理员加 5 个普通用户加admin共 11 个手工逐个执行虽然繁琐但能避免循环脚本里隐藏的用户组错误。3.3 目录创建、属主与特殊权限位的批量操作目录创建很简单mkdir -p /Company/{HR,CaiWu,JiShu,ShiChang,ShengChan,Share} mkdir -p /Company/Share/{HR,CaiWu,JiShu,ShiChang,ShengChan,Tools}接下来是权限设置的核心步骤cd /Company chown hradmin.hradmin HR chown caiwuadmin.caiwuadmin CaiWu chown jishuadmin.jishuadmin JiShu chown shichangadmin.shichangadmin ShiChang chown shengchanadmin.shengchanadmin ShengChan chown admin.admin Share chmod 1770 HR CaiWu JiShu ShiChang ShengChan chmod -R 0775 Share cd /Company/Share chown hradmin.hradmin HR chown caiwuadmin.caiwuadmin CaiWu chown jishuadmin.jishuadmin JiShu chown shichangadmin.shichangadmin ShiChang chown shengchanadmin.shengchanadmin ShengChan chown admin.admin Tools chmod 1775 HR CaiWu JiShu ShiChang ShengChan逐个拆解权限数字1770是 sticky bit1 属主读写执行7 属组读写执行7 其他无权限0。1775则是其他用户只有读和执行5用于 Share 下部门目录让非本部门用户可以进入并查看文件但不能写入。chmod -R 0775 Share先递归把 Share 下所有内容设为 0775再对每个子目录单独调整确保 Tools 目录保持 0775 属主 admin。3.4 用 ls -ld 核验权限矩阵权限设置完成后用ls -ld检查实际效果ls -ld /Company/HR /Company/Share/HR /Company/Share/Tools预期输出中/Company/HR应为drwxrwx---T或drwxrwx--t样式。注意如果是大写的T说明 sticky bit 存在但执行位缺失SMB 客户端进入目录时会提示权限拒绝。确保数字权限中含执行位即属主和属组位置为 7这样才会显示小写t。1770和1775都满足这一点如果之前误用了1730就要重新chmod。4. smb.conf 逐段拆解admin users 与 valid users 的分工4.1 [global] 全局参数认证方式与日志分流先看全局配置段[global] workgroup WORKGROUP server string Samba Server Version %v netbios name SAMBA log file /var/log/samba/%m.log max log size 50 security user passdb backend tdbsamsecurity user强制所有连接先通过 SMB 用户名和密码认证这是整个权限控制的前提。passdb backend tdbsam指定密码数据库为 tdbsam与前面smbpasswd -a写入的库一致。log file /var/log/samba/%m.log会按客户端机器名生成独立日志排错时不必在巨型日志里捞数据直接看对应机器名的文件。max log size 50是日志文件上限单位 KB超过后自动轮转。4.2 部门私有共享段admin users 与 valid users 的组合以[HR]为例[HR] comment This is a directory of HR. path /Company/HR/ public no admin users hradmin valid users hradmin writable yes create mask 0750 directory mask 0750valid users hradmin表示只有hradmin组的成员能访问这个共享普通用户hruser因为属于该组也被放行。admin users hradmin则将管理员映射为 root 身份使得管理员对目录内的所有文件拥有绝对控制权不受create mask限制。create mask 0750定义普通用户在共享内新建文件时Samba 请求 Linux 赋予的权限位为属主读写执行、属组读执行。由于目录属组是hradmin而hruser属于该组他新建的文件组内成员有读和执行权限但属主是他自己。配合目录 sticky bithruser无法删除hradmin创建的文件因为文件属主不是他他也不是目录属主。这里有一个容易被忽略的点public no等同于guest ok no禁止匿名访问。如果设成yes则valid users形同虚设任何人无需账号就能查看共享目录权限模型彻底失效。部门目录的writable yes并不意味着所有人都能写写权限仍由valid users和 POSIX 权限双层控制。4.3 公用共享段多组 valid users 的写法公用共享目录的配置更复杂一些[Share] comment This is a share directory. path /Company/Share/ public no valid users admin,hradmin,caiwuadmin,jishuadmin,shichangadmin,shengchanadmin writable yes create mask 0755 directory mask 0755valid users写成多组形式用逗号分隔。虽然这里写的是管理员组但普通用户属于这些组所以也能访问。关键是这样写并没有放开给所有人其他无关系统用户即便知道路径也进不来。create mask 0755使普通用户在 Share 根目录新建的文件默认属主可写、组和其他人只读。这正好满足“其他部门只能查看不能修改删除新建”的跨部门共享需求。部门子目录则因为目录本身设置了1775本部门用户可以读写执行其他部门只有读和执行。两层权限叠加后跨部门用户进入/Company/Share/HR只能浏览下载不能创建或删除。4.4 配置验证与重载修改完配置后先做语法检查testparm service smb restarttestparm会读取/etc/samba/smb.conf输出最终生效的配置并报告语法错误。看到Loaded services file OK说明没有原则问题但权限逻辑是否正确仍要靠客户端实测。service smb restart应用新配置。如果只是用smbpasswd改了密码而没改配置无需重启Samba 会实时读取密码库。5. 客户端联调与故障处理多重连接、无法登陆与配额限制5.1 Windows UNC 访问与 net use 清理客户机在资源管理器地址栏输入\\Samba服务器IP然后输入分配的用户名和密码即可。问题是当你要依次进入HR、CaiWu等不同部门共享时Windows 会拒绝切换账号弹出“不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接”的报错。这是 Windows 自身的连接复用限制不是 Samba 故障。解决办法是在命令提示符下执行net use * /del /y这会切断本机所有远程 SMB 连接再重新访问其他共享即可。如果仍有残留多执行两次或者重启一下资源管理器。在 Linux 客户端可以用smbclient //服务器IP/HR -U hradmin测试每次退出后连接自然释放不受这个问题影响。5.2 无法登陆时的排查顺序遇到“Samba 无法登陆”时按顺序排查先testparm确认配置语法再看/var/log/samba/下目标机器名的日志。出现NT_STATUS_ACCESS_DENIED通常是用户名没进对组或valid users写错出现NT_STATUS_LOGON_FAILURE则多是smbpasswd -a没有执行成功密码库对不上。接着检查防火墙是否放行 137/138/139/445 端口最后确认 SELinux 状态。如果系统是银河麒麟、Ubuntu 或 Debian服务名变为smbd用systemctl restart smbd配置路径不变。5.3 共享目录大小限制的简易做法如果后续需求变成“限制某个部门共享目录不能超过 10GB”Samba 本身不带配额参数常见做法是 LVM 加配额文件系统。把/Company/Share单独挂载到逻辑卷然后启用配额mount -o usrquota,grpquota /dev/vg0/share /Company/Share quotacheck -cug /Company/Share edquota -u hradminedquota -u hradmin可设置该用户的软硬块限制。注意配额是作用在 Linux 用户上而 Samba 以登录用户的身份写入所以配额对管理员和普通用户是分别生效的。最后用service smb restart让挂载和配额对共享立即生效。本文还有配套的精品资源点击获取