我试着以 uid=0,umask=077 来 mount,然后再 mount -o bind,umask=022 /ntfs_dir /home/uid/path,执行起来是没问题,但 umask 还是原来的 077,在 bind 后加 uid 也没效果,估计 bind 时是不能修改原来的挂载参数的。
不知还有没有其它办法来实现这个功能呢?
1
likuku 2017-06-06 15:00:48 +08:00 1
SAMBA 吧,用 SAMBA 作不同 share 点来分享资源。
本来 ACL 可以,但 NTFS 不能加 Linux 的 ACL |
2
Havee 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 |
3
Havee 2017-06-06 15:18:30 +08:00
第一行中 fmask=177,dmask=077
|
5
pq OP @likuku 本地 samba ?确实应该可行,但这效率和资源占用,估计会很恐怖,本来用户态的 ntfs-3g 就够耗资源的,再加上一个 samba。。。。
ntfs-3g 官网确实写明了,已经支持 NTFS ACL,而且,man ntfs-3g 也有相关参数,但 mount 的 man 里却不提这个,我试着 setfacl 后,貌似没任何效果,唉,linux 真是个大杂烩,各种层级的文档,经常自说自话,这点远不如 FreeBSD 那么统一。 |
6
parametrix 2017-06-06 15:44:53 +08:00 1
可以考虑用 bindfs,参考 http://bindfs.org/docs/bindfs.1.html
|
8
Havee 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). |
9
pq OP 算了,这个想法目前看来不现实,我还是启动到 windows 后,将部分不想让这个 uid 看到的目录移动到另一个分区算了,然后将非敏感的 ntfs 分区直接以这个 uid 挂载。
|
10
pq OP @parametrix 嗯,google 时确实有人提到过 bindfs,等下我试试看。。。
|
12
Havee 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 试试结果是什么 |
13
pq OP @Havee 是的,ro 是可以用在 bind 后的,但我这个 case,需要的是对特定目录的授权访问,所以,uid 或 umask/fmask/dmask 之类能修改才是有意义的。
|
14
Havee 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 |
15
pq OP @Havee 这么做的后果,等于是将整个分区透明化了,普通 uid 可以直接通过顶级挂载点访问整个分区,而我想要做的是,让部分目录对普通 uid 不可见。
|
16
Havee 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 只读了? |
18
yjd 2017-06-06 16:02:49 +08:00
当初也想实现像 ntfs 那样方便设置权限。最后不了了之了。期待 pq 解决。
|
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,并且权限也可以设置。发生修改的时候,文件所属与权限都符合这个映射。 |
20
wevsty 2017-06-06 16:41:40 +08:00
可以用 libfuse 开发个映射的程序就可以完成了。
|
21
PaleCheung 2017-06-06 18:06:53 +08:00
@pq 然后原来的目录用 link 链接就好。
保持原来的目录树结构 |
22
likuku 2017-06-07 15:07:54 +08:00
|
24
likuku 2017-06-07 19:46:58 +08:00
NTFS 上数据迁移到 Linux 原生支持的 FS 吧,或者 直接用 windows.
|