Permissions TCL脚本:测试权限
如何检查脚本是否以root权限运行 我正在使用下面的代码,但是它使用linux命令来获取用户id,因此它在m$win上不起作用。是否有独立于平台的方法来处理此问题Permissions TCL脚本:测试权限,permissions,tcl,root,Permissions,Tcl,Root,如何检查脚本是否以root权限运行 我正在使用下面的代码,但是它使用linux命令来获取用户id,因此它在m$win上不起作用。是否有独立于平台的方法来处理此问题 if { [exec id -u] eq 0 } { //nice, let us destroy something! } else { //sorry. you are not root } 在perl中,您可以编写以下代码来获取脚本运行的用户名,如下所示(独立于操作系统) 打印“当前用户名为”。(getpwui
if { [exec id -u] eq 0 } {
//nice, let us destroy something!
} else {
//sorry. you are not root
}
在perl中,您可以编写以下代码来获取脚本运行的用户名,如下所示(独立于操作系统)
打印“当前用户名为”。(getpwuid($在perl中,您可以编写以下代码来获取脚本运行的用户名,如下所示(独立于操作系统)
print“当前用户名为”。(GetpUID($Windows没有root权限。
也许系统帐户或Administrators组的成员就是您想要的
据我所知,没有已知的独立于平台的方法
我建议针对不同的操作系统进行分支
- 在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"
}
这需要一个很棒的windows软件包。
Administrators的SID是硬编码的,因为它在每个系统上都相同,而Administrators组的名称则不同(在我的系统上是“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,但我不确定
别作恶。Windows没有根权限。
也许系统帐户或Administrators组的成员就是您想要的
据我所知,没有已知的独立于平台的方法
我建议针对不同的操作系统进行分支
- 在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"
}
这需要一个很棒的windows软件包。
Administrators的SID是硬编码的,因为它在每个系统上都相同,而Administrators组的名称则不同(在我的系统上是“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:别作恶。我确定你不是一个数字为什么你需要管理员/根访问权限?我不知道任何需要管理员访问权限的平台无关的东西。在portI上听我确定你不是一个数字为什么你需要管理员/根访问权限?我不知道任何需要管理员访问权限的平台无关的东西。听portthx上的答案,但答案是肯定的使用perl不会更好。这只在管理员用户的uid为0时有效,我不知道windows、mac osx如何处理他们的uid。此外,我必须安装perl--thx以获得答案,但使用perl也不会更好。这只在管理员用户的uid为0时有效,我不知道windows、mac osx如何处理他们的uid此外,我还必须安装perl-_-