kde 바로 가기 명령에서 sudo 명령을 실행하는 방법은 무엇입니까?

kde 바로 가기 명령에서 sudo 명령을 실행하는 방법은 무엇입니까?

KDE 설정에서 임의의 명령을 실행하는 단축키를 지정할 수 있습니다.

KDE에서 단축키에 명령을 할당하려면 다음을 수행하십시오. System Settings-> Shortcuts-> 에서 Custom Shortcuts마우스 오른쪽 버튼을 클릭하고 New-> Global Shortcut-> 를 선택합니다 Command/URL. Action탭 으로 이동하여 명령을 입력하세요. 그리고 Trigger탭에서 실제 단축키를 할당하세요. 이 메커니즘은 sudo가 아닌 명령에 대해 올바르게 작동합니다.

여기에 이미지 설명을 입력하세요.

하지만 불행하게도 루트 권한이 필요한 명령(가정)을 사용하면 sudo systemctl start something실행되지 않습니다.

이 제한을 우회할 수 있는 방법이 있나요? 평가할 권한이 필요한 작업을 트리거할 수 있기를 원합니다.

답변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

관련 정보