0

スクリプトがルート権限で実行されているかどうかを確認するにはどうすればよいですか?

次のコードを使用していますが、Linux コマンドを使用してユーザー ID を取得しているため、m$ win では機能しません。この問題を処理するためのプラットフォームに依存しないアプローチはありますか?

if { [exec id -u] eq 0 } {
    //nice, let us destroy something!
} else {
    //sorry. you are not root
}
4

2 に答える 2

5

Windows には root 権限がありません。
おそらく、SYSTEM アカウントまたは Administrators グループのメンバーが必要です。

私が知っている既知のプラットフォームに依存しないアプローチはありません。

別のOSに分岐することをお勧めします。

  • 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 用の優れたパッケージであるtwapiが必要です。
    管理者の SID はすべてのシステムで同じであるためハードコードされていますが、管理者グループの名前はそうではありません (私のシステムでは "Administratoren" です)。

    Windows Vista 以降では、このグループのメンバーの管理者グループ SID (S-1-5-32-544) をリストする UAC があるため、グループが有効になっているかどうかを確認する必要がありますが、use_for_deny_only フラグが設定されています。(「管理者として実行」で起動した場合のみ、このグループが有効になります。)

  • Unix/Linux では、TclX を使用することをお勧めします。

    ここでは簡単です:

    package require TclX
    if {[id userid]} {
         puts "Not root"
    } else {
         puts "root"
    }
    

    これは OS/X でも動作する可能性がありますが、よくわかりません。

PS: 悪気はありません。

于 2013-08-08T09:40:04.307 に答える
0

perlでは、次のように記述して、スクリプトが実行されているユーザー名を次のように取得できます(OSに依存しません)

print "Current username is " . (getpwuid($<))[0] . "\n";

ただし、TCLについてはよくわかりませんが 、tclでgetpwnam/getpwuidなどを実行する方法は こちらとhttp://wiki.tcl.tk/1649で見ることができます

于 2013-08-08T09:25:46.280 に答える