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

Bou*_*rne 4 selinux apache-2.2

我正在 chroot jail 环境中使用 Apache 和 PHP 设置运行 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
Run Code Online (Sandbox Code Playgroud)

此外,SELinux 已启用,根据说明,您应该使用以下命令将 httpd_disable_trans 布尔值更改为 1

setsebool httpd_disable_trans 1
Run Code Online (Sandbox Code Playgroud)

但是,我在/selinux/booleans 下或系统中的任何地方都找不到这样的布尔。该命令产生以下错误:

Could not change active booleans: Invalid boolean
Run Code Online (Sandbox Code Playgroud)

我已经在网上搜索了为什么这个布尔值没有出现在系统中而没有结果。我不知道是 SELinux 不允许 httpd 启动还是权限问题。我已经仔细检查了权限,它们看起来很好。有什么建议?

谢谢你。

更新:我已经确定 SELinux 确实是导致这些错误的原因。将默认策略从 Enforcing 更改为 Permissive 确实允许 apache 正常启动。问题是,为什么系统中没有httpd_disable_trans?这将使我能够与 apache 一起维护 SELinux 的安全性。

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

更新 2:我认为相关的一些 Apache 配置行:

.....
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
....
Run Code Online (Sandbox Code Playgroud)

小智 5

我只是想知道什么问题。这是我们的环境:

带有最新 apache RPM 的 RedHat 5

当您查看错误日志时,它抱怨无法在“运行”目录下创建 httpd.pid。这没有意义,因为该目录具有用于读/写“httpd_sys_rw_content_t”的正确上下文(我必须从“/etc/selinux/targeted/contexts/customizable_types”中找到。

我意识到(经过数小时的搜索)在错误日志中它没有为您提供完整路径,但是当 apache 将其 chroot 目录添加到“/home/httpdjail”时。

在这个文件夹下,我找到了另一个“运行”目录。更改权限后:

chcon -Rv -t httpd_sys_content_rw_t /home/httpdjail/

有效!!^^

我猜如果您为“/chroot/httpd”授予正确的权限,它将解决您的问题。

希望这有帮助!