如何才能让 NTFS 分区 mount 后,普通 uid 只能读取某些指定目录? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
pq
V2EX    Linux

如何才能让 NTFS 分区 mount 后,普通 uid 只能读取某些指定目录?

  •  
  •   pq 2017-06-06 13:11:16 +08:00 3745 次点击
    这是一个创建于 3101 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我试着以 uid=0,umask=077 来 mount,然后再 mount -o bind,umask=022 /ntfs_dir /home/uid/path,执行起来是没问题,但 umask 还是原来的 077,在 bind 后加 uid 也没效果,估计 bind 时是不能修改原来的挂载参数的。

    不知还有没有其它办法来实现这个功能呢?

    24 条回复    2017-06-07 19:46:58 +08:00
    likuku
        1
    likuku  
       2017-06-06 15:00:48 +08:00   1
    SAMBA 吧,用 SAMBA 作不同 share 点来分享资源。

    本来 ACL 可以,但 NTFS 不能加 Linux 的 ACL
    Busy
        2
    Busy  
       2017-06-06 15:12:55 +08:00   1
    root 权限
    mount -t ntfs-3g -o uid=root,gid=root,fmask=133,dmask=022 /dev/sdb1 /mnt/data

    username 用户
    mount -t ntfs-sg -o bind,uid=username,gid=users /mnt/data/dir /home/uid/path
    Busy
        3
    Busy  
       2017-06-06 15:18:30 +08:00
    第一行中 fmask=177,dmask=077
    pq
        4
    pq  
    OP
       2017-06-06 15:36:52 +08:00
    @Havee -o bind 时,后面那些参数都不起效果的,man mount 中写明了的,google 也都这么说。
    pq
        5
    pq  
    OP
       2017-06-06 15:43:57 +08:00
    @likuku 本地 samba ?确实应该可行,但这效率和资源占用,估计会很恐怖,本来用户态的 ntfs-3g 就够耗资源的,再加上一个 samba。。。。

    ntfs-3g 官网确实写明了,已经支持 NTFS ACL,而且,man ntfs-3g 也有相关参数,但 mount 的 man 里却不提这个,我试着 setfacl 后,貌似没任何效果,唉,linux 真是个大杂烩,各种层级的文档,经常自说自话,这点远不如 FreeBSD 那么统一。
    parametrix
        6
    parametrix  
       2017-06-06 15:44:53 +08:00   1
    可以考虑用 bindfs,参考 http://bindfs.org/docs/bindfs.1.html
    Busy
        7
    Busy  
       2017-06-06 15:46:07 +08:00
    @pq 那第二次 mount 就 -o bind,ro
    只读
    Busy
        8
    Busy  
       2017-06-06 15:48:40 +08:00
    man mount

    ...

    mount(8) since v2.27 allows to change the mount options by passing the relevant options along with --bind.
    For example:

    mount --bind,ro foo foo

    This feature is not supported by the Linux kernel; it is implemented in userspace by an additional mount(2)
    remounting system call. This solution is not atomic.

    The alternative (classic) way to create a read-only bind mount is to use the remount operation, for example:

    mount --bind olddir newdir
    mount -o remount,bind,ro olddir newdir

    Note that a read-only bind will create a read-only mountpoint (VFS entry), but the original filesystem
    superblock will still be writable, meaning that the olddir will be writable, but the newdir will be read-only.

    It's also possible to change nosuid, nodev, noexec, noatime, nodiratime and relatime VFS entry flags by
    "remount,bind" operation. It's impossible to change mount options recursively (for example with -o rbind,ro).
    pq
        9
    pq  
    OP
       2017-06-06 15:48:57 +08:00
    算了,这个想法目前看来不现实,我还是启动到 windows 后,将部分不想让这个 uid 看到的目录移动到另一个分区算了,然后将非敏感的 ntfs 分区直接以这个 uid 挂载。
    pq
        10
    pq  
    OP
       2017-06-06 15:49:58 +08:00
    @parametrix 嗯,google 时确实有人提到过 bindfs,等下我试试看。。。
    pq
        11
    pq  
    OP
       2017-06-06 15:51:14 +08:00
    @Havee 呵呵,我在 fstab 中挂那个分区时就是以 ro 模式 mount 的。
    Busy
        12
    Busy  
       2017-06-06 15:54:47 +08:00
    @pq
    man mount 中说的很清楚了啊

    mkdir -p 123 456
    mount --bind 123 456
    mount -o remount,bind,ro 123 456
    cd 456; touch 123

    试试结果是什么
    pq
        13
    pq  
    OP
       2017-06-06 15:54:49 +08:00
    @Havee 是的,ro 是可以用在 bind 后的,但我这个 case,需要的是对特定目录的授权访问,所以,uid 或 umask/fmask/dmask 之类能修改才是有意义的。
    Busy
        14
    Busy  
       2017-06-06 15:57:33 +08:00
    host ~ # mkdir -p 123 456
    host ~ # mount --bind 123 456
    host ~ # mount -o remount,bind,ro 123 456
    host ~ # cd 456; touch 123
    touch: cannot touch '123': Read-only file system
    pq
        15
    pq  
    OP
       2017-06-06 15:58:26 +08:00
    @Havee 这么做的后果,等于是将整个分区透明化了,普通 uid 可以直接通过顶级挂载点访问整个分区,而我想要做的是,让部分目录对普通 uid 不可见。
    Busy
        16
    Busy  
       2017-06-06 16:00:49 +08:00
    你需要特定的用户
    那第一次挂在参数就 -o uid=username,gid=username,fmask=133,dmask=022

    第二次 mount --bind

    第三次 mount -o remount,bind,ro

    这样不就是特定的用户 username 只读了?
    pq
        17
    pq  
    OP
       2017-06-06 16:02:12 +08:00
    @Havee 晕,只读也是能读呀,我想要的是,部分目录完全不可见,不能读。。。。
    yjd
        18
    yjd  
       2017-06-06 16:02:49 +08:00
    当初也想实现像 ntfs 那样方便设置权限。最后不了了之了。期待 pq 解决。
    parametrix
        19
    parametrix  
       2017-06-06 16:12:55 +08:00
    @pq #17 用 bindfs 可以权限映射:比如 dirA 属于 user1@group1

    bindfs --map=user1/user2:@group1/@group2 --perms=permissions /some/dirA /some/dirB

    可以把 dirA 映到 dirB 的同时,dirB 及其中文件属于 user2@group2,并且权限也可以设置。发生修改的时候,文件所属与权限都符合这个映射。
    wevsty
        20
    wevsty  
       2017-06-06 16:41:40 +08:00
    可以用 libfuse 开发个映射的程序就可以完成了。
    PaleCheung
        21
    PaleCheung  
       2017-06-06 18:06:53 +08:00
    @pq 然后原来的目录用 link 链接就好。
    保持原来的目录树结构
    likuku
        22
    likuku  
       2017-06-07 15:07:54 +08:00
    @pq mount --bind 我常用,但是用在 liveCD 环境下打包 /解包 chroot 方式快速安装系统用.

    可以当成是把源目录给硬 mount
    pq
        23
    pq  
    OP
       2017-06-07 15:25:42 +08:00
    @likuku 是的,基本上相当于一个硬链接,无法阻止普通 uid 通过顶级挂载点来直接访问整个分区。
    likuku
        24
    likuku  
       2017-06-07 19:46:58 +08:00
    NTFS 上数据迁移到 Linux 原生支持的 FS 吧,或者 直接用 windows.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5259 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 06:02 PVG 14:02 LAX 22:02 JFK 01:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86