![](/img/trans.png)
[英]How to make a dialog window always on the front at my application level
[英]How do I make my user level application communicate to a root level application through pipes?
我有一個用戶級應用程序,需要通過寫入設備文件(需要root權限)來啟用/禁用設備。
這是我的界面的當前實現:
bool DeviceInterface::EnableDevice( bool isEnabled )
{
bool isSuccessful = false;
//enable device
if(isEnabled)
{
isSuccessful = (system("enableDevice.sh 1") == 0)? true : false;
}
//disable device
else
{
isSuccessful = (system("enableDevice.sh 0") == 0)? true : false;
}
return isSuccessful ;
}
我的腳本“enableDevice.sh”看起來像這樣,並在以root身份運行時運行正常:
echo $1 > /sys/devices/device_file
這會失敗,因為它需要root權限才能寫入設備文件。 我對“管道”,“叉子”和“執行器”都很陌生。 任何人都可以幫助我如何將“0”或“1”傳遞給腳本來啟用和禁用設備?
在enableDevice.sh上運行chmod,如下所示(作為root): -
#chmod 4755 enableDevice.sh
它被稱為設置setuid位。 使用此非root用戶將能夠運行此腳本,它將與所有者(在我們的情況下:root)權限一起運行。 因此,您的計划將有效。 請閱讀有關setuid的內容。 編輯:此外,在chmod之前,將enableDevice.sh的所有者和組作為root。 然后只有它會起作用。
為了使'enableDevice.sh'能夠執行此操作,它需要以root身份運行。 您可以將其標記為suid(chmod u + S enableDevice.sh)並將其標記為root。 請注意,您需要成為root用戶才能執行chown(在任何合理的unix系統上)。
當然,你總是可以為你的(好吧,程序)組或每個人打開寫權限,即chmod g + w,o + w / sys / devices / device_file
我真的不建議你這樣做。 如果我用'\\'一堆什么都沒有調用那個腳本> / dev / sda'它會覆蓋你系統驅動器的(可能的)根。
更好的想法是讓腳本檢查“$ 1”是什么,然后將0或1回顯到設備,如果兩者都不做則不做任何事情。 即不要信任用戶數據,尤其是在suid腳本中!
case "$1" in
enable) VALUE=1 ;;
disable) VALUE=0 ;;
*) exit ;;
esac
echo $VALUE > /sys/devices/device_file
更好的是,你有一個守護進程,你根據它在管道中得到的東西,根據它看到一個命名的管道(有效地)執行上面的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.