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

2021-06-24 11:37:04 +08:00
 James369
为什么会有这种需求呢,我共享了几个目录给大家用。主要是共享的东西比较重要,怕被误删除。

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

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

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

https://www.v2ex.com/t/785503

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

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

© 2021 V2EX