我正在运行 Ubuntu 20.04,但是这个问题在 Ubuntu 14.04 中又出现了。
我一直试图在 VPN 连接关闭时自动卸载 NFS 挂载,但无论我如何调用“umount”,即使我以 root 权限运行,我也会收到“操作不允许”的信息。我认为,如果我编写一个小型独立程序来执行卸载,诊断问题会更容易:
int main(int argc, char **argv)
{
int rc;
rc = setuid(0);
printf("setuid: rc %i, %s\n", rc, strerror(errno));
rc = umount2(argv[1], MNT_FORCE | MNT_DETACH);
printf("umount2: rc %i, %s\n", rc, strerror(errno));
return 0;
}
当我在 shell 会话中运行这个程序时,我得到了我所期望的结果:
setuid: rc 0, Success
umount2: rc 0, Success
当我在由我的 VPN 软件(OpenVPN)触发的脚本中运行它时,我得到了以下信息:
setuid: rc 0, Success
umount2: rc -1, Operation not permitted
setuid() 调用有效,所以我知道我正在以 root 身份运行(事实上,该程序已经以 root 身份运行,因此无论如何这都不是必需的)。
umount2() 除了寻找 UID 0 之外还会寻找什么其他权限?