在脚本的开发过程中,一些错误会保持“潜在”状态,直到脚本由其他用户运行为止。 (例如,脚本可以访问只有开发脚本的人员才能访问的文件。)
有没有办法以与脚本的“目标用户”相同的权限运行脚本至少会有?
(请注意问题的措辞。我特别避免写“具有最低权限的用户”,因为在某些情况下,“目标用户”可能会被期望拥有超过“最低权限”的权限。最容易想到的情况是“目标用户”预计属于特定组。)
当然,一种简单的解决方案是创建一个具有所需权限的虚拟用户,但该解决方案需要具有用户创建权限,但情况并非总是如此。我对即使无法创建虚拟用户也可以使用的解决方案感兴趣。
答案1
在虚拟机便宜的时代,无法创建测试用户的情况并不常见。
您可以在最小环境下运行程序:合理的默认值PATH
(通常/usr/local/bin:/usr/bin:/bin
)、HOME
以及程序需要的任何环境。设置HOME
为主目录的子目录或其他位置(例如在 下/tmp
),仅填充程序期望找到的文件。这已经是针对意外环境依赖性的首次测试。您可能希望将路径限制为/tmp/for-testing/bin
仅包含一些应该足够的程序,以测试对第三方软件的意外依赖。尽管如此,在某些发行版的默认安装中进行测试会更具结论性。
如果程序需要访问某些本地文件,您仍然可以通过使用来测试对其他文件的意外依赖性假根。创建一个目录,其中包含系统可能需要的所有内容(一直到链接器和标准库),加上程序及其数据文件,并将 fakechroot 放入其中(真正的 chroot 需要 root 权限)。
答案2
我对这个问题的理解是,您希望以特定用户身份运行脚本,因此它不是特定于开发用户帐户的开发。这几乎就是 sudo 的目的。只需创建一个 sudo 用户规则,如下所示:
devUser ALL=(targetUser) NOPASSWD: /path/to/script
然后“devUser”可以运行脚本,如下所示:
$ sudo -u targetUser /path/to/script
我更喜欢 sudo 而不是“su”,因为 NOPASSWD 会让开发更容易一些。