如何检查脚本是否以 root 权限运行?
我正在使用以下代码,但它使用 linux 命令来获取用户 ID,因此它不适用于 m$ win。是否有独立于平台的方法来处理这个问题?
if { [exec id -u] eq 0 } {
//nice, let us destroy something!
} else {
//sorry. you are not root
}
如何检查脚本是否以 root 权限运行?
我正在使用以下代码,但它使用 linux 命令来获取用户 ID,因此它不适用于 m$ win。是否有独立于平台的方法来处理这个问题?
if { [exec id -u] eq 0 } {
//nice, let us destroy something!
} else {
//sorry. you are not root
}
Windows 没有 root 权限。
也许 SYSTEM 帐户或管理员组的成员是您想要的。
据我所知,没有已知的独立于平台的方法。
我建议为不同的操作系统分支。
在 Windows 上:要检查当前进程是否作为管理员组的成员运行,您可以执行以下操作:
package require twapi
set token [twapi::open_process_token]
set groups [twapi::get_token_groups_and_attrs $token]
twapi::close_token $token
if {[dict exists $groups S-1-5-32-544] && {enabled} in [dict get $groups S-1-5-32-544]} {
puts "I run as administrator"
} else {
puts "No admin rights"
}
这需要twapi,一个很棒的 windows 包。
管理员的 SID 是硬编码的,因为它在每个系统上都是相同的,而管理员组的名称不是(在我的系统上是“Administratoren”)。
您应该检查该组是否已启用,因为从 Windows Vista 开始有 UAC,它将列出该组成员的管理员组 SID (S-1-5-32-544),但带有 use_for_deny_only 标志。(仅当使用“以管理员身份运行”调用时,才会启用该组。)
在 Unix/Linux 上,我建议使用 TclX。
这里很简单:
package require TclX
if {[id userid]} {
puts "Not root"
} else {
puts "root"
}
这甚至可能适用于 OS/X,但我不确定。
PS:不要作恶。
在 perl 中,您可以编写以下内容以获取运行脚本的用户名,如下所示(独立于操作系统)
print "Current username is " . (getpwuid($<))[0] . "\n";
我不知道关于 TCL 的 muhc - 但你可以在这里查看 如何在 tcl 和这里http://wiki.tcl.tk/1649执行 getpwnam/getpwuid 等