如何通过sudo(或作为另一个用户)打开Perl文件句柄来写入数据
我想将数据写入文件,但文件句柄应以特定用户的访问权限打开 因此,以下声明:如何通过sudo(或作为另一个用户)打开Perl文件句柄来写入数据,perl,permissions,posix,sudo,filehandle,Perl,Permissions,Posix,Sudo,Filehandle,我想将数据写入文件,但文件句柄应以特定用户的访问权限打开 因此,以下声明: open (FH, "> $filename") or die "$@\n"; 将允许以该特定用户的身份写入文件 有没有一种方法可以在Perl脚本中实现这一点,而不必使用sudo-u$username运行整个脚本?有两种方法。Stackers,请您编辑此答案,以填写每个答案的缺点 使用sudo运行程序。在程序中,您要做的第一件事是打开所需的文件并保留句柄,然后立即打开。任何进一步的处理都必须以低权限进行。apac
open (FH, "> $filename") or die "$@\n";
将允许以该特定用户的身份写入文件
有没有一种方法可以在Perl脚本中实现这一点,而不必使用
sudo-u$username运行整个脚本?有两种方法。Stackers,请您编辑此答案,以填写每个答案的缺点
使用sudo
运行程序。在程序中,您要做的第一件事是打开所需的文件并保留句柄,然后立即打开。任何进一步的处理都必须以低权限进行。apachehttpd的工作原理是这样的,它以root
的身份打开日志文件,但继续以nobody
或类似的身份运行
如果您不喜欢这种方式,请正常运行程序,当您需要提升时,创建一个新进程,并让它在用户配置的sudo
、su-
、kdesu
/gksu
或诸如此类的情况下运行。CPAN客户端是这样工作的,它以普通用户的身份获取、解包、构建和测试模块,但是在安装时调用sudo make install
等。daxim建议的替代方法是让脚本由特定用户拥有,并且脚本权限包括setuid和/或setgid位。要更改有效UID$>
您需要以root用户身份运行,您的脚本运行的是setuid root还是root用户?我不知道是否可以打开使用sudo
的可写文件句柄。我真的试图避免sudo
,除非我可以使该文件句柄为该用户可写。至于第二个选项,我需要向sudo程序传递一个Perl哈希引用,这似乎并不简单。这是否有助于问题变得更有意义?…但是,请注意,这可能是长期更新/维护的一大难题,因为每次编辑文件时,大多数(如果不是全部)*nices都会清除suid/sgid位。