2011-04-28 56 views
5

我想将数据写入文件,但文件句柄应该以对特定用户的访问权限打开。如何打开Perl文件句柄以通过sudo(或另一个用户)写入数据

因此,下面的语句:

open (FH, "> $filename") or die "[email protected]\n"; 

将允许写入文件为特定的用户。

有没有一种方法可以在Perl脚本中执行此操作,而不需要整个脚本与sudo -u $username一起运行?

+1

那么要改变Effective UID'$>'你需要以root身份运行,你的脚本是运行setuid root还是root用户? – Doon 2011-04-28 19:34:48

回答

2

有两种确定的方法。堆叠器,你被邀请编辑这个答案来填补每个的缺点。

sudo运行该程序。你在程序中做的第一件事是打开你需要的文件,并保存手柄,然后立即之后drop the root privileges。任何进一步的处理必须以低特权进行。 Apache httpd的工作原理是这样的,它打开日志文件为root,但仍然以nobody或类似的方式运行。

如果你不喜欢这种方式,正常运行的程序,当你需要提升,创建新的进程,并有将其与配置sudosu -的用户身份运行,kdesu/gksu或诸如此类的东西。 CPAN客户端的工作原理就是这样,它可以像普通用户那样获取,解包,构建和测试一个模块,但在安装时需要调用sudo make install等。

+0

我不知道我是否可以打开使用'sudo'的可写文件句柄。我真的试图避免使用'sudo',除非我可以使该文件句柄对该用户可写。至于第二种选择,我需要将'sudo''程序传递给一个Perl哈希引用,不知何故,这似乎并不简单。这是否有助于这个问题更有意义? – 2011-04-28 21:47:33

0

daxim的建议的另一种选择是让脚本拥有特定用户并具有脚本权限,包括setuid和/或setgid位。

+0

......但是,请注意,这可能是一个长期更新/维护的王室痛苦,因为大部分(如果不是全部)* nices会在您每次编辑文件时清除suid/sgid位。 – 2011-04-29 08:52:09

相关问题