NFS 挂载点的 umount2() 返回 EPERM,即使以 root 身份调用也是如此

NFS 挂载点的 umount2() 返回 EPERM,即使以 root 身份调用也是如此

我正在运行 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 之外还会寻找什么其他权限?

相关内容