perl语言中有效和真实用户或组ID的作用是什么?

时间:2015-11-05 11:25:01

标签: perl file file-handling filehandle

在谈论文件处理的特殊情况时使用perl语言 文件测试= -r,-w,-x是有效用户的READ,WRITE和EXECUTE选项 文件测试= -R,-W,-X是真实用户的READ,WRITE和EXECUTE选项。 真实用户和有效用户的概念在perl中意味着什么?

2 个答案:

答案 0 :(得分:4)

这不是一个perl概念,它是一个Unix概念。它与setuid进程有关 - 特别是以root身份运行时的权限。

如果一个进程开始,那么它真正的UID仍然是你的。但如果它setuid给另一个用户(不必是root用户),它将拥有不同的权限集。

上面的测试允许您区分这两种情况 - 我可以作为普通用户编辑此文件吗?我可以作为特权用户这样做吗?

答案 1 :(得分:2)

就我在Perl和Ubuntu方面的经验而言,

  • 通常在Perl脚本中不能使用setuid文件位(有关详细信息,请参见Can i setuid for perl script?)。
  • 启动Perl脚本后,会将$ <(实际用户ID)以及$>(有效用户ID)设置为启动脚本的同一用户。
  • 如果此初始用户是root用户(即$ <和$>均为0),则可以通过设置$>更改有效用户ID,也可以稍后再更改有效用户ID。如果用户最初不是root用户,那么在尝试更改有效用户时,您将获得有关权限的例外。
  • 我没有找到以某种方式向根用户以外的其他用户授予“更改有效用户”权限的方法。

我上面写的内容适用于Ubuntu上的标准Perl安装。如果您以某种方式进行调整,例如您可以在Perl解释器上(而不是在脚本上)更改setuid位,因此在脚本启动后可以有一个不同的$ <,$>,但是通常您不想这样做。

在Windows上使用Perl:

  • 尝试修改$>时,总是出现“未实现”异常。