一般情况下,我们在 Linux 下挂载 ntfs,是安装 ntfs-3g 后进行的,即:
# mount -t ntfs-3g /dev/sdb1 /mnt/data
这样临时解决下可以,但是会涉及到权限问题,就是说,/mnt/data 下的所有文件都必须 root 权限。于是我们加入一些参数让当前用户也可以访问修改:
# mount -t ntfs-3g -o uid=username,gid=users /dev/sdb1 /mnt/data # uid 为当前用户名,gid 为users 用户组
一般人到此为止,临时需求嘛,不过强迫症表示,看到挂载的分区,所有文件都是 777 权限表示非常不爽,于是:
# mount -t ntfs-3g -o uid=username,gid=users,umask=022 /dev/sdb1 /mnt/data
umask 表示,去掉的权限。
SUGO
说到这里,补充下 Linux 的权限表示为 SUGO,第一位 s 表示 SUID
、SGID
、Sticky bit
,一般用不到,后面附录顺带提一下,这里说下 UGO,三个位置,每个都用 rwx
来表示所拥有的权限,rwx
分别表示,读、写、执行(访问),分别用数字 4、2、1来表示,对应关系如下:
拥有者(U) | 群组(G) | 其他(O) | 相应数字权限 |
---|---|---|---|
r w x | r w x | r w x | 权限 |
4 2 1 | 4 2 1 | 4 2 1 | 777 |
4 2 1 | 4 0 1 | 4 0 1 | 755 |
4 2 1 | 4 2 1 | 4 0 0 | 774 |
4 2 1 | 0 0 0 | 0 0 0 | 700 |
4 2 0 | 4 0 0 | 4 0 0 | 644 |
如此就明了,644
表示 U(User) 拥有读写权限,G(Group) 拥有只读权限,O(Other) 拥有只读权限。
umask、fmask、dmask
- umask – 过滤目录与文件的权限
- fmask – 过滤文件的权限
- dmask – 过滤目录的权限
描述很清楚了,如果你想拥有 755 权限,那么 权限 = 777 - 022,每一位相减,得到 755,就是说,umask = 022 后,实际权限为 755,fmask、dmask 同理,如果想拥有 644 呢, 644 = 777- 133……
现在清楚了,上文我们设置的 umask=022,实际上,所有文件文件的权限也都被设置为 755 了,这对于拥有 wine 的用户来说,不是一个好消息,那么我们就分别来设置 fmask 与 dmask。
# mount -t ntfs-3g -o uid=username,gid=users,fmask=133,dmask=022 /dev/sdb1 /mnt/data
于是,我们最终得到的文件权限为 644,文件夹权限为 755,以上写入 fstab 中一开机就挂载的话,就是如此:
/dev/sdb1 /mnt/data ntfs-3g uid=username,gid=users,fmask=133,dmask=022 0 0
附录
SUGO 中的 S,表示 SUID、SGID、Sticky bit 之和,而 SUID、SGID、Sticky bit 分别用 4、2、1 来表示相关权限。
即:
SUID+SGID+Sticky bit | 之和 | 表示 |
---|---|---|
4 + 2 + 1 | 7 | SUID + SGID + Sticky bit |
4 + 2 + 0 | 6 | SUID + SGID |
4 + 0 + 1 | 5 | SUID + Sticky bit |
4 + 0 + 0 | 4 | SUID |
0 + 2 + 1 | 3 | SGID + Sticky bit |
0 + 2 + 0 | 2 | SGID |
0 + 0 + 1 | 1 | Sticky bit |
0 + 0 + 0 | 0 | 无 |
应用场景很多人都提过的,/etc/shadow 为 root 读写,普通用户也可以使用 passwd
来更改自己密码的原因。
- SUID: 只能作用在可执行文件上,当其他用户运行改执行文件时,会临时拥有该文件所有者的权限
- SGID: 可以作用在目录或可执行文件上,也同样,临时拥有该文件或文件夹所有者的权限
- Sticky bit: 只能作用在目录,可以用来防删除,一旦拥有 Sticky bit 属性是,除了目录所有者与 root,其他任何人都无法删除该目录下文件或子目录。
参考:
No comments:
Post a Comment