TL; DR:シェルスクリプトからグラフィカルSudo
を実行する新しい正しい方法は何ですか?
フレアリング:
Kubuntu 16.04から18.04にアップグレードしたばかりで、通常のトリアージを行っています。
kdesudo
は18.04で廃止されました(メンテナンスされていません)。
GUI I/Oのbashスクリプトでよく使用します。
一部の投稿ではkdesu
を使用すると言われています-これは奇妙に思えます。私はそれが効果的なユーザーまたはそのようなものを台無しにしたことを思い出すようです。
PATHにインストールされていません。
で見つけた
bigbird@sananda:~/pq$ ls -l /etc/alternatives/kdesu
rwxrwxrwx 1 root root 41 Aug 19 03:23 /etc/alternatives/kdesu ->
/usr/lib/kde4/libexec/kdesu-distrib/kdesu
まだkde4と書かれています。
Sudo -A ls
を試しました
そしてそれは言った
bigbird@sananda:~$ Sudo -A ls
Sudo: no askpass program specified, try setting Sudo_ASKPASS
私はksshaskpass
とssh-askpass
を見ていくつかのサークルに行きましたが、両方とも直接呼び出されることを意図していないと言います。
私はnotssh
で何でもします。
これは、通常のユーザーとしてほとんどすべてを実行し、ルートとして1つまたは2つのコマンドを実行するbashスクリプトに必要です。これらのスクリプトは、多くの場合、ターミナルウィンドウが開いていないデスクトップアイコンから起動されます(必要ないか、必要ありません。)yad
(zenity
やkdialog
など)を使用して、ユーザーとのインターフェース。
発見したように、Sudoで-Aオプションを使用できますが、Sudoにパスワードを提供するためのGUIメソッドが必要です。
パスワードをstdoutでSudoに戻す限り、このようなツールを自由に作成できます。私は誰かが非常に長い時間前に私に提案したシンプルなソリューションを使用します。これはkdialogを使用します。
そのため、次のような単純なkdialogスクリプトを作成します。
#!/bin/bash
kdialog --password "Password required to proceed"
今、あなたはこのようにSudoでこれを使用します
#!/bin/bash
export Sudo_ASKPASS=<path to your kdialog script>
Sudo -A foo
もちろん、kdeがない場合は、GUIパスワードプロバイダーに使用する任意の言語を使用できます。
編集:Sudo passwd_triesをバイパスする解決策
(必要に応じて)パスワードを一度だけ要求できるように、スクリプト内の変数でパスワードをキャプチャし、-Sスイッチを使用してその変数をSudoコマンドに直接渡すことができます。
これには、Sudo passwd_triesルールを無視するという利点がありますが、インタラクティブなパスワード入力が必要なため、パスワードはスクリプト内に保存されません。
PASSWD=$(kdialog --password "Sudo password required")
echo $PASSWD | Sudo -S foo
このように、スクリプトで複数のSudoコマンドが必要ない場合は、行で直接実行することもできます。
echo $(kdialog --password "Sudo password required") | Sudo -S foo
もちろん、すべてのスクリプトで標準のkdialogプロンプトが必要な場合は、ここでkdialogを使用する代わりに、前に説明した独自のkdialogスクリプトを使用できます。
私のPOVからSudoのpasswd_triesをバイパスする問題は、パスワードを間違えた場合、スクリプトがSudoコマンドの後のコマンドの処理を続行するため、Sudo昇格コマンドがスクリプトの成功にとって重要だった場合、問題が発生することです。
警告は、kdialog(またはzenityなどの代替)からのパスワードがstdoutに書き込まれることです。これは、前述のとおり、PIDのstdoutをキャプチャしたユーザーにはパスワードが表示されます。しかし、システムのハッカーはそれ以上のことをするでしょう。
Kdesudoだけでなく、gksu
も廃止されました。これらの変更は、少なくとも少し面倒です。 admin://
を使用していた場合、たとえばkdesudo gedit /etc/default/grub
プレフィックスを使用することです。代わりにgedit admin:///etc/default/grub
を使用します。 「新しく改善された」バージョンのために16.04をドロップします。
別の可能な解決策は、単純に 最初に端末でスクリプトを起動することです
ソース: https://www.linuxuprising.com/2018/04/gksu-removed-from-ubuntu-heres.html
私はちょうどいくつかの答えを見つけました ここ 。
その要点は次のとおりです。
現時点では、回避策はシステム上のkdesu
がインストールされている場所を見つけることです
でできること
ls -l /etc/alternatives/kdesu
kdesudo
のエイリアスを$HOME/.bashrc
に、または使用する場合は$HOME/.bash_aliases
に追加します。
エイリアスは
## Resurect kdesudo - this will probably fail eventually
alias kdesudo='/usr/lib/kde4/libexec/kdesu-distrib/kdesu'
上記の手順で見つけたパスにkdesu
へのパスを調整してください。
これは、KDEの一部のプログラムでは機能しません。
KDE開発者は、すでにKateに対して行っているように、他のアプリケーションに対して一時的に昇格した特権を許可するために、polkitルートに取り組んでいます。 -GreyGeek
そして、彼らがそうするとき、あなたはそれをもう必要としないので(それが正しく機能するなら)、彼らは直接昇格を無効にします。プログラムは、特権操作を行う必要があるときにパスワードを要求するだけです。これがスクリプトでどのように機能するかはまだわかりません。
pkexec
を試しましたか
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit