我想将数据写入文件,但应该使用特定用户的访问权限打开文件句柄。
因此,以下声明:
open (FH, "> $filename") or die "$@\n";
允许以特定用户身份写入文件。
有没有办法在Perl脚本中执行此操作,而不使用sudo -u $username
运行整个脚本?
答案 0 :(得分:2)
有两种确定的方法。堆叠器,您被邀请编辑此答案以填补每个答案的缺点。
使用sudo
运行程序。你在程序中做的第一件事就是打开你需要的文件并保留句柄,然后立即打开drop the root privileges。任何进一步处理必须以低权限进行。 Apache httpd就像这样,它以root
打开日志文件,但继续以nobody
或类似方式运行。
如果您不喜欢这种方式,请正常运行该程序,当您需要提升时,请创建一个新流程,并让用户配置为sudo
,su -
,{{ 1}} / kdesu
或诸如此类的东西。 CPAN客户端的工作方式与此类似,它以普通用户的身份获取,解包,构建和测试模块,但在安装时调用gksu
等。
答案 1 :(得分:0)
daxim的建议的替代方法是让脚本拥有特定用户并且脚本权限包括setuid和/或setgid位。