当向另一个人提供代码时,删除所有特定于海拔的代码似乎是一个很好的做法 - 即提供apt update
而不是sudo apt update
(或su -c 'apt update'
)。然而,对于那些刚接触基于 UNIX 的权限提升的人来说,这会导致各种各样的问题 — 我和我遇到的许多其他人过去只是使用上述实用程序以超级用户身份运行所有内容。
此外,当以编程方式调用某些命令时,在某些系统上需要超级用户提升,但在其他系统上则不需要。这意味着包含权限电梯可能会破坏某些系统上的配置,因为事物在不应该属于超级用户时开始由超级用户拥有。flatpak
是一个其中的一些示例(配置损坏除外)— 50% 的安装我使用了必要的提升来调用其大部分命令,另外 50% 默认情况下没有。
考虑到根据我的经验,Windows 7+ 上的 UAC 提升似乎工作得非常好,即使在边缘情况下,我感到非常惊讶的是,似乎不存在修复此问题的综合方法。
因此,我询问是否有人知道以编程方式确定命令是否需要用户提升才能调用它的任何方法。我知道在调用某些命令时切换用户可能会导致其行为影响该用户,但在这些情况下,我无法想象能够调用该命令的用户会受到限制(以免它变得无用)。
https://unix.stackexchange.com/search?q=确定+是否+超级用户+海拔+必需什么都不返回,尽管如何通过代码确定命令是否需要根提升?和如何检查运行命令是否需要“sudo”权限?看起来好像他们在问我想知道什么,两者中可用的少数响应似乎都集中在 shell 脚本代码上以回避问题,而不是提供与语言无关的解决方案。
答案1
因此,我询问是否有人知道以编程方式确定命令是否需要用户提升才能调用它的任何方法。我知道在调用某些命令时切换用户可能会导致其行为影响该用户,但在这些情况下,我无法想象能够调用该命令的用户会受到限制(以免它变得无用)。
不存在这样的方法;这是您需要apt
以 root 身份运行的“管理员上下文知识”,而flatpak
不是。其他程序会在需要时请求特权提升。
考虑到根据我的经验,Windows 7+ 上的 UAC 提升似乎工作得非常好,即使在边缘情况下,我感到非常惊讶的是,似乎不存在修复此问题的综合方法。
UAC 提升是 Windows GUI 相当于 linux/freedesktop 上的 sudo 或 policykit。
在 Windows 下,您也无法判断某个程序是否需要管理员权限,除非它提出请求。
不过,Windows 图形外壳有一种方法可以将可执行文件的链接标记为“以不同用户身份运行”。但这并不等同于说可以发现可执行文件需要特权提升。