以不同用户身份运行应用程序

以不同用户身份运行应用程序
  1. 我们可以在不同用户下运行同一个应用程序吗?例如:App1 在Linux 平台上/home/usr1/App1运行吗?/home/Usr2/App1
  2. 两个不同的用户可以拥有相同的 UID 吗?例如:/home/usr1/App1Usr1/home/usr2/App2 和 Usr2 拥有相同的 UID?如果可以,那么该怎么做?
  3. 应用程序是否可以从一个用户切换到另一个用户,例如,运行在 app1 下的程序/home/usr1可以切换到/home/usr2

答案1

最好单独发布问题。但是,由于这些问题都可以快速回答(并且相关),所以我这样做了。

  1. 同一个应用程序可能由不同的用户、在不同的时间或同时运行。应用程序可能运行从同一位置(只要两个用户都有权执行它),或者可以从不同位置运行单独的副本(如您的示例所示)。

  2. 两个不同的用户不能共享 UID。您的 UID 实际上比您的用户名更能体现您的用户身份(因此得名)。当您拥有文件或文件夹,文件系统包含与文件关联的 UID,而不是用户名。如果两个用户具有相同的 UID,则意味着一个用户有多个名称(这也是不支持的)。

  3. 是的,可以切换用户身份。您可以使用sudo -u other-user command...或(如果您当前是root,或者目标用户已启用登录并且您知道他们的密码)su other-user -c 'command...'。您可以自己调用这些命令,但脚本和应用程序也可以使用它们。

    社区文档man sudo, 和man su了解其工作原理和使用方法的更多详细信息。在您正在编写的程序中,您还可以使用该setuid函数;请参阅man 2 setuidman 3 setuid。要运行图形应用程序,您应该使用gksu/gksudo或(在 Kubuntu 中)kdesudo而不是直接调用susudo(但请注意,Ubuntu 中默认gksu调用的是sudo,而不是su)。请参阅社区文档的这一部分man gksugksudo也包括封面),以及man kdesudo

    在编写改变用户的程序或脚本之前,我建议广泛阅读类 Unix 系统中用户身份的工作方式。

相关内容