kdeショートカットコマンドでsudoコマンドを実行するには?

kdeショートカットコマンドでsudoコマンドを実行するには?

KDE設定で任意のコマンドを実行するショートカットを指定できます。

KDE でショートカットにコマンドを割り当てるには、次のようにします。System Settings-> Shortcuts-> をCustom Shortcuts右クリックしてNew-> Global Shortcut-> を選択しますCommand/URLActionタブに移動してコマンドを入力します。そして、Triggerタブで実際のショートカットを割り当てます。このメカニズムはsudo以外のコマンドに対して正しく機能します。

ここに画像の説明を入力してください。

しかし、残念ながら、root権限を必要とするコマンド(家庭)を使用するとsudo systemctl start something実行されません。

この制限を回避する方法はありますか?評価する権限が必要なアクションをトリガーできるようにしたいです。

答え1

1つの解決策は、ルートが所有し、SUIDビットを持つ実行可能ファイルを使用することです。

おそらく、独自のバイナリがないので、コマンドを使用したいと思います。 suid ビットを使用して bash スクリプトファイルを作成する場合、suid ビットは無視されます。setuidが機能しないのはなぜですか?

したがって、コマンドを実行するにはバイナリをコンパイルする必要があります。

ファイルの作成start_smth.c:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
    
int main()
{
    setuid(0);
    system("systemctl start something");
    return 0;
}

権限をコンパイルして設定します。

$ gcc start_smth.c -o start_smth
$ sudo chown root:root start_smth
$ sudo chmod 4755 start_smth

設定のコマンド/ URLフィールドにstart_smthバイナリパスを入力します(例:)/home/user/bin/start_smth

ここに画像の説明を入力してください。


このように準備する必要がある多くのコマンドがある場合は、次のスクリプトを使用できますcompile_and_set_permissions.sh

#!/bin/bash

FILE="$1"
FILE_NO_EXT="${FILE%.*}"

gcc "$FILE" -o "$FILE_NO_EXT"
sudo chown root:root "$FILE_NO_EXT"
sudo chmod 4755 "$FILE_NO_EXT"

次に、acファイルをパラメータとして渡します。

$ compile_and_set_permissions.sh stop_smth.c

答え2

使用端末エミュレータの名前(例:Konsole)を-eフラグとして指定し、コマンドを追加します。

konsole -e sudo systemctl start something

関連情報