我知道这是一个常见的问题,但我还没有能够挑出我的具体用例的问题,所以请原谅我。
我有一个简单的PHP脚本send_id
,它只发送一个ID号,并将其保存到我的RHEL服务器上的TXT文件中,该服务器运行Apache 2.4.6和PHP 5.4。
错误消息:Warning: file_put_contents(/var/www/html/id.txt): failed to open stream: Permission denied in /var/www/html/send_id.php on line 6 '1' written to server
PHP脚本本身:
<?php
$id=$_GET['id'];
$stringData = "$id";
$file = file_put_contents('/var/www/html/id.txt', $stringData.PHP_EOL , FILE_APPEND |LOCK_EX);
echo "'$stringData' written to server";
?>
chmodding到777并没有做任何事情。另外,我检查了所有权,注意到id.txt文件在用户/组级别上都由root用户拥有,PHP在root级别上运行。
有人有什么建议吗?如果它有任何帮助,这似乎发生在一个yum update
之后
3条答案
按热度按时间vpfxa7rd1#
我通过在有问题的PHP脚本所在的目录上运行
chcon -Rt httpd_sys_content_rw_t
来解决这个问题。chcon
命令可更改文件的SELinux上下文。但是,使用chcon
命令所做的更改在文件系统重新标记或restorecon
命令的执行过程中并不持久。-Rt
用于更改目录的类型及其内容,httpd_sys_content_rw_t
用于给予apache写访问权限来源:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/sect-security-enhanced_linux-working_with_selinux-selinux_contexts_labeling_files
补充说明
Z开关将与大多数实用程序一起使用,以显示SELinux安全上下文
eeq64g8w2#
尝试将文件夹和文件的所有者更改为(
chown
)、“www-data”或“www-data:www-data”,看看是否会发生任何更改...wxclj1h53#
使用Apache的“DOCUMENT ROOT”中的相对文件路径来引用PHP中的文件。Apache的权限很重要,出于安全原因,它被编码为禁止访问DOCUMENT_ROOT之外的文件。(是的,即使您的路径在其中,Apache也会在看到路径以“/VAR”开头时被阻止。)
假设此PHP脚本与id.txt文件位于同一目录中,只需使用
或者如果txt文件位于子目录中
它不仅安全,而且打字时间也短得多。