.htpasswd权限问题

.htpasswd权限问题

我有一个需要使用.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 中,例如规则或某些语法错误。

相关内容