web-dev-qa-db-ja.com

kdesudoがなくなったので、kubuntu 18.04でbashでグラフィカルなSudoを実行するにはどうすればよいですか?

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

私はksshaskpassssh-askpassを見ていくつかのサークルに行きましたが、両方とも直接呼び出されることを意図していないと言います。

私はnotsshで何でもします。

これは、通常のユーザーとしてほとんどすべてを実行し、ルートとして1つまたは2つのコマンドを実行するbashスクリプトに必要です。これらのスクリプトは、多くの場合、ターミナルウィンドウが開いていないデスクトップアイコンから起動されます(必要ないか、必要ありません。)yadzenitykdialogなど)を使用して、ユーザーとのインターフェース。

4
Joe

発見したように、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をキャプチャしたユーザーにはパスワードが表示されます。しかし、システムのハッカーはそれ以上のことをするでしょう。

3
nobody special

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

0
Elder Geek

私はちょうどいくつかの答えを見つけました ここ

その要点は次のとおりです。

現時点では、回避策はシステム上の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

そして、彼らがそうするとき、あなたはそれをもう必要としないので(それが正しく機能するなら)、彼らは直接昇格を無効にします。プログラムは、特権操作を行う必要があるときにパスワードを要求するだけです。これがスクリプトでどのように機能するかはまだわかりません。

0
Joe

pkexecを試しましたか

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
0
papampi