如何通过sudo(或作为另一个用户)打开Perl文件句柄以写入数据

5
我希望写入数据到文件中,但是文件句柄应该使用特定用户的访问权限打开。
因此,执行以下语句:
open (FH, "> $filename") or die "$@\n";

可以允许以特定用户身份写入文件。

在Perl脚本中是否有一种方法可以实现这一点,而无需使用sudo -u $username运行整个脚本?


1
要更改有效UID $>,您需要以root身份运行,您的脚本是作为setuid root或root用户运行的吗? - Doon
2个回答

2

有两种已经确定的方法。堆栈用户,您可以编辑此答案以填写每个缺点。

使用sudo运行程序。在程序中,您需要打开所需的文件并保留句柄,然后立即放弃root权限。任何进一步的处理都必须以低权限进行。Apache httpd就是这样工作的,它以root身份打开日志文件,但继续以nobody或类似身份运行。

如果您不喜欢这种方式,请正常运行程序,并在需要提升权限时创建一个新进程,并让其使用用户配置的sudosu -kdesu/gksu或其他方式运行。CPAN客户端就是这样工作的,它作为普通用户获取、解压、构建和测试模块,但在安装时调用sudo make install等。


我不知道是否可以打开一个使用sudo的可写文件句柄。我真的想避免使用sudo,除非我可以使该文件句柄对该用户可写。至于第二个选项,我需要以某种方式传递一个Perl哈希引用给sudo程序,这似乎并不简单。这有助于让问题更容易理解吗? - Alex Reynolds

0

除了daxim的建议之外,另一种选择是将脚本归属于特定用户,并将脚本权限包括setuid和/或setgid位。


请注意,这可能会在长期更新/维护时带来很大的麻烦,因为大多数(如果不是全部)*nix系统每次编辑文件时都会清除suid / sgid位。 - Dave Sherohman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接