为别名设置单独的权限指示

为别名设置单独的权限指示

我正在尝试设置一个与 root 权限不同的别名,例如

www.restricted.com - 一位用户

www.restricted.com/alias - 另一位用户

这可能吗?

我在 httpd.conf 中一个单独的目录(不是子目录)中设置了别名,该别名有自己的<directory>条目和单独的身份验证设置。但是,我得到了尝试访问 /alias 时,这两个部分都需要输入密码。我不确定这是因为我的失误还是设计失误。

例子:

<VirtualHost *:443>
        ServerName www.restricted.com
        DocumentRoot /var/www/site/main/

        <Directory /var/www/site/main/>

                AuthUserFile /var/www/site/.htpasswd
                AuthGroupFile /dev/null
                AuthName "main site"
                AuthType Basic
                Require user joe
        </Directory>

        Alias /alias /var/www/site/subsite/
        <Directory /var/www/site/subsite/>

                AuthUserFile /var/www/site/.htpasswd
                AuthGroupFile /dev/null
                AuthName "subsite"
                AuthType Basic
                Require user admin 
        </Directory>
</VirtualHost>

由于虚拟主机根目录和别名位于服务器上的不同目录中,我认为<Directory>使用指令比更合适<Location>

答案1

使用Directory指令将权限应用于物理目录结构;这是为了防止无意的特权授予。

让它按照您希望的方式工作的方法是使用指令Location;这将仅在您使用指令指定的 http 虚拟路径上应用权限设置。

答案2

我更喜欢使用<Location>指令来限制对不同位置的访问。

您可以使用需要用户 ID指令仅允许特定用户访问。请参阅该链接中提供的示例。这是另一个示例,取自我自己的配置。

实际上,“AuthUserFile”可以在两个位置之间共享,因为 AuthUserFile 只处理身份验证,而不是授权

# This will allow access to / for 'user1'
<Location />
AuthName "Access allowed for user1"
AuthType Basic
AuthUserFile /etc/httpd/htpasswd.user1
Require user user1
</Location>

# This will allow access to /alias for 'user2'
Alias /alias/ /web/alias/
<Location /alias/>
AuthName "Access only allowed for user2"
AuthUserFile /etc/httpd/htpasswd.user2
Require user user2
</Location>

相关内容