2014-10-17 184 views
0

我在Ubuntu 14.04中工作我有一個我編譯的C++應用程序。我得到的可執行文件名稱是「程序」。那麼事情是,這個程序中使用OpenCV的插座,然後如果我嘗試在這樣的終端來執行它:以root身份自動運行我的可執行文件ubuntu

./program 

我得到這個錯誤:因爲我用插座出現

listener: socket: Operation not permitted 
setsockopt: Bad file descriptor 

此錯誤我需要運行我的應用程序的根,所以我tyoe這樣的:

sudo ./program 

這個請求我的密碼和程序工作propertly。

問題是我想在啓動我的Ubuntu時自動運行這個「程序」,但它不起作用。我有另一個應用程序的名稱是「相機」,它只使用opencv,沒有套接字,那麼我不需要以root身份運行。所以我把這個應用程序放在ubuntu的啓動應用程序中,並且「相機」應用程序從開始就沒有問題地開始。

所以我想我的問題是我需要以root身份運行我的「程序」,但我無法得到它。

有人可以幫助我嗎?

非常感謝

+0

您可以配置'/ etc/sudoers',或者通過'crontab'或者你的init腳本啓動你的程序。 – 2014-10-17 09:21:18

+1

您可以使用不需要root權限的端口進行偵聽。 – molbdnilo 2014-10-17 09:33:07

+0

謝謝我配置了/ etc/souders,並且我可以在沒有sudo的情況下運行它,但是我仍然收到套接字錯誤 – user3766585 2014-10-17 16:00:31

回答

1

您需要更改程序的根所有權:根源,所以它與它的所有者的權限,而不是誰調用它的用戶運行使用setuid權限。

sudo chown root:root ./program 
sudo chmod a+s ./program 

現在程序將以所有用戶的root權限運行。

希望有所幫助。

附註:作爲一個程序員,你應該努力確保與root權限運行的程序都是免費的安全漏洞,使他們不容易受到緩衝區溢出漏洞等

+0

「旁註」無法強調。如果你的程序有任何種類的緩衝區溢出,或者使用了一個庫(例如libc),那麼你的系統是擁有的。如果可以的話,重新設計你的程序,以便它可以作爲非root用戶運行(可能有特殊權限)。 – 2014-10-17 10:18:46

+0

嗨,感謝您的回答,事情是,當我運行程序apeear這個Gtk-WARNING **:這個過程當前正在運行setuid或setgid。 這不支持使用GTK +。您必須改爲創建幫助程序 。有關更多詳情,請參閱 – user3766585 2014-10-17 15:43:45

+0

爲什麼發生這種情況? – user3766585 2014-10-17 15:44:09

相關問題