Selinux 阻止来自 php 的 crontab 命令

2024-04-28

我们的服务器上有 Fedora 25 和 apache。
我想要这样做,以便我们网站上的 php 脚本可以更改 crontab 设置。

我创建了以下测试 php 脚本:

<?php
system("echo '*/2 * * * * date > /var/www/logs/testlog.txt' | crontab - 2>&1");

但这没有用。我收到消息:

/var/spool/cron/#tmp.mh203-95.XXXXG0KrFF:权限被拒绝

我查看了输出sealert -a /var/log/audit/audit.log并发现:

SELinux 正在阻止 crontab 对目录 /var/spool/cron 进行写访问。

好的。听起来 apache 不允许写访问/var/spool/cron因为该目录没有httpd_sys_rw_content_t label。 所以我执行了命令:chcon -v -R -t httpd_sys_rw_content_t /var/spool/cron

我的 php 脚本开始工作。 crontab -l 命令给出了正常的输出。
但新的问题又出现了。 :( cron 任务没有执行。

在 /var/log/cron 中我看到了错误:

Mar 23 18:05:01 mh203-95 crond[1653]: (apache) Unauthorized SELinux context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 file_context=system_u:object_r:httpd_sys_rw_content_t:s0 (/var/spool/cron/apache)
Mar 23 18:05:01 mh203-95 crond[1653]: (apache) FAILED (loading cron table)

经过多次研究...我发现 /var/spool/cron 必须有user_cron_spool_t标签。所以我执行了:chcon -v -R -t user_cron_spool_t /var/spool/cron.

cron 任务开始工作。但我的 php 脚本又不能工作了。和一开始的问题一样。

sealert 建议使用以下命令:
ausearch -c 'crontab' --raw | ausearch -c 'crontab' --raw | audit2allow -M my-crontab
semodule -X 300 -i my-crontab.pp
但这没有帮助。

我缺少什么? 如何解决问题? 我可以以某种方式组合两个标签吗user_cron_spool_t and httpd_sys_rw_content_t for /var/spool/cron directory?


我已经解决了这个问题。

原因在于:sealert 在所有建议的命令中生成相同的政治名称 my-crontab。新政治覆盖了旧政治。
只需要稍微更改一下这个名称即可。

所以我执行了:

ausearch -c 'crontab' --raw | ausearch -c 'crontab' --raw | audit2allow -M my-crontab
semodule -X 300 -i my-crontab.pp

ausearch -c 'crontab' --raw | ausearch -c 'crontab' --raw | audit2allow -M my-crontab2
semodule -X 300 -i my-crontab2.pp

ausearch -c 'crontab' --raw | ausearch -c 'crontab' --raw | audit2allow -M my-crontab3
semodule -X 300 -i my-crontab3.pp
...

在每次 ausearch 之前......我执行:
echo -n "" > /var/log/audit/audit.log
我的 PHP 脚本。
sealert -a /var/log/audit/audit.log

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selinux 阻止来自 php 的 crontab 命令 的相关文章

  • PHP UTF-8 配置

    我正在使用 PHP 5 3 5 配置 Apache 2 2 17 服务器 我的目标是创建一个默认为内容类型的干净配置UTF 8 php ini default charset UTF 8 default mimetype applicati
  • 精简 PHP 和 GET 参数

    我使用 Slim PHP 作为 RESTful API 的框架 如何在 Slim PHP 中从 URL 获取 GET 参数 例如 如果我想使用以下内容 http api example com dataset schools zip 999
  • PHP if in_array 表示多个值

    我有一个由 3 到 12 个值之间的任意位置生成的数组 它根据帐户信息生成该数组 result ad gt user gt groups user username 我想检查这个数组是否有多个值 大约 4 或 5 个 如果其中有任何一个值
  • 通过 AJAX jquery 更改表格背景颜色?

    设想 当我的网页加载时 自动搜索单元格已由用户输入并且具有价值 如果已输入 表格背景颜色将为红色 否则为绿色 假设该表尚未输入 桌子背景绿色是这样的 和表的源代码 table width 1023 height 200 border 1 t
  • 上传非常大的文件(>5GB)

    我需要你的帮助 我想用 HTML JQuery 和 PHP 创建一个上传脚本 是否可以编写一个可以上传非常大的文件 gt 5 GB 的脚本 我已经尝试使用 FileReader FormData 和 Blobs 但即使使用这些 我也无法上传
  • 如果所有情况都是真正的 PHP,如何处理这些情况

    我想知道是否有办法继续完成所有三种情况 如果它们都是真的 但是使用break 因为作为一个例子 如果第一种情况是真的 第二种情况是假的 第三种情况也是假的 而且我没有使用break 无论如何它都会进行 将strtotime更改为2014年1
  • 如何在Wamp服务器中启用SSL?

    我尝试在网上搜索它 但我很困惑 我没有得到任何澄清 逐步教程 http blog facilelogin com 2008 07 enabling ssl on wamp html 从链接复制 在 WAMP 上启用 SSL 本分步指南介绍了
  • PDO dblib 未捕获警告

    我已经使用 realestateconz mssql bundle 和免费 TDS 成功使我的 symfony 应用程序连接到 MSSQL 数据库 我的问题是 当我尝试执行存储过程时 如果出现问题 该过程会引发异常 但 PDO 不会报告任何
  • Ubuntu 16.04 - Apache 2.4.18 - 请求 URI 太长

    我试图从 Google 图片搜索结果中保存图像 但是当我在查询字符串参数中发送图像的 src 时 会出现以下错误 Request URI Too Long The requested URL s length exceeds the cap
  • 安全转义表名/列名

    我在 php 中使用 PDO 因此无法使用准备好的语句转义表名或列名 以下是我自己实现它的万无一失的方法 tn str replace REQUEST tn column str replace REQUEST column sql SEL
  • PHP 计数器在 while 循环中递增

    我在一个 while 循环中增加计数器时遇到问题 基本上我只想在数据库中获取的两个图像链接之间交替 但我的计数器不会增加 我不确定为什么有人可以提供帮助 while row stmt gt fetch PDO FETCH ASSOC img
  • Facebook PHP API 登录时抛出异常

    我尝试使用 Facebook Graph API 登录并获取用户信息 我用来获取用户信息的代码以前可以工作 但今天我尝试使用 Facebook 登录 但 Facebook API 抛出此错误 未定义的偏移量 1 home vendor fa
  • 为什么 http://localhost/ 不使用 WAMP 加载任何内容?

    我最近尝试安装 WAMP 但发现没有页面加载 它还有一个橙色的 W 标志 如果这有什么意义的话 它确实说 托盘图标 WAMP服务器已上线尽管 我也做了一些研究 发现 Skype 可能会引起问题 所以我删除了使用端口 80 和 443 作为传
  • PHP 中的多行字符串文字

    考虑 xml l xml vv echo xml 这将回响vv 为什么以及如何为诸如此类的事情执行多行字符串文字简单XML https en wikipedia org wiki SimpleXML etc Well xml l vv Wo
  • 使用 PHP 和 jSON 从 MySQL 获取 UIImage

    我正在开发一个小型新闻阅读器 它通过对 URL 执行 POST 请求来从网站检索信息 响应是一个带有未读新闻的 JSON 对象 例如 应用程序上的最新新闻的时间戳为 2013 03 01 当用户刷新表时 它会发布 domain com ap
  • 正则表达式:如何表达没有下划线的 \w

    有没有简洁的表达方式 w but without 即 w 中包含的所有字符 除了 我问这个是因为我正在寻找最简洁的方式来表达域名验证 域名可以包含小写和大写字母 数字 句号和破折号 但不能包含下划线 w 包括以上所有内容 加上下划线 那么
  • 如何将事件插入为 - Out Office

    我目前正在使用 Google Calendar API 并尝试在我的谷歌日历中插入新的 外出 事件 我使用以下代码插入事件 client getClient service new Google Service Calendar clien
  • 如何在刀片模板中通过引用 @include 来传递变量?

    在 Laravel 4 2 设置中 我在模板中有一个变量 我希望在多个包含之间共享该变量 主刀 This is the variable include header lt in header blade I often use tabin
  • 我在 apache 中使用乘客 for Rails 时收到 403 错误

    我已经安装了所需的工具 并遵循了几个教程 试图让乘客做出回应 我可以访问公共文件夹 public 500 html 或 422 hml 中的静态文件 昨天我通过虚拟主机进入 发现一些乘客错误 但一段时间后 托管重新启动了服务 从那时起我就无
  • mod_rewrite 有例外

    为了将我的服务器上的每个请求重定向到我使用的安全连接 RewriteCond SERVER PORT 80 RewriteRule https mywebsite com 1 R L 效果完美 但是我需要两条路径不被重定向 说我什么时候访问

随机推荐