Samba 在共享的时候,如何比较好的设定:可写但不允许删除目录?

2021 年 6 月 24 日
 James369
为什么会有这种需求呢,我共享了几个目录给大家用。主要是共享的东西比较重要,怕被误删除。

所以我在每个目录下用 git 做定期备份,所以.git 目录是不能被删除,同理.git 上一级目录也不能被删除。
这样即使其它文件他们怎么折腾都可以,我都可能通过 git 去还原。(关联的帖子: https://v2ex.com/t/785482
3167 次点击
所在节点    Linux
15 条回复
AoEiuV020
2021 年 6 月 24 日
不懂 Samba,但删除目录是需要目录上一级写权限的,和目录本身是否可写无关的,
ho121
2021 年 6 月 24 日
不如把.git 文件夹隐藏
James369
2021 年 6 月 24 日
@ho121 比如我共享了 AAA, BBB 目录,.git 是在 AAA/.git ,BBB/.git ,那用户直接删除 AAA 或 BBB 就完了。
asilin
2021 年 6 月 24 日
使用 veto files 指令将 .git 目录隐藏屏蔽,这样如果目录树中包含 .git 目录,则整个目录都无法删除
hstdt
2021 年 6 月 24 日
文件放在 git 所在文件夹的下一级,不要同级。共享的时候共享子文件夹即可。
CRVV
2021 年 6 月 24 日
这个需求应该用文件系统的 snapshot 来做吧,就没有必要排除大文件,也没有不能删的 .git 目录了。
btrfs subvolume snapshot AAA /backup/AAA

可写但不可删除是个奇怪的权限,因为可以用写入操作把文件内容清空,然后等于是删了。大约查了一下只有 Windows 支持这种奇怪的设定,但我也没看明白到底怎么用的。
orzfly
2021 年 6 月 24 日
要不要换个问题?.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
passerbytiny
2021 年 6 月 24 日
linux 文件权限只有读、写、执行,文件夹权限只有写、执行(读取其下级列表),删除文件和删除文件夹都属于“写文件夹”,没有独立权限分配。
xtdwf
2021 年 6 月 24 日
群晖表示可以直接设置可写不可删
dingwen07
2021 年 6 月 24 日
HUNYXV
2021 年 6 月 24 日
@hstdt 说的方法及简单也有效哈哈。
./xxx
├── .git
└── share_xxx
Jirajine
2021 年 6 月 24 日
ACL 应该可以
YuukiIchika
2021 年 6 月 24 日
给目录设置 sticky bit ?
codehz
2021 年 6 月 25 日
小贴士:
git 支持在外部目录检出,此时目标目录将不包含.git 目录(当然 git 操作还是得在仓库目录才能做的
详情搜索 git worktree
(不过这玩意对单个分支只能同时检出一次(默认的检出也算一次),所以建议开一个 bare 仓库用作操作目录)
flynaj
2021 年 8 月 5 日
这个只读共享就行,独立共享一个 up 文件夹做上传。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/785503

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX