Joh*_*ick 20 default fstab mount
非根分区的默认挂载选项是什么?
mount 的 man 条目说...
defaults - use default options: rw, suid, dev, exec, auto, nouser, and async.
Run Code Online (Sandbox Code Playgroud)
......所以这可能是我们期望看到的。但是,除非我遗漏了什么,否则不会发生这种情况。
我有一个标记为“NewHome20G”的 ext3 分区,系统将其视为 /dev/sdc6。这我们可以从...
root@john-pc1204:~# blkid | grep NewHome20G
/dev/sdc6: LABEL="NewHome20G" UUID="d024bad5-906c-46c0-b7d4-812daf2c9628" TYPE="ext3"
Run Code Online (Sandbox Code Playgroud)
我在 fstab 中有一个条目如下...
root@john-pc1204:~# cat /etc/fstab | grep NewHome
LABEL=NewHome20G /media/NewHome20G ext3 rw,nosuid,nodev,exec,users 0 2
Run Code Online (Sandbox Code Playgroud)
请注意在该 fstab 行中指定的选项设置。
现在我看看分区是如何在启动后实际挂载的......
root@john-pc1204:~# mount -l | grep sdc6
/dev/sdc6 on /media/NewHome20G type ext3 (rw,noexec,nosuid,nodev) [NewHome20G]
Run Code Online (Sandbox Code Playgroud)
...因此,当文件系统被挂载时,我指定的 exec & users 选项似乎已被忽略。
可以肯定的是,我卸载了 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]
Run Code Online (Sandbox Code Playgroud)
....同样的结果
现在我再次卸载分区,指定 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]
Run Code Online (Sandbox Code Playgroud)
...这里 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]
Run Code Online (Sandbox Code Playgroud)
noexec 回来了,所以它看起来很像 rw,noexec,nosuid,nodev 是默认选项,这不是 man 所说的。
为什么这很重要?
我在数据磁盘上存储了一个充满有用脚本的文件夹。因为该磁盘已挂载 noexec,这些脚本将无法运行,即使它们都已使用 chmod 777 进行设置。我可以通过多种方式解决此问题,但令人失望的是 man 条目似乎是错误的。
我是否在这里遗漏了一些明显的东西,或者 Ubuntu 中的默认选项与几个版本前的版本相比发生了变化?
Mes*_*ion 20
手册是正确的。您的问题是您可能没有考虑 3 个重要细节:
users(and user) 暗示选项noexec, nosuid, 和 nodev
除非被后续选项覆盖
期权订单很重要;)
因此,当您rw,nosuid,nodev,exec,users在fstab中使用最后一个选项时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
Run Code Online (Sandbox Code Playgroud)
mount如果使用user( not 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
Run Code Online (Sandbox Code Playgroud)
还要注意,当使用userwithout 时noauto,分区将在启动时自动挂载(由 root 用户)。因此,在 root 卸载它之前,没有人能够卸载或(重新)挂载。
也就是说,我想您已经找到了解决方案:只需更改选项的顺序,一切都会正常进行:
LABEL=NewHome20G /media/NewHome20G ext3 users,exec 0 2
Run Code Online (Sandbox Code Playgroud)
请注意如何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 ~ $
Run Code Online (Sandbox Code Playgroud)
这意味着任何用户,无论是 root 用户还是非 root 用户,都可以挂载和卸载它,而不管之前是谁挂载或卸载了它。可执行文件也可以工作:)