圖形介面如何暫時取得最高權限(sudo) - Linux

Table of Contents

※ 引述《stonys (蝶戀影)》之銘言:
: 大家好
: 小弟雖然會sudo指令操作
: 也會一點VI編輯器操作
: 不過有時候想寫一些程式(php之類)的話,還是覺得用GUI的編輯器比較方便
: 可是常常要存檔時會遇到權限問題(登入帳號已經是管理員了)
: 此時只好先存在一般路徑,再用終端機下sudo cp的指令複製過去
: 想請問一下如果在圖形介面裡,如何取得sudo操作權限呢?
: 目前常用的的redhat Enterprise 7 & Ubuntu 18.04
: 謝謝!

因為之前查 wine 相關的 FAQ 瞄到:
https://wiki.winehq.org/FAQ#Is_Wine_malware-compatible.3F

所以就剛好有了
用其他使用者權限(非 root)跑跑看 wine
的想法,雖然不知道效果如何

於是參考原文底下推文的討論,搭配 arch wiki 參考整理一些使用上的心得

首先剛開始在查時常看到:
: → : 在你的指令前加上gksu
類似的方法,但後來發現一些比較新的發行版似乎已經不用這個指令了

所以就使用了需要安裝 polkit 套件(有些發行版已經裝好了)的 pkexec 指令

大概步驟如下:


1. 在自己帳號的桌面開終端機輸入:

~$ xhost +

應該會出現: access control disabled, clients can connect from any host 的訊息


2. 確認要用的程式被 polkit 允許

參考: https://wiki.archlinux.org/index.php/Polkit#Actions

到 /usr/share/polkit-1/ 底下的 actions 或 rules.d 確認
自己要用的指令有沒有被 polkit 允許

沒有的話可以參考 wiki 裡面給的格式修改增加你要的指令


3. 確認自己的 $DISPLAY 變數

~$ echo $DISPLAY

應該會顯示等資訊
> ---
:0
> ---


4. pkexec 執行程式


pkexec --user <切過去的帳號> env DISPLAY=:0 <你要執行的指令>

例如想要用 gedit 編輯由 www-data 持有的 /var/www/html/index.html

就可以:

~$ pkexec --user www-data env DISPLAY=:0 gedit /var/www/html/index.html

或是我想要用 winewine 這個使用者來跑 wine 裡面的 IE

~$ pkexec --user winewine env DISPLAY=:0 wine iexplore

即可

==

至於相關環境變數要怎麼設定

目前想法是就一直加 env 變數=變數內容 像是:
~$ pkexec --user winewine env DISPLAY=:0 env WINEARCH=win32 wine winecfg

則是還不太確定,之後有需要再測試看看或看有沒有相關資料討論

也或許有其他比較easy的方法

但總之在這邊分享自己經驗以供參考

--
Paramore - Franklin

And when we get home, I know we won't be home at all
This place we live, it is not where we belong
And I miss who we were in the town that we could call our own
Going back to get away after everything has changed

--

All Comments

Bennie avatarBennie2019-04-15
在Windows做完後用SSH丟去Linux覆蓋
Lauren avatarLauren2019-04-20
env 可以一次加多個環境變數 env a=b c=d ls
Isla avatarIsla2019-04-24
另外換使用者不是 sudo -u username 就可以了嗎?
Kristin avatarKristin2019-04-27
我都用 sudo gedit /path/to/file (無誤
Heather avatarHeather2019-04-30
剛剛測試的確 pkexec 指令的確可以拿來當桌面啟動圖示
Caitlin avatarCaitlin2019-05-02
沒錯,如果啟動圖示裡指令換成 sudo 可能不太行
Carolina Franco avatarCarolina Franco2019-05-05
其他就是有在 Hacker News 討論區看到有人討論在跑
systemctl 相關指令時前面就不用再加 sudo 了,因為
Hedwig avatarHedwig2019-05-08
polkit 會幫你要權限這樣的說法
Suhail Hany avatarSuhail Hany2019-05-09
polkit幫你要的話會跳出視窗 sudo還是比較方便
Todd Johnson avatarTodd Johnson2019-05-11
如果是沒有GUI可以用的話(例:ssh連過去)也有CLI可以用
Isabella avatarIsabella2019-05-15
xhost + 我記得等於叫 Xorg 完全不控管連線的權限吧?
Kristin avatarKristin2019-05-17
如果只是要允許單一使用者可用 xhost +SI:localuser:root
這類的,只允許指定的使用者可連線
Ophelia avatarOphelia2019-05-22
感謝補充orz