我需要对一些 bash 脚本进行单元测试,我已经在 chroot 中设置了 debian squeeze。从命令行我可以使用 chroot /directory my-command,ou schroot -d / -u root my-command,但我需要从由 Apache(用户 www-data)运行的 PHPUnit 测试中运行这些命令。使用 schroot 时出现此错误
E:无控制终端 E:认证失败:认证失败
使用 sudo chroot 我有
sudo:没有 tty 存在并且没有指定 askpass 程序
比我的想法更好吗?
答案1
chroot
大多数脚本都以 root 身份运行。因此,您必须将脚本分成两部分,一个用于执行单元测试 (myapp-unit-test.sh),另一个以 root 身份运行 (myapp-unit-test-chroot.sh)。
在 /etc/sudoers 中添加:
www-data ALL=(ALL) NOPASSWD:/path/to/myapp-unit-test-chroot.sh
在 myapp-unit-test-chroot.sh 中执行以下操作:
chroot /new/root sudo -u test-user /path/to/myapp-unit-test.sh
通过这种方式,您将限制以 root 身份运行的部分。