Tuesday, December 22, 2009

mount的权限

平时就直接使用
# mount /dev/sda1 /mnt/sda1
mount分区.

今天的确有些不爽: mount入的分区user没有permission. 这方面好像完全会了. 但又有与自己想法冲突的现象. 只能重新清理一次

/etc/fstab中的options项: 一部分选项在mount(包括mount.*命令)手册中, 另一部分在fstab手册中, 如noauto, user, owner选项

这里, 涉及到几个问题:
1. 谁能mount
2. mount进来时,文件系统中已存在的文件的owner:group怎么处理
3. mount进来时, mount point的权限怎么处理

谁能mount

这个问题首先要解决的是mount命令:
jessinio@jessinio-laptop:/dev$ ls -l $(which mount)
-rwsr-xr-x 1 root root 72188 2009-10-23 05:54 /bin/mount

mount命令有set-uid位, 有足够的能力处理谁能mount的问题. 需要做到这点, 只是配置文件上的问题:
* 在/etc/fstab的某条记录的options项中, 加入user和owner可以解决. ( 但无法指定具体到那个uid可以处理,只能通过owner和group)

常用的有user, owner, group

虽然一般可以mount分区了, 但是还有一个细节的问题:调用mount的方式, 如下例子
jessinio@jessinio-laptop:/mnt$ mount /dev/mapper/sg250-data /mnt/usb/  #这样是不通过/etc/fstab配置项
mount: only root can do that
jessinio@jessinio-laptop:/mnt$ mount  /mnt/usb/  #这样mount是通过/etc/fstab配置项来处理的,所以一般用户可以mount

* 这看上去是细节问题, 但有时会很郁闷的. 特别root用户使用了mount /mountpoint的方式加载分区, 并且/etc/fstab中有usr, owner, group, users之类的配置, root的操作也受得/etc/fstab中的限制

文件系统中存在的owner:group怎么处理

事实上, ext文件系统中, 是有owner id和group id的信息的. mount入来时, 使用存在的owner id 和group id

这就有种常见的现象: 硬盘A上的文件是在A机上时被user1:group1用户创建的, 当硬盘A被加载到B机时, ls出来的owner:group可能成了user2:group2.
* 这是因为文件的owner id和group id不变, 但是/etc/passwd和/etc/group对应的字符串为user2:group2的原因.

至于root的id就有点特殊. 因为root用户的文件有一个安全问题: set-uid. 所以两种处理:
1. set-uid在mount需要指定set-uid是否生效.默认时不生效
2. 是否把0:0这对id映射成其它的值.

其它没有权限位的文件系统: fat32

这个文件系统使用比广泛. 它是没有owner和group的信息的. 在mount时不指定uid和gid时, 默认为mount的用户: root用户mount就是root的文件, user用户mount就是user的文件.


BTW: mount的手册虽然很长, 但是它是分段的. 不同的文件系统单独的段. 所以特定的文件系统的手册信息其实不长.

重载文件系统本身的权限位

权限位就是文件的mode部分的数据。使用到的参数有:suid, nosuid, exec, noexec

四个参数的默认值:

1. owner, 默认情况下nosuid, nodev
* 文件系统的owner可以mount, 也可以umount
2. group, 默认情况下nosuid, nodev
* 用户在文件系统的group中时, 可以mount, 也可以umount
3. user,   默认情况下noexec, nosuid, nodev
* 谁都可以mount, 但是只能mount的用户才能umount (root不受控制)
4. users, 默认情况下noexec, nosuid, nodev
* 谁都可以mount和umount

* 注意:对于x权限, 不是看到的等于真实的,下面有例子

一般用户mount时, 在不使用exec参数时, x权限被去掉

下面是例子:
jessinio@jessinio-laptop:/mnt$ mount /mnt/usb/
jessinio@jessinio-laptop:/mnt$ ls -l /mnt/usb/run
-rwxr-xr-x 1 root root 0 2009-12-22 19:28 /mnt/usb/run
jessinio@jessinio-laptop:/mnt$ /mnt/usb/run
-bash: /mnt/usb/run: Permission denied
* 一般用户mount后, 就算有x权限也无法运行。
* 如果root用户使用了mount /mountpoint的方式加载分区, 并且/etc/fstab中有usr, owner, group, users之类的配置, root的操作也受得/etc/fstab中的限制.

如果root用户使用mount /dev_file /mountpoint方式加载文件系统时, 默认情况:

1. nosuid
2. exec
3. dev

mount point的权限怎么处理

mount point位置上就是分区的/

mount后, 这又如果处理? 有真相:
jessinio@jessinio-laptop:/dev$ sudo chown jessinio:jessinio /mnt/usb
jessinio@jessinio-laptop:/dev$ ls -ld /mnt/usb/
drwxr-xr-x 2 jessinio jessinio 4096 2009-12-22 13:31 /mnt/usb/
jessinio@jessinio-laptop:/dev$ sudo mount /dev/sg250/data /mnt/usb/
jessinio@jessinio-laptop:/dev$ ls -ld /mnt/usb/
drwxr-xr-x 3 root root 4096 2009-12-22 15:26 /mnt/usb/

分区的/不会因为mount point的权限而受影响. 做多一次测试就可以发现问题的原因:

jessinio@jessinio-laptop:/dev$ sudo chown jessinio:jessinio /mnt/usb
jessinio@jessinio-laptop:/dev$ ls -ld /mnt/usb
drwxr-xr-x 3 jessinio jessinio 4096 2009-12-22 15:26 /mnt/usb
jessinio@jessinio-laptop:/dev$ sudo umount /mnt/usb/
jessinio@jessinio-laptop:/dev$ sudo mount /dev/sg250/data /mnt/usb/
jessinio@jessinio-laptop:/dev$ ls -ld /mnt/usb/
drwxr-xr-x 3 jessinio jessinio 4096 2009-12-22 15:26 /mnt/usb/

* mount入来时, mount point的权限被分区的/取代, 分区的 / 使用存在的owner id 和group id






No comments:

Post a Comment

Note: Only a member of this blog may post a comment.