【问题标题】:I cannot grant apache permissions to write to a file, what am I doing wrong?我无法授予 apache 写入文件的权限,我做错了什么?
【发布时间】:2013-12-08 01:24:33
【问题描述】:

我正在尝试向我的主文件夹中的文件授予 apache 权限,以便 php 页面可以将日志数据写入该文件。下面找到我在bash shell 中为完成此任务所做的工作,但我无法弄清楚为什么这不起作用:

[root@myserver logs]# mkdir apachelogs
[root@myserver logs]# touch apachelogs/log.log
[root@myserver logs]# chown -R apache:apache apachelogs
[root@myserver logs]# chown -R apache:apache apachelogs/log.log
[root@myserver logs]# chmod 770 apachelogs
[root@myserver logs]# su apache
bash-4.1$ cd apachelogs
bash: cd: apachelogs: Permission denied

所以我刚刚授予了apache所有权,读,写,执行权限,但是显然apache仍然没有访问该目录的权限,这在我的php脚本运行这行代码时得到了验证:

echo exec(whoami)."\n";
file_put_contents("/home/chilinut/logs/apachelog/log.log","test",FILE_APPEND);

输出是(并不奇怪)

apache
E_WARNING: file_put_contents(/home/chilinut/logs/apachelog/log.log): 
failed to open stream: Permission denied

我在这里缺少什么? 我不想给文件夹 777。我宁愿它有类似 644 的东西。我正在使用 CentOS release 6.4 (Final)

感谢阅读!

【问题讨论】:

    标签: php apache bash permissions centos


    【解决方案1】:

    老兄,

    这是一个明显的例子,文件 /home/chilinut/logs/apachelog/log.log 的父目录没有用户 apache 的权限。

    您还必须为用户 apache 授予父目录的写入、读取权限。在您的情况下尝试以下操作

    chown chilinut:apache /home/chilinut/
    chown -R chilinut:apache /home/chilinut/*
    chmod g+rw /home/chilinut/
    chmod -R g+rw /home/chilinut/*
    

    现在切换到 apache 用户并尝试执行它。没事的。我已经尝试了一个示例脚本,并且和你的脚本一样。

    enter code# cat test.sh 
    echo | exec whoami ;
    echo test >> /home/testleo/public_html/apachelogs/log.log;
    

    从我的角度来说工作得很好。

    【讨论】:

    • 让 apache 拥有您的主文件夹的权限是否符合规定?授予另一个用户(甚至是 apache)访问我的主文件夹的权限似乎是错误的。但是,如果这不违反某些惯例或某些不愉快的事情,我会很乐意在我回家时尝试一下。为老兄+1。
    • lol :) 伙计,实际上在正常情况下,apache 没有权限登录到 shell,因为它们的 shell 将是“/sbin/nologin”。参见 # grep apache /etc/passwd apache:x:48:48:Apache:/var/www:/sbin/nologin
    • 除此之外,授予其他用户对您的主文件夹“chilinut”的权限并不是一个健康的做法,因为该用户将拥有相同的权限来使用/修改主文件夹中的每个内容。在这种情况下,由于 apache 是系统用户,因此被黑客入侵的可能性要小得多。
    • 我运行了你的 chowns 和 chmods,但我的脚本仍然给了我同样的错误。我已经通过在我的公共 html 文件夹中拥有 200 权限的文件解决了这个问题,因此 apache 可以随意编写,而公众无法查看内容
    • 哦...很高兴听到您已经设法解决了您的问题,但我给出的回复是基于我在测试机器上所做的工作。
    【解决方案2】:

    如有疑问,请求助于宣扬良好做法的良好资源 :)。在这种情况下,我将使用 symfony 设置说明作为指导。

    $ APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\  -f1`
    $ sudo chmod +a "$APACHEUSER allow delete,write,append,file_inherit,directory_inherit" apachelogs/
    $ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" apachelogs/
    

    你可以在这里找到参考:http://symfony.com/doc/current/book/installation.html#configuration-and-setup

    是的,这些是获取 apache 写入 symfony 的 app/logs 和 app/cache 文件夹的正确权限的说明,但同样可以应用于任何文件夹:)。

    【讨论】:

    • 这似乎很好,但我不想修改 apaches 权限,这似乎是在做的。我是 root 用户,但不是系统管理员,所以我不想以任何方式实际修改 apache。
    【解决方案3】:

    您可能没有父目录的权限?

    【讨论】:

      【解决方案4】:

      ...让你的echo exec(whoami)."\n"; 工作做一个chmod 777 apachelogs -R 并从那里开始。我猜那是与 apache 不同的用户...

      【讨论】:

      • 虽然 chmod 777 是一个可怕的安全风险,但对 echo exec(whoami) 表示敬意
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 2011-07-18
      • 2015-12-09
      • 1970-01-01
      相关资源
      最近更新 更多