我有一个需要使用.htaccess
文件保护的网站。
但在访问我的网站时,我收到权限被拒绝错误,忽略了正确的登录。 Apache服务器版本:Apache/2.2.3
.htaccess
文件 :
[root@server conf]# cat /home/molly/www/.htaccess
AuthName "Directory Auth for User Molly"
AuthType Basic
AuthUserFile /home/molly/.htpasswd
require user molly
权限:
[root@server conf]# ls -al /home/molly/www/.htaccess
-rwxr-xr-x 1 molly apache 116 Jan 13 18:12 /home/molly/www/.htaccess
[root@server conf]#
之前文件权限是644 htaccess
,查了一些解决方案后我把它改成了755,但没有用
同样,.htpasswd
文件的权限:
[root@server conf]# ls -al /home/molly/.htpasswd
-rwxr-xr-x 1 molly apache 46 Jan 13 18:58 /home/molly/.htpasswd
[root@server conf]#
错误日志文件:
[Wed Jan 14 11:59:29 2015] [error] [client 10.0.0.7] (13)Permission denied: Could not open password file: /home/molly/.htpasswd
[Wed Jan 14 11:59:29 2015] [error] [client 10.0.0.7] access to /~molly failed, reason: verification of user id 'molly' not configured
我也将用户目录权限更改为755,但没有用。
[root@server conf]# ls -ld /home/molly/
drwxr-xr-x 4 molly molly 4096 Jan 13 18:23 /home/molly/
[root@server conf]#
由于这个奇怪的 htpasswd 问题,我无法继续前进。
任何想法
我希望很多人可能都经历过这个问题。
答案1
(我发现这是一个老问题,但这可能对其他人有用,所以......)
如果您怀疑 SELinux 存在问题,通常有一种简单的方法可以修复它,而无需完全禁用 SELinux。
首先,确保包含 SELinux 策略文档的软件包已安装。在 RedHat/CentOS/OEL 中它被命名为selinux-policy-doc
.
然后,标准发行版中包含的每个系统服务都有一个手册页,其中描述了 SELinux 上下文标签以及该特定服务的其他必要详细信息。他们都被命名了<service name>_selinux
。
在这种情况下,命令将为man httpd_selinux
.
在BOOLEANS
手册页的 部分中,通常会有许多 SELinux 限制,可以根据需要轻松打开和关闭。最常见的需求可以通过根据需要调整适当的布尔值来满足。以下是一些示例httpd
:
如果你想允许 httpd 使用内置脚本(通常是 php),你必须打开
httpd_builtin_scripting
布尔值。默认启用。
setsebool -P httpd_builtin_scripting 1
如果要允许 httpd cgi 支持,则必须打开 httpd_enable_cgi 布尔值。默认启用。
setsebool -P httpd_enable_cgi 1
如果要允许 httpd 读取用户内容,则必须打开 httpd_read_user_content 布尔值。默认禁用。
setsebool -P httpd_read_user_content 1
如果要允许 httpd 读取主目录,则必须打开 httpd_enable_homedirs 布尔值。默认禁用。
setsebool -P httpd_enable_homedirs 1
如果要允许 httpd 访问 cifs 文件系统,则必须打开 httpd_use_cifs 布尔值。默认禁用。
setsebool -P httpd_use_cifs 1
如果要允许 httpd 访问 nfs 文件系统,则必须打开 httpd_use_nfs 布尔值。默认禁用。
setsebool -P httpd_use_nfs 1
还有更多的 SELinux 布尔值httpd
。
要允许httpd
访问用户的主目录,您至少需要httpd_read_user_content
.由于您的错误日志表明您可能正在使用 Apache 的UserDir
功能,因此您也需要httpd_enable_homedirs
。
另请参阅服务器故障上的这个问题。
默认情况下两者都是禁用的,因此您需要两个命令:
# setsebool -P httpd_read_user_content 1
# setsebool -P httpd_enable_homedirs 1
选项-P
告诉setsebool
它使设置持久化,因此不需要编辑任何进一步的 SELinux 配置文件。
答案2
要查看您的问题到底是什么,请尝试使用 777 权限,然后改回 644 或 444。如果使用 777 权限您遇到相同的错误,请尝试禁用 SELinux
/etc/selinux/config
SELINUX=disabled
如果再次不起作用尝试删除 .htpasswd,如果现在正常工作,则意味着问题出在 .htpasswd 中,例如规则或某些语法错误。