我想知道在 Linux 终端中运行$userA: command line
和之间的区别。$userB: sudo -u userA command line
是否有任何特定因素导致文件被创建。例如创建 deb 文件,运行 dpkg-buildpackage 时不应使用 sudo 权限。
答案1
您需要记住的是,运行命令时会发生两件事:
- 在这种情况下,用户的权限是什么。
- 该命令运行的环境是什么。
当您以特定用户身份登录时,您会更改这两个方面,但是当您使用时,sudo -u
您只需更改第一个方面。
考虑一下,假设一个全新安装:
(以用户A身份运行):
vim /home/userA/test
(现在作为用户 B):
sudo -u userA vim /home/userA/test
这两个命令都可以完美运行,您可能直到很晚才会注意到错误。因为在这两个实例中都vim
需要为其配置文件创建一个目录。它以以下权限运行:用户A因此这将是目录的所有者,但在第一种情况下,目录将在正确的位置创建:/home/userA/.vim
,但在后一种情况下会出现问题,环境仍然指向用户 B 的主目录,因此/home/userB/.vim
使用错误的权限创建。
如果您尝试启动一些其他应用程序,如文件管理器(创建缩略图、日志等),您将发现到处都有许多文件,这些文件具有错误的所有者和权限。
您可以注意到pwd
显示了您的主目录,并在您的计算机上尝试以下操作:
作为用户A:
pwd
sudo -u userB pwd
两者都应该给你/home/userA/
,即使第二个以 userB 身份运行
但是,以用户 B 身份登录然后:
pwd
你现在将看到/home/userB/