Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Permissions TCL脚本:测试权限_Permissions_Tcl_Root - Fatal编程技术网

Permissions TCL脚本:测试权限

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

如何检查脚本是否以root权限运行

我正在使用下面的代码,但是它使用linux命令来获取用户id,因此它在m$win上不起作用。是否有独立于平台的方法来处理此问题

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-_-