簡體   English   中英

如何從終端打開xterm窗口並從xterm在后台運行命令?

[英]How to Open xterm window from a terminal and run a command in background from xterm?

我的應用程序嘗試執行roots命令“ sudo ifup eth0”和“ sudo ifdown eth0”。 但是它返回了一個錯誤“ sudo:對不起,您必須有一個tty才能運行sudo ”。 因此,它需要一個tty來執行sudo命令。 因此,我嘗試通過打開tty會話來執行命令

gnome-terminal --command="sudo ifdown eth0" &
xterm -e "sudo ifdown eth0" &

然后工作正常。 但是我無法從新創建的gnome-terminal或xterm發送命令。 即,如果我在新創建的gnome或xterm窗口執行命令之前關閉它們,則這些命令將立即終止。

您能否提出建議,如何禁止用戶關閉窗口或如何使窗口對用戶不可見?

注意:您可以通過使用system-config-network命令而不是ifdown和ifup來測試

我建議不要使用xterm或gnome-terminal為sudo提供一個終端,但是要處理“抱歉,您必須具有tty才能運行sudo”消息。

sudoers文件中有一個requiretty選項,它使sudo demand成為終端。 如果未使用!requiretty設置此選項,並且使用NOPASSWD選項執行了命令,則sudo應該運行,而無需打開新的終端窗口。 在此serverfault 帖子中有更多詳細信息。

這就是在cron腳本中使用sudo的方式。

由於requiretty選項在不但在cron腳本中使用sudo的環境中還提供了額外的安全性,還使遠程用戶可以使用提升的特權來發出命令,因此可以限制!requiretty的操作。

   User_Alias LOCAL_USERS = john, mary
   Cmnd_Alias NETWORK_SCRIPTS = /sbin/ifup, /sbin/ifdown
   Defaults!NETWORK_SCRIPTS     !requiretty
   LOCAL_USERS ALL = NOPASSWD: NETWORK_SCRIPTS

如果您在X會話中運行代碼,則可以使用gksudo代替sudo

gksudo -m "Your message" /command/to/run

它會使用漂亮的GUI界面提示用戶輸入密碼(如果需要)。 無需xterm或gnome-terminal。

比起允許在不使用任何密碼的情況下運行特定命令的情況下,效果將更為安全,並且解決方案將與用戶習慣一致。

在此處輸入圖片說明

通常,sudo或su需要提示輸入密碼,否則程序可以在沒有用戶干預的情況下提升其特權。 如果您的應用程序出於某種目的需要提升,則需要使用xterm或類似的東西。 雖然很難返回返回代碼(konsole可能需要--nofork和gnome-terminal可能需要--disable-factory ,但是選項因版本而異),並且要在每個系統上正確安裝它並不容易。 大多數Unix和Linux發行版都提供xterm,但是一些舊的Fedora / RHEL / CentOS提供了不帶xterm的X,因此這是另一個需要考慮的依賴。

然后,由xterm -e sudo -- ...啟動的命令可以執行標准的雙叉和setsid。 用戶在xterm中輸入密碼后,密碼會立即消失,但是您的命令將在后台以提升的特權運行。 它可以使用套接字或fifo連接回原始程序以作為根協同進程運行。

如果要將現有應用程序包裝在雙叉和setsid中(例如, xterm -e sudo -- daemon system-config-networkxterm -e sudo -- bash -c "system-config-network & disown -a" xterm -e sudo -- daemon system-config-network bash-),則daemondisown命令或類似命令可能很有用xterm -e sudo -- bash -c "system-config-network & disown -a" )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM