非根分区的默认挂载选项是什么?
mount 的 man 条目显示......
defaults - use default options: rw, suid, dev, exec, auto, nouser, and async.
... 这可能是我们期望看到的。但是,除非我遗漏了什么,否则事实并非如此。
我有一个名为“NewHome20G”的 ext3 分区,系统将其视为 /dev/sdc6。我们可以从以下位置看到...
root@john-pc1204:~# blkid | grep NewHome20G
/dev/sdc6: LABEL="NewHome20G" UUID="d024bad5-906c-46c0-b7d4-812daf2c9628" TYPE="ext3"
我在 fstab 中有一个如下条目...
root@john-pc1204:~# cat /etc/fstab | grep NewHome
LABEL=NewHome20G /media/NewHome20G ext3 rw,nosuid,nodev,exec,users 0 2
请注意该 fstab 行中指定的选项设置。
现在我看一下启动后分区实际上是如何安装的......
root@john-pc1204:~# mount -l | grep sdc6
/dev/sdc6 on /media/NewHome20G type ext3 (rw,noexec,nosuid,nodev) [NewHome20G]
...因此,当文件系统被挂载时,我指定的执行和用户选项似乎被忽略了。
为了确保万无一失,我卸载了 sdc6,重新安装它,然后再次查看安装选项......
root@john-pc1204:~# umount /dev/sdc6
root@john-pc1204:~# mount /dev/sdc6
root@john-pc1204:~# mount -l | grep sdc6
/dev/sdc6 on /media/NewHome20G type ext3 (rw,noexec,nosuid,nodev) [NewHome20G]
....结果相同
现在我再次卸载该分区,指定 exec 选项重新挂载它并查看结果...
root@john-pc1204:~# umount /dev/sdc6
root@john-pc1204:~# mount /dev/sdc6 -o exec
root@john-pc1204:~# mount -l | grep sdc6
/dev/sdc6 on /media/NewHome20G type ext3 (rw,nosuid,nodev) [NewHome20G]
...到这里 exec 选项终于生效了,而 noexec 设置消失了。
只是为了兴趣,我使用默认选项重新挂载了分区
root@john-pc1204:~# umount /dev/sdc6
root@john-pc1204:~# mount /dev/sdc6 -o defaults
root@john-pc1204:~# mount -l | grep sdc6
/dev/sdc6 on /media/NewHome20G type ext3 (rw,noexec,nosuid,nodev) [NewHome20G]
noexec 又回来了,所以看起来很像 rw、noexec、nosuid、nodev 是默认选项,这不是 man 所说的。
这为什么重要?
我有一个文件夹,里面装满了有用的脚本,存储在数据磁盘上。由于该磁盘以 noexec 方式挂载,因此这些脚本无法运行,即使它们都已使用 chmod 777 进行设置。我可以通过多种方式解决这个问题,但令人失望的是,man 条目似乎是错误的。
我是否遗漏了某些显而易见的东西,或者 Ubuntu 中的默认选项与几个版本之前的选项相比发生了变化?
答案1
手册是正确的。您的问题是也许您没有考虑到 3 个重要细节:
users
(和user
)暗示选项noexec
、nosuid
和nodev
除非被覆盖随后的选项
选项命令事 ;)
因此,当你rw,nosuid,nodev,exec,users
使用文件系统,最后一个选项,,users
设置noexec,nosuid,nodev
,从而禁用你的exec
(并且使你的nosuid,nodev
变得多余)。
结果正如预期的那样rw,noexec,nosuid,nodev
。
不,users
它并没有被忽略,只是通常不会显示在mount
列表输出中。但任何用户都可以卸载它并重新安装。试试看!
rodrigo@desktop ~ $ mount /dev/sda6 # ordinary user
rodrigo@desktop ~ $ mount | grep /dev/sda6
/dev/sda6 on /mnt/mint10 type ext4 (rw,noexec,nosuid,nodev)
rodrigo@desktop ~ $ /mnt/mint10/bin/echo it works # noexec will deny this
bash: /mnt/mint10/bin/echo: Permission denied
mount
user
仅当()时才会显示与用户相关的内容不是 users
) 被使用,并且普通的非 root 用户可以像这样挂载它:
rodrigo@desktop ~ $ mount /dev/sda6 # ordinary user
rodrigo@desktop ~ $ mount | grep /dev/sda6 # it will list current "owner"
/dev/sda6 on /mnt/mint10 type ext4 (rw,noexec,nosuid,nodev,user=rodrigo)
rodrigo@desktop ~ $ umount /dev/sda6
rodrigo@desktop ~ $ sudo mount /dev/sda6
rodrigo@desktop ~ $ mount | grep /dev/sda6 # since owner=root, it won't show
/dev/sda6 on /mnt/mint10 type ext4 (rw,noexec,nosuid,nodev)
rodrigo@desktop ~ $ umount /dev/sda6 # only mounter can unmount
umount: only root can unmount LABEL=MINT10 from /mnt/mint10
还要注意,使用user
without时noauto
,分区将在启动时自动挂载(由 root 挂载)。因此,在 root 卸载它之前,任何人都无法卸载或(重新)挂载它。
话虽如此,我想你已经找到解决方案了:只需改变选项的顺序一切都会正常进行:
LABEL=NewHome20G /media/NewHome20G ext3 users,exec 0 2
注意exec
后 users
并且也rw,nosuid,nodev
没有必要。rw
已经是默认的,其他的都自动开启了users
结果是:
rodrigo@desktop ~ $ mount /dev/sda6 # user mount
rodrigo@desktop ~ $ mount | grep /dev/sda6
/dev/sda6 on /mnt/mint10 type ext4 (rw,nosuid,nodev)
rodrigo@desktop ~ $ /mnt/mint10/bin/echo it works # exec works
it works
rodrigo@desktop ~ $ sudo umount /dev/sda6 # root unmount
rodrigo@desktop ~ $ sudo mount /dev/sda6 # root mount
rodrigo@desktop ~ $ mount | grep /dev/sda6
/dev/sda6 on /mnt/mint10 type ext4 (rw,nosuid,nodev)
rodrigo@desktop ~ $ umount /dev/sda6 # user unmount
rodrigo@desktop ~ $
这意味着任何用户(root 或非 root)都可以挂载和卸载它,无论之前是谁挂载或卸载的。可执行文件也可以 :)