Acpid 操作在以 root 身份运行时有效,但在由 systemd 启动时无效

Acpid 操作在以 root 身份运行时有效,但在由 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

以 root 身份运行:

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实用程序)中获得一些帮助。如果有什么不起作用,请告诉我。

相关内容