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