Acpid 작업은 루트로 실행하면 작동하지만 systemd로 시작하면 아무런 효과가 없습니다.

Acpid 작업은 루트로 실행하면 작동하지만 systemd로 시작하면 아무런 효과가 없습니다.

Fedora 23에서 노트북 덮개가 열렸을 때 사용자 지정 작업을 추가하고 싶습니다. 세 가지 파일을 설치 acpid하고 만들었습니다.

/etc/acpi/events/lidconf

event=button/lid
action=/etc/acpi/actions/lid.sh "%e"

/etc/acpi/actions/lid.sh

#!/bin/bash
/home/user/Utility/lid.sh "$1"

/home/user/Utility/lid.sh

#!/bin/bash
DISPLAY=:0.0 su user -c "echo $1 >> /home/user/lid.txt"

달리고 있을 때는 잘 작동 # /usr/sbin/acpid -f하지만 달리고 있을 때는 전혀 작동하지 않습니다 # systemctl start acpid.

ps명령의 결과가 약간 다르다는 것을 알았습니다 .

루트 사용자로서:

root      3796  0.0  0.0   4344  1704 ?        Ss   22:24   0:00 /usr/sbin/acpid -f

시스템을 사용하십시오:

root      3918  0.0  0.0   4344  1780 pts/0    S+   22:25   0:00 /usr/sbin/acpid -f

시작한 후 systemd가 작동하지 않는 이유는 무엇입니까?

편집하다: 로깅을 활성화했는데 acpid다음과 같은 결과를 얻었습니다.

received input layer event "button/lid LID open"
rule from /etc/acpi/events/lidconf matched
executing action "/etc/acpi/actions/lid.sh "button/lid LID open""
action exited with status 126
1 total rule matched
completed input layer event "button/lid LID open"

편집 2:ps 어시스트-Z

체계:

system_u:system_r:apmd_t:s0     root      5177  0.1  0.0   4348  1756 ?        Ss   22:52   0:00 /usr/sbin/acpid -f -l -d

루트로 실행:

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 5341 0.0  0.0 4344 1808 pts/0 S+ 22:56   0:00 /usr/sbin/acpid -f -l -d

답변1

좋아요 SELinux 문제. 기존 서비스와 연결되는 새로운 콘텐츠를 생성할 때 서비스가 파일에 적절하게 액세스할 수 있는지 확인해야 합니다. 파일의 로그는 그렇지 않다는 것을 나타냅니다( unconfined_t.

executing action "/etc/acpi/actions/lid.sh "button/lid LID open""
action exited with status 126

위 명령 실행이 실패했습니다(종료 상태 126). 이는 소스 유형에 apmd_t파일을 실행할 수 있는 기능이 없음을 의미합니다(파일에 알 수 없는 태그가 있음). 다음과 같은 정책을 찾아보세요.

$ sesearch -A -s apmd_t -p execute /etc/selinux/targeted/policy/policy.*

우리는 선을 알 수 있습니다

allow apmd_t apmd_exec_t : file { ioctl read getattr lock execute execute_no_trans entrypoint open } 

허용되는 실행 apmd_exec_t유형. 실행 파일의 레이블을 해당 유형으로 변경하면 다음과 같이 진행됩니다.

# chcon -t apmd_exec_t /etc/acpi/actions/lid.sh

/home/user/lid.txt또한 태그가 지정되었거나 home_t다른 파일에 쓰는 데 문제가 있을 수 있습니다 . 귀하의 서비스는 다음과 같이 작성될 수 있습니다 apmd_tmp_t.

$ sesearch -A -s apmd_t -p write /etc/selinux/targeted/policy/policy.*
allow apmd_t apmd_tmp_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ; 

따라서 대상 파일의 컨텍스트를 다음과 같이 변경하면 apmd_tmp_t:

# chcon -t apmd_tmp_t /home/user/lid.txt

이 솔루션은 영구적이지 않습니다. 보다 올바른 접근 방식은 이러한 파일과 컨텍스트를 다루는 자체 정책을 정의하거나 기본 컨텍스트가 있는 위치로 파일을 이동하는 것입니다. 감사( ausearch -m AVCaudit2allow유틸리티) 로부터 도움을 받을 수 있어야 합니다 . 문제가 해결되지 않으면 알려 주시기 바랍니다.

관련 정보