TCL脚本:测试权限

NaN*_*NaN 0 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
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*uhn 5

Windows没有root权限.
也许SYSTEM帐户或Administrators组的成员是您想要的.

我不知道没有已知的平台独立方法.

我建议为不同的OS分支.

  • 在Windows上:要检查当前进程是否作为Administrators组的成员运行,您可以执行以下操作:

    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"
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这需要twapi,一个伟大的窗户包.
    管理员的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"
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这甚至可以用于OS/X,但我不确定.

PS:不要做坏事.