技术解析

Samba 在共享的时候,如何比较好的设定:可写但不允许删除目录?
0
2021-06-24 13:06:39
idczone
为什么会有这种需求呢,我共享了几个目录给大家用。主要是共享的东西比较重要,怕被误删除。

所以我在每个目录下用 git 做定期备份,所以.git 目录是不能被删除,同理.git 上一级目录也不能被删除。
这样即使其它文件他们怎么折腾都可以,我都可能通过 git 去还原。(关联的帖子: https://v2ex.com/t/785482 )
不懂 Samba,但删除目录是需要目录上一级写权限的,和目录本身是否可写无关的,

不如把.git 文件夹隐藏

比如我共享了 AAA, BBB 目录,.git 是在 AAA/.git ,BBB/.git ,那用户直接删除 AAA 或 BBB 就完了。

使用 veto files 指令将 .git 目录隐藏屏蔽,这样如果目录树中包含 .git 目录,则整个目录都无法删除

文件放在 git 所在文件夹的下一级,不要同级。共享的时候共享子文件夹即可。

这个需求应该用文件系统的 snapshot 来做吧,就没有必要排除大文件,也没有不能删的 .git 目录了。
btrfs subvolume snapshot AAA /backup/AAA
可写但不可删除是个奇怪的权限,因为可以用写入操作把文件内容清空,然后等于是删了。大约查了一下只有 Windows 支持这种奇怪的设定,但我也没看明白到底怎么用的。

要不要换个问题?.git 目录不一定必须要放在 AAA/.git 这里哦……
可以用 git-dir 和 work-tree 参数手动指定对应目录。
例如 git status 变成这样:
/share/AAA> git --git-dir=/super-non-shared-directory/AAA.git/ --work-tree=/share/AAA status

linux 文件权限只有读、写、执行,文件夹权限只有写、执行(读取其下级列表),删除文件和删除文件夹都属于“写文件夹”,没有独立权限分配。

群晖表示可以直接设置可写不可删

https://www.linuxquestions.org/questions/linux-server-73/samba-read-and-write-even-subdir-but-no-delete-4175605300/

说的方法及简单也有效哈哈。
./xxx
├── .git
└── share_xxx

ACL 应该可以

给目录设置 sticky bit ?

小贴士:
git 支持在外部目录检出,此时目标目录将不包含.git 目录(当然 git 操作还是得在仓库目录才能做的
详情搜索 git worktree
(不过这玩意对单个分支只能同时检出一次(默认的检出也算一次),所以建议开一个 bare 仓库用作操作目录)

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服