权限被拒绝:无法在Apache中创build/var/run/httpd.pid

我正在使用Apache和PHP在chroot jail环境中设置一个运行RedHat Enterprise 6的Web服务器。 Apache的chroot目录是/ chroot / httpd。 我跟着这个例子,当我去启动apache,我在/ var / log / httpd / error_log中看到以下内容。

[warn] ./mod_dnssd.c: No services found to register [Mon Jul 25 13:14:31 2011] [notice] core dump file size limit raised to 4294967295 bytes [Mon Jul 25 13:14:31 2011] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0 [Mon Jul 25 13:14:31 2011] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) [Mon Jul 25 13:14:31 2011] [notice] Digest: generating secret for digest authentication ... [Mon Jul 25 13:14:31 2011] [notice] Digest: done [Mon Jul 25 13:14:31 2011] [notice] mod_chroot: changed root to /chroot/httpd. [Mon Jul 25 13:14:31 2011] [error] (13)Permission denied: could not create /var/run/httpd.pid [Mon Jul 25 13:14:31 2011] [error] httpd: could not log pid to file /var/run/httpd.pid [Mon Jul 25 13:14:31 2011] [warn] ./mod_dnssd.c: No services found to register 

此外,SELinux已启用,根据指示,您应该使用命令将httpd_disable_trans布尔值的值更改为1

 setsebool httpd_disable_trans 1 

但是,我无法在系统中的/ selinux / booleans或任何位置find这样的布尔 。 该命令会产生以下错误:

 Could not change active booleans: Invalid boolean 

我在网上search了为什么这个布尔值不存在于系统中,没有结果。 我不知道是否SELinux不允许httpd启动,或者它是一个权限问题。 我有双重检查权限,他们似乎很好。 有什么build议么?

谢谢。

更新:我已经确定,SELinux确实是这些错误的原因。 将默认策略从Enforcing改为Permissive确实可以让apache启动。 问题是,为什么httpd_disable_trans在系统中不可用? 这将允许我保持与Apache一起的SELinux的安全性。

此外,在一个侧面说明,在一个chroot环境中使用apache,最好是将/ webroot内容托pipe在/ chroot中,还是从那里创build符号链接到它所在的位置? 我的目标是我需要启用存储在/ users下的用户目录中的Web内容。

更新2:我认为是相关的一些Apacheconfiguration行:

 ..... ServerRoot /etc/httpd LockFile /var/run/httpd.lock CoreDumpDirectory /var/run ScoreBoardFile /var/run/httpd.scoreboard PidFile /var/run/httpd.pid ChrootDir "/chroot/httpd" LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule auth_digest_module modules/mod_auth_digest.so LoadModule authn_file_module modules/mod_authn_file.so LoadModule authn_alias_module modules/mod_authn_alias.so LoadModule authn_anon_module modules/mod_authn_anon.so LoadModule authn_dbm_module modules/mod_authn_dbm.so LoadModule authn_default_module modules/mod_authn_default.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule authz_owner_module modules/mod_authz_owner.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so LoadModule authz_dbm_module modules/mod_authz_dbm.so LoadModule authz_default_module modules/mod_authz_default.so LoadModule ldap_module modules/mod_ldap.so LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule include_module modules/mod_include.so LoadModule log_config_module modules/mod_log_config.so LoadModule logio_module modules/mod_logio.so LoadModule env_module modules/mod_env.so LoadModule ext_filter_module modules/mod_ext_filter.so LoadModule mime_magic_module modules/mod_mime_magic.so LoadModule expires_module modules/mod_expires.so LoadModule deflate_module modules/mod_deflate.so LoadModule headers_module modules/mod_headers.so LoadModule usertrack_module modules/mod_usertrack.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule mime_module modules/mod_mime.so LoadModule dav_module modules/mod_dav.so LoadModule status_module modules/mod_status.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule info_module modules/mod_info.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule vhost_alias_module modules/mod_vhost_alias.so LoadModule negotiation_module modules/mod_negotiation.so LoadModule dir_module modules/mod_dir.so LoadModule actions_module modules/mod_actions.so LoadModule speling_module modules/mod_speling.so LoadModule userdir_module modules/mod_userdir.so LoadModule alias_module modules/mod_alias.so LoadModule substitute_module modules/mod_substitute.so LoadModule rewrite_module modules/mod_rewrite.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule cache_module modules/mod_cache.so LoadModule suexec_module modules/mod_suexec.so LoadModule disk_cache_module modules/mod_disk_cache.so LoadModule cgi_module modules/mod_cgi.so LoadModule version_module modules/mod_version.so LoadModule chroot_module /usr/lib/httpd/modules/mod_chroot.so Include conf.d/*.conf User apache Group apache .... 

我只是找出什么问题。 这是我们的环境:

RedHat 5与最新的Apache RPM

当你查看错误日志时,它抱怨在“运行”目录下无法创buildhttpd.pid。 这是没有意义的,因为该目录有正确的读写内容“httpd_sys_rw_content_t”(我必须从“/ etc / selinux / targeted / contexts / customizable_types”中find)。

我意识到(经过几个小时的search),在错误日志中并没有给你完整的path,但是当apache明星时,它将dro命名为“/ home / httpdjail”。

在这个文件夹下,我发现另一个“运行”目录。 将权限更改为:

chcon -Rv -t httpd_sys_content_rw_t / home / httpdjail /

有效!! ^^

我猜如果你给你的“/ chroot / httpd”权限,它将解决你的问题。

希望这个帮助!

我不知道你的无效布尔,但你可以通过检查它的日志(尝试/var/log/audit/audit.log )findSELinux权限问题。

我相信日志会显示httpd / apache使用的上下文/types以及SELinux拒绝访问的任何文件。 另外,请尝试ls -lZ以显示任何给定文件的上下文,然后在尝试重新configurationSELinux权限之前尝试restorecon -R -F -v (还原上下文)。


为了响应audit.log的冗长,是的! 但是,如果您正在寻找一个已知进程的特定文件,那就不是那么糟糕了。 Apache( httpd )不加载/ etc / hosts的一个例子是:

 type=AVC msg=audit(1311546944.235:1040): avc: denied { read } for pid=1396 comm="httpd" name="hosts" dev=dm-0 ino=262931 scontext=user_u:system_r:httpd_t:s0 tcontext=system_u:object_r:initrc_tmp_t:s0 tclass=file 

另外值得注意的是我已经经历了没有编辑任何SELinuxconfiguration的情况下出现怪异的情况。 例如,当通过scp上传文件时,当在目录之间移动时,在上面的例子中我不知道,但是restorecon修复了它。

您可以searchaudit.log以查找任何“httpd”符号。 希望这可以帮助。

尝试这个:

 # echo "httpd_disable_trans=1" > /etc/selinux/targeted/booleans 

并重新启动Apache以查看发生了什么。

如果使用MTA,例如postfix,你可能想保留你的SElinux设置:

 httpd_can_sendmail=1 

出于这个原因,我提供这样做:

 echo "httpd_disable_trans=1" >> /etc/selinux/targeted/modules/active/booleans.local