2009年9月17日 星期四

跨權執行程式的解決方案(Solutions to Overstepping Authority Users)

這篇文章的連結 2 則留言:
在一般使用者的電腦當中,經常會因為權限不足,而無法執行特定程式的狀況,一般來說這時候就會叫公司裡的網管(或有管理者權限的使用者)來幫你啟動,偶而為之或許還說能得過去,不過...若是你平日每天都得要執行的程式,總不可能讓網管天天來幫你「」程式吧?

(圖:以更新程式為例)

難道因為這原因,只好把管理者權限給使用者嗎?然後再跟他說:「因為你現在的權限較高,所以中毒或是有什麼狀況自己負責...」我想使用者應該也不想自己背黑鍋吧?

難道沒有別的解決方法了嗎?其實是有的,因為在作業系統中有一個指令能夠讓使用者暫時跨權來執行特定的程式,那就是 ─「Runas」,不過,它卻有些不太合理的設計,會讓管理者啼笑皆非...






如果你有實際操作過一次之後,你會發現當要透過它轉換成其它使用者(管理者)時,它會要求使用者輸入管理者的密碼,目前我尚未找出有什麼方式,能夠避開這個互動輸入密碼的過程(如果有人知道,歡迎留言或來信告知),看到這裡應該就知道我想要表達的是什麼了吧?

既然,最後還是得把具管理者權限的密碼告訴使用者,那跟直接按下右鍵,切換使用者權限來執行有什麼不同?或許這個程式的本意,是為了讓使用者的執行環境安全性高一點,但是這種做法對於系統權限的管理者來說,似乎有些不切實際,因為使用者很難不受到這管理者密碼的誘惑,尤其是在想安裝一些自己慣用的軟體時...



所以我就開始尋找能夠符合管理需求的程式,一方面能夠跨權執行特定程式,另一方面也不需讓使用者得知管理者的密碼,結果,真有類似的解決方案,那就是「CPAU」這隻小程式,它就能夠解決這部分的問題。


程式名稱:CPAU
軟體種類:Freeware
版本:1.11.0 - November 08, 2005
系統平台:Windows 2000、XP和2003
檔案大小:204 KB
官方網站:
http://www.joeware.net/freetools/tools/cpau/index.htm
檔案下載:
http://www.joeware.net/downloads/files/CPAU.zip

它的使用方式相當簡單,下載完畢並解壓縮之後,就可以直接透過文字介面(命令提示字元)來執行它,常用的參數有下列幾個,如果有其它需求的可以再參照說明文件的使用方式。

CPAU -u user [-p password] -ex "WhatToRun" [switches]
基本參數:
-u:user(使用者名稱)
-p:password(使用者密碼)
-ex:"WhatToRun"(需執行的程式,可用完整路徑)

常用的延伸參數:switches

-lwp:載入使用者設定,同「-profile」、「-localwithprofile」
-lwop:不載入使用者設定,同「-localwithoutprofile」
-enc:將設定檔進行加密為暫存工作檔。
-dec:將暫存工作檔進行解密。
-file:執行或創造暫存之工作檔。
-wait:等待執行的程序完成後,再回到原工作狀態。
-cwd:切換開始的工作目錄。
有了這些功能參數,原則上就可以滿足管理者的需求,執行需管理者權限的程式,執行的流程如下:

1.將執行程式所需的資料加密成暫存工作檔:(以ASUSUpdate為例)
cpau -u administrator -p test_!@# -ex "C:\Program Files\ASUS\ASUSUpdate\Update.exe" -enc -file temp.job(副檔名可加可不加)


雖然這邊可以看到暫存工作檔的加密資訊,不過沒有關係,你可以事先做好這個暫存檔案,再傳至使用者的電腦中即可使用。

2.將暫存工作檔解密,並且載入該使用者之設定檔:
cpau -dec -file temp.job -lwp


我們就可以從工作管理員中看出,該程式的執行者為管理者(administrator),而且使用者也無法得知管理者的密碼,因為該暫存執行檔(temp.job)中的內容已經過加密,無法直接開啟得知密碼為何,如此一來,就能夠解決這個跨權執行程式的安全性疑慮。

對於管理者來說,你可以把這整個過程再用批次檔(例:*.bat)來進行整合,位於工作暫存檔的內容,不只是能夠用單一的程式路徑,也能夠在裡面塞入特定作用的批次檔,如此一來,這隻小程式的功用更多,端看使用者要如何設計了。