Apache上传文件/tmp权限被拒绝

3
我有一个CentOS 7系统,已经安装了Apache,并将文档根目录更改为/home/morteza/development。一切正常,但当我想要上传文件时,会出现以下提示:
“move_uploaded_file(/home/morteza/development/news/data/news/54f04fb97482820150227023633online10-16px.png):在/home/morteza/development/news/core/assist.php的第110行打开流失败:权限被拒绝”
我已将Apache用户和组添加到/tmp和我的网站上传目录中。这是/tmp的getfacl结果:
file: tmp
owner: root
group: root
user::rwx
group::rwx
other::rwx 
default:user::rwx
default:group::rwx
default:group:apache:rwx
default:mask::rwx
default:other::rwx

对于/home/morteza/development/news/data也是一样,我想上传文件。

我在其他服务器上使用相同的PHP代码,可以正常工作。这里的问题是什么?

额外信息:以下是httpd的getsebool输出:

httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off
httpd_can_connect_ldap --> off
httpd_can_connect_mythtv --> off
httpd_can_connect_zabbix --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> off
httpd_dbus_sssd --> off
httpd_dontaudit_search_dirs --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_graceful_shutdown --> on
httpd_manage_ipa --> off
httpd_mod_auth_ntlm_winbind --> off
httpd_mod_auth_pam --> off
httpd_read_user_content --> on
httpd_run_stickshift --> off
httpd_serve_cobbler_files --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_sys_script_anon_write --> off
httpd_tmp_exec --> off
httpd_tty_comm --> off
httpd_unified --> off
httpd_use_cifs --> off
httpd_use_fusefs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off
httpd_use_openstack --> off
httpd_use_sasl --> off
httpd_verify_dns --> off

文件 /home/morteza/development/news/data/news/54f04fb97482820150227023633online10-16px.png 的权限是什么? - CT14.IT
这个文件是由 PHP 根据表单创建的。这个文件是 PHP 生成的临时文件。 - train_fox
你检查了selinux状态吗? - Rupesh
我进行了检查。我启用了它。我还执行了 setsebool -P httpd_read_user_content 1 命令。SeLinux 状态是强制执行。 - train_fox
3个回答

0

这是关于selinux的问题。我禁用了selinux,现在它可以工作了。但我不知道哪个配置是问题所在。目前我只是禁用了selinux,在重启后它就可以工作了。谢谢大家。


0

我遇到了同样的问题(用户apache无法在Centos 7上写入/tmp)。看起来PHP要么报告了错误的目录,要么有一种幕后重定向正在进行。实际文件被写入到:

/var/tmp/systemd-private-73473abd844a4c4382e2e87952f1eb3b-httpd.service-2SNEIV/

该目录的所有者是root(目录的字母数字部分对每个人可能都不同):

drwxrwxrwt 2 root root 6 Feb 22 20:58 tmp

我将所有者更改为apache:

sudo chown -R apache /var/tmp/

结果如下:

drwxrwxrwt 2 apache root 6 Feb 22 20:58 tmp

这是一种蛮力方法,我仍在努力解决它,但现在我可以通过PHP上传文件。


0

您需要为要上传文件到的目录赋予 PHP 读写权限。在基于 Linux 的系统中,通常该用户被称为 www-data。

您可以使用此 PHP 脚本来检查它。

<?php
    echo exec("whoami");
?>

然后像你为“apache”所做的那样,将此用户添加到“/tmp”目录。 - Lars Erik Storbukås
您可以为目录创建一个组,并通过以下方式将apache添加到该组中:useradd -G {group-name} username然后进行递归操作chown -R :group-name /tmp - Lars Erik Storbukås
chown命令用于更改目录所有者,但我不想更改/tmp的所有者。相反,我使用sefacl将apache用户和apache组添加为所有者。但是没有起作用。 - train_fox
你无法更改目录的所有者,只能更改拥有该目录的组。 - Lars Erik Storbukås

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接