pkexec를 사용하여 다른 사용자로 알림 전송을 실행하도록 허용하려면 어떻게 해야 합니까?

pkexec를 사용하여 다른 사용자로 알림 전송을 실행하도록 허용하려면 어떻게 해야 합니까?

이 질문의 연속으로 (polkit 0.106을 사용하여 알림을 보내는 방법은 무엇입니까?notify-send), 알림을 보내려는 사용자로 실행 해야 한다는 것을 알았습니다 .

그러나 현재 구성에서는 polkit이 사용자로 스크립트를 실행하고 알려진 사용자 비밀번호 없이는 polkitd이 작업을 수행할 수 없기 때문에 이 작업을 수행할 수 없습니다.su $user

notify-send따라서 다른 사용자로서 polkitd에서 실행할 수 있도록 새로운 polkit 작업을 만들어야 합니다 .

내 폴킷 규칙은 다음과 같습니다.

polkit.addRule(function(action, subject) {
     if (action.id == "org.freedesktop.consolekit.system.stop" ||
        action.id == "org.freedesktop.login1.power-off" ||
        action.id == "org.freedesktop.login1.power-off-multiple-sessions" || 
        action.id == "org.xfce.session.xfsm-shutdown-helper")  
     {

        try{    
            polkit.spawn(["/usr/bin/pendrive-reminder/check_pendrive.sh", subject.user]);        
            return polkit.Result.YES;

        }catch(error){
            polkit.spawn(["/usr/bin/pendrive-reminder/send_notify.sh", subject.user]);
           return polkit.Result.NO;
        }
    }
});

이 폴킷 규칙은 종료 메뉴에서 종료 옵션을 잠그고 다음 명령을 실행하는 notify-send스크립트 와 함께 알림을 표시해야 합니다 .send_notify.sh

#!/bin/bash

export DISPLAY=":0"

user=$1
pkexec --user $user notify-send  "Pendrive Reminder" "Shutdown lock enabled. Disconnect pendrive to enable shutdown" -u critical

exit 0

이 polkit 정책 파일을 추가해 보았습니다.

<policyconfig>
    <action id="org.freedesktop.notify-send">
    <description>Launch notify-send command</description>
    <defaults>
        <allow_any>yes</allow_any>
        <allow_inactive>yes</allow_inactive>
        <allow_active>yes</allow_active>
    </defaults>
   <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/notify-send</annotate>
   <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
   </action>
</policyconfig>

이 파일을 에 넣었어요/usr/share/polkit-1/actions/org.freedesktop.policykit.notify-send.policy

그런데 /usr/share/polkit-1/rules.d/정책 파일을 넣고 종료 버튼을 누른 후 종료 메뉴가 나타나는 데 시간이 오래 걸리고 알림도 나타나지 않았습니다. 종료 옵션이 올바르게 잠겨 있습니다.

내 스크립트에서 polkit 호출 알림을 보내려면 어떻게 해야 합니까?

답변1

몇 가지 테스트를 거쳐 다음과 같은 결과를 얻었습니다.

  • polkitd는 nologin 사용자입니다
  • 이 명령을 실행하고 polkitd 사용자로 스크립트를 실행하면 오류가 나타납니다.

    sudo su polkitd -s /bin/bash -c aux_scripts/send_notify.sh almu

    Error executing command as another user: Not authorized

    This incident has been reported.

그래서 polkitd 사용자는 제한된 계정이라 다른 사용자처럼 명령을 실행할 수 없다고 생각합니다.

결론적으로, 시스템 내부를 수정하지 않고는 이 작업을 수행하는 것이 불가능하다고 확신합니다. 내 응용 프로그램에서 이를 허용할 수 없으므로 polkit에서 다른 사용자로 명령을 시작할 수 없습니다.

관련 정보