Samba共享里除root外怎么让所有人都删不了文件

公司 samba 共享盘当公共归档用,需求很明确:大家都能往里放新文件、能改内容,但删除这个动作只留给 root——归档盘被谁顺手清一下库,谁都担不起。很多人的本能反应是把文件都设成只读,一试就露馅:该删还是能删。要配出「只增不删」,得先懂一行底层的账。

关键在这条:Linux 权限模型里,「删除」的权限不长在文件身上,长在目录的写位上。对目录有写权限,就有权删除目录里的条目——不管文件本身是不是只读。所以给文件设只读防不住删除;反过来把目录的写位收走,删除确实防住了,可大家连新文件也放不进来了。「能放能改不能删」的本质,是把「创建条目」和「删除条目」这两个共用目录写位的动作拆开,靠粘滞位和属主归属来组合,再配一层后悔药。

配置四步。头一步粘滞位先上一半保险:对共享目录 chmod +t(比如 1777)。效果是普通用户只能删除属主是自己的文件,删别人的直接被拒,root 不受限。到这一步,「除 root 外谁都删不了别人的文件」已经成立。第二步把口子收紧到题面要求的程度——连自己的也不能删:让新建文件的属主自动落到 root 名下。做法是共享目录的属主保持 root,smb.conf 共享段里开 inherit owner = yes,用户放进来的文件属主自动继承目录属主;配合粘滞位,普通用户对任何文件都够不着删除资格。文件本身按组放开写位(目录 setgid 保组继承),内容照样能改——「只增不删」就此闭环。第三步配后悔药:samba 自带的 vfs recycle 模块,在共享段里挂上,指定一个服务器端的回收站目录(比如 .recycle),再开 keeptree 保留目录结构、versions 同名不覆盖两个参数。此后客户端那边无论谁删了什么,都先在服务器上的回收站里躺着,root 定期清理。它与 Windows 客户端自己那个回收站是两码事——网络共享里删的文件,客户端回收站里是没有的,服务器端这层才是真正的兜底。第四步测试三连收工:普通账号上传成功、修改文件内容成功、删除任何文件被拒,三样都符合预期才算过关。

预防三条:归档类共享从建的那天起就按「粘滞位+属主归 root+回收站」三件套配,别等出了事再补;回收站的保留天数和清空责任人写进维护备忘,定期清,别让它自己先撑成新的存储难题;每半年抽一次「误删找回」演练,确认回收站这层保险真的能用。各部门各进各扇门、子目录按组分权的基础打法,上一篇讲过,两篇配合看。

贵州诚鑫致达科技给归档盘开回收站模块,保留天数和清空责任人一定写进维护备忘——免得兜底的地方自己先变成新的麻烦。