我偶然发现了一个非常奇怪的问题mount
。我无法理解它。
对于某些上下文,我编写了一个 Python 脚本,旨在自动挂载可热插拔 USB 设备,但这并不相关。
这是发生的安装错误:
mount: /media/usb/backup: filesystem was mounted, but any subsequent operation failed: Operation not permitted.
我有一个 LUKS 分区已解锁,我正在尝试使用我的脚本安装它。
$ lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 1.8T 0 disk
├─sdb1 8:17 0 64M 0 part
├─sdb2 8:18 0 128M 0 part
├─sdb3 8:19 0 10G 0 part
└─sdb4 8:20 0 1.8T 0 part
└─cfe1c7ab-36cc-4419-9373-764aaae1033f 254:1 0 1.8T 0 crypt
我创建了一个最小的可重现示例,如下所示:
#!/usr/bin/bash
mount /dev/mapper/cfe1c7ab-36cc-4419-9373-764aaae1033f
该x
位已设置,当我使用 shebang 运行此脚本时,我收到与上面相同的错误:
$ sudo /tmp/test
mount: /media/usb/backup: filesystem was mounted, but any subsequent operation failed: Operation not permitted.
奇怪的是,如果我在 shell 中运行完全相同的命令,它确实有效:
$ sudo mount /dev/mapper/cfe1c7ab-36cc-4419-9373-764aaae1033f
$ echo $?
0
当我不使用 shebang 而是显式使用 bash 运行脚本时,它也能正常工作:
$ sudo bash /tmp/test
$ echo $?
0
显然 shebang 发生了一些事情,触发了Operation not permitted
错误。如果我没记错的话,shebang 是由内核直接处理的,因此我开始怀疑它是否与我使用 ArchLinux 的事实有关linux-hardened
(这是 GraphenOS 内核的一个分支)。
您是否知道在使用 shebang 运行脚本时可能会触发该错误的任何 Linux 机制(挂载命名空间?)?感谢您阅读我的内容。