我正在开发一个Perl脚本,它在执行开始时检查root访问权限。
if ($< != 0) {
print "You need to be root";
die " ";
}
如何在Windows中评估$<
?我搜索谷歌和这里,但找不到答案。
我最接近的是perlvar。它在Windows中有一些特殊变量处理的描述,但不适用于这种情况。
$&LT;
这个过程的真正意义。 (助记符:如果你正在运行setuid,那就是你来自的uid。)你可以使用POSIX :: setuid()同时更改真实的uid和有效的uid。由于更改为$&lt;需要系统调用,检查$!更改后尝试检测任何可能的错误。
答案 0 :(得分:10)
在我的Win7框中,$<
和$>
始终返回0,无论我是以管理员,提升管理员还是普通用户身份运行。我认为Perl只是因为Windows上的用户ID不能简单地表示为整数,所以它甚至都没有尝试。
确实,这是source code(第1073行):
/* Ownership
*
* Just pretend that everyone is a superuser. NT will let us know if
* we don\'t really have permission to do something.
*/
#define ROOT_UID ((uid_t)0)
#define ROOT_GID ((gid_t)0)
uid_t
getuid(void)
{
return ROOT_UID;
}
uid_t
geteuid(void)
{
return ROOT_UID;
}
gid_t
getgid(void)
{
return ROOT_GID;
}
gid_t
getegid(void)
{
return ROOT_GID;
}
int
setuid(uid_t auid)
{
return (auid == ROOT_UID ? 0 : -1);
}
int
setgid(gid_t agid)
{
return (agid == ROOT_GID ? 0 : -1);
}