Acpid ジョブは root として実行すると機能しますが、systemd で始まると効果はありません。

Acpid ジョブは root として実行すると機能しますが、systemd で始まると効果はありません。

Fedora 23でノートブックカバーが開いたときにカスタムタスクを追加したいです。 3つのファイルをインストールして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ユーザーとして:

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 AVCおよびaudit2allowユーティリティ)から支援を受けることができるはずです。問題が解決しない場合はお知らせください。

関連情報