如何从 kde 快捷方式命令运行 sudo 命令?

如何从 kde 快捷方式命令运行 sudo 命令?

在 KDE 设置中,您可以指定快捷方式来执行任意命令。

要将命令分配给 KDE 中的快捷方式,您可以执行以下操作。在System Settings-> Shortcuts->中Custom Shortcuts,右键单击,选择New-> Global Shortcut-> Command/URL。转到Action选项卡并填写命令。并在Trigger选项卡中分配实际的快捷方式。这种机制对于非 sudo 命令正常工作。

在此输入图像描述

但不幸的是,当我使用需要 root 权限的命令时(假设sudo systemctl start something),它只是没有执行。

有没有办法绕过这个限制?我希望能够触发需要评估权限的操作。

答案1

一种解决方案是使用由 root 拥有并具有 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

在设置中的 Command/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

相关内容