![权限被拒绝:无法在 Apache 中创建 /var/run/httpd.pid](https://linux22.com/image/556492/%E6%9D%83%E9%99%90%E8%A2%AB%E6%8B%92%E7%BB%9D%EF%BC%9A%E6%97%A0%E6%B3%95%E5%9C%A8%20Apache%20%E4%B8%AD%E5%88%9B%E5%BB%BA%20%2Fvar%2Frun%2Fhttpd.pid.png)
我正在 chroot jail 环境中设置运行 RedHat Enterprise 6 的 Web 服务器,其中包含 Apache 和 PHP。apache 的 chroot 目录是 /chroot/httpd。我遵循这例如,当我启动 Apache 时,我看到以下内容/var/log/httpd/错误日志。
[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/布尔值或系统中的任何地方。该命令会产生以下错误:
Could not change active booleans: Invalid boolean
我在网上搜索了为什么这个布尔值在系统中不存在,但没有结果。我不知道是 SELinux 不允许 httpd 启动还是权限问题。我仔细检查了权限,它们似乎没有问题。有什么建议吗?
谢谢。
更新:我已确定 SELinux 确实是导致这些错误的原因。将默认策略从强制改为宽容确实可以让 apache 正常启动。问题是,为什么系统中没有 httpd_disable_trans?这样我就可以同时维护 SELinux 和 apache 的安全性。
另外,顺便提一下,在 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
....
答案1
我刚刚弄清楚了什么问题。这是我们的环境:
RedHat 5 带有最新的 apache RPM
当您查看错误日志时,它会抱怨无法在“run”目录下创建 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”正确的权限它将解决你的问题。
希望这有帮助!
答案2
我不知道你的布尔值是否无效,但你可以通过检查它的日志来找到 SELinux 权限问题(尝试/var/log/audit/audit.log
)
我相信日志将显示 httpd/apache 使用的上下文/类型以及 SELinux 拒绝访问的任何文件。还请尝试ls -lZ
显示任何给定文件的上下文,并在您迷失方向尝试重新配置 SELinux 权限之前尝试 restorecon -R -F -v
(恢复上下文)。
针对 audit.log 冗长的问题,是的!但是,如果您正在寻找已知进程的一个特定文件,那就没那么糟糕了。Apache 的示例(httpd)未加载 /etc/主办方是:
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
还值得注意的是,我曾经遇到过在未编辑任何 SELinux 配置的情况下上下文失常的情况。例如,当通过 scp 上传文件时、在目录之间移动时以及在上面的例子中,我不知道,但 restorecon 修复了它。
您可以在 audit.log 中搜索“httpd”的任何迹象。希望这会有所帮助。
答案3
尝试这个:
# echo "httpd_disable_trans=1" > /etc/selinux/targeted/booleans
并重新启动 Apache 来查看发生的情况。
答案4
如果使用 MTA,例如 postfix,您可能想要保留您的 SElinux 设置:
httpd_can_sendmail=1
因此我建议这样做:
echo "httpd_disable_trans=1" >> /etc/selinux/targeted/modules/active/booleans.local