V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
James369
V2EX  ›  Linux

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

  •  
  •   James369 · 2021-06-24 11:37:04 +08:00 · 2386 次点击
    这是一个创建于 1280 天前的主题,其中的信息可能已经有所发展或是发生改变。
    为什么会有这种需求呢,我共享了几个目录给大家用。主要是共享的东西比较重要,怕被误删除。

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

    可写但不可删除是个奇怪的权限,因为可以用写入操作把文件内容清空,然后等于是删了。大约查了一下只有 Windows 支持这种奇怪的设定,但我也没看明白到底怎么用的。
    orzfly
        7
    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
        8
    passerbytiny  
       2021-06-24 12:33:17 +08:00 via Android
    linux 文件权限只有读、写、执行,文件夹权限只有写、执行(读取其下级列表),删除文件和删除文件夹都属于“写文件夹”,没有独立权限分配。
    xtdwf
        9
    xtdwf  
       2021-06-24 12:34:02 +08:00
    群晖表示可以直接设置可写不可删
    HUNYXV
        11
    HUNYXV  
       2021-06-24 12:46:56 +08:00
    @hstdt 说的方法及简单也有效哈哈。
    ./xxx
    ├── .git
    └── share_xxx
    Jirajine
        12
    Jirajine  
       2021-06-24 12:52:35 +08:00 via Android
    ACL 应该可以
    YuukiIchika
        13
    YuukiIchika  
       2021-06-24 20:44:14 +08:00
    给目录设置 sticky bit ?
    codehz
        14
    codehz  
       2021-06-25 08:38:40 +08:00 via Android
    小贴士:
    git 支持在外部目录检出,此时目标目录将不包含.git 目录(当然 git 操作还是得在仓库目录才能做的
    详情搜索 git worktree
    (不过这玩意对单个分支只能同时检出一次(默认的检出也算一次),所以建议开一个 bare 仓库用作操作目录)
    flynaj
        15
    flynaj  
       2021-08-05 01:35:54 +08:00 via Android
    这个只读共享就行,独立共享一个 up 文件夹做上传。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1018 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:33 · PVG 05:33 · LAX 13:33 · JFK 16:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.