在 Zentyal Web 服务器上启用 UserDir 和密码保护 Web 目录 - 第 10 部分
在像 Zentyal PDC Active Directory 这样的多用户环境中,如果您希望允许每个用户拥有可以托管在自己家中的个人网页,那么运行网络服务器会很有帮助。
Zentyal 3.4 上的 Webserver 模块可以配置为激活用户公共 HTML 并借助一些 Linux BASH 脚本动态生成网页的一些内容并传输用户登录域时所需的信息。
此外,Apache 长期以来还附带了与安全交付内容相关的另一个功能,即通过使用 以最简单的形式之一来密码保护 Web 目录 .htaccess 文件并创建访问资源所需的用户列表,甚至保护网络内容免受搜索引擎爬虫的攻击。
要求
- Zentyal 安装指南
- 在 Zentyal 服务器中安装 Web 服务 (Apache)
第 1 步:启用用户公共 Html
1. 使用 https://zentyal_ip 登录您的 Zentyal PDC Web 管理工具。
2. 导航至 Web 服务器模块 -> 选中启用对等用户 public_html,点击更改按钮,然后保存更改。
3. 打开浏览器并在 URL 字段中输入以下内容:http://mydomain.com/~your_username。
如您所见,Apache 没有访问每个用户目录或索引用户主目录的权限。要纠正此行为,我们必须为 www-data 提供对 /home/$USER 目录的执行权限,并在用户路径下创建 public_html 文件夹。
为了简化一些事情,我们将编写一个 Linux Bash 脚本,该脚本创建 public_html 目录并为所有系统用户启用正确的权限,自动为所有用户生成 html 网页具有有效主目录和另一个脚本(这次是 Windows Bach 脚本)的用户,该脚本会将其链接到默认域 GPO,以便每个用户在使用来自 < 的域凭据登录后,都会收到其个人网页的提示b>Windows系统加入域。
4. 要完成此任务,请使用 Putty 使用系统安装时创建的 Zentyal 管理帐户登录 Zentyal 服务器,并使用您喜欢的文本编辑器创建第一个脚本。我们将其命名为“user-dir-creation”。
nano user-dir-creation
5. 在“user-dir-creation”脚本中添加以下内容。
#!/bin/bash
for i in `ls /home | grep -v samba| grep -v lost+found`; do
mkdir /home/$i/public_html
## Make world readable and executable, so that www-data can access it ##
chmod -R 755 /home/$i
chgrp -R www-data /home/$i/public_html/
## Next code should be on a single line ##
echo "<html><body style='background-color:#2DC612'><div align='center'><p><H1 style='color:#fff'>Welcome user $i on <a style='color:#fff' href='https://mydomain.com'>`hostname -f` </a></H1></p></div></body></html>" > /home/$i/public_html/index.html
## List /home/$USER permissions and public_html perm optional ##
echo "......................."
ls -all /home/$i
echo "......................"
ls -all /home/$i/public_html
done;
6. 保存脚本并使其可执行,然后以 root 权限运行它。
chmod +x user-dir-creation
sudo ./user-dir-creation
7. 再次打开浏览器并将其指向与上面相同的 URL(请参阅第 3 点)。
public_html 目录已创建,并为所有用户生成了一个 html 文件,因此现在他们都拥有一个个性化网页(这只是一个简单的测试页面,但想象一下您可以使用一些 PHP 做什么、MySQL 或 CGI 脚本)。
8. 如果Zentyal 3.4服务器也是主域控制器,我们可以让每个用户的网页在用户从加入域的Windows主机登录时在浏览器中自动打开。
要启用它,请登录到加入域的Windows系统,并使用记事本创建一个名为“public_html.bat”的Windows批处理脚本,其中包含以下内容。
explorer http://your_domain.tld/~%username%
注意:请注意“~”特殊字符和%username%,这是一个Windows环境变量。
9. 打开 Zentyal Web 管理工具 (https://zentyal_IP) 并转到域 -> 组策略对象 -> 默认域策略 -> GPO 编辑器。
10. 单击编辑,向下滚动到用户配置 –> 添加新登录脚本,浏览创建脚本的路径并点击< b>添加。
恭喜!现在,下次您登录域时,您的默认浏览器将打开与您的用户名相关的个性化网页。
步骤 2:密码保护 Web 目录
这部分需要对 Apache 模块进行更高级的配置,这无法通过 Zentyal Web Interface 实现,只能通过命令行并修改一些 Zentyal Apache 模块 模板来实现。
如果您尝试像通常在 Linux 服务器上那样直接修改 Apache 配置,则所有所做的配置都将丢失,因为 Zentyal 使用一些模板形式,这些模板形式会在重新引导或服务重新启动后重写每个服务配置文件。
要真正使用 Apache 身份验证保护 Web 文件夹并使更改永久化,需要修改“AllowOverride”指令,并且需要在 Apache Web 服务器上加载并启用“auth_basic”模块。
11. 要启用所有配置,首先需要使用 Zentyal Server 上的 Putty 使用 root 帐户通过命令行登录。
12. 通过发出以下命令启用“auth_basic”,然后重新启动 zentyal Web 服务。
a2enmod auth_basic
service zentyal webserver restart
13. 模块加载后,需要修改位于“/usr/share/zentyal/stubs/webserver/”路径中的 Zentyal Apache Vhost 模板并设置“允许覆盖“。
首先备份vhost.mas文件。
cp /usr/share/zentyal/stubs/webserver/vhost.mas /usr/share/zentyal/stubs/webserver/vhost.mas.bak
然后打开编辑器,导航到文件底部,并将“Allow Override”指令行上的“None”替换为“All”,如屏幕截图所示。
14. 完成编辑后,重新启动 Zentyal Webserver 模块以应用新的更改。
service zentyal webserver restart
AllowOverride 指令的主要目标是在每个路径的基础上使用与 Apache 根 (/etc/apache2/) 中使用的文件不同的其他文件动态更改 Apache 配置.htacess 文件。
15. 现在是时候创建一些允许浏览受密码保护的网页内容目录的用户了。首先,我们需要创建一个放置在子域路径之外的目录,其中将托管和保护 .htpasswd 文件。
mkdir /srv/www/htpass
chmod –R 750 /srv/www/htpass
chgrp –R www-data /srv/www/htpass
16. 现在是时候创建 .htpasswd 文件并使用 htpasswd 命令添加一些用户。创建第一个用户时,添加“–c”(创建)命令开关来创建文件并添加用户,然后输入并确认用户密码。
htpasswd –c /srv/www/htpass/.htpasswd first_user
htpasswd /srv/www/htpass/.htpasswd second_user
17. 现在,.htpasswd 文件已创建并使用 MD5 salt 算法进行加密,您可以根据需要添加访问 Web 文件夹内容所需的任意数量的用户。
18. 现在假设您想要保护 http://www.mydomain.com URL 免受其他用户以及在您的 htpasswd 文件上创建的用于访问子域的用户的影响。要启用此行为,请在 www.mydomain.com 系统路径上创建一个 .htaccess 文件并添加以下内容。
AuthType basic
AuthName “What ever message you want”
AuthBasicProvider file
AuthUserFile /path/to/.htpassd file created
Require user your_user1 user2 userN
另请确保 .htacces 文件受字可读保护。
nano /srv/www/www.mydomain.com/.htaccess
chmod 750 /srv/www/www.mydomain.com/.htaccess
chgrp www-data /srv/www/www.mydomain.com/.htaccess
恭喜!您现在已成功对网站上的 www.mydomain.com 子域进行密码保护,系统将提示用户输入访问网站内容的凭据。
此外,如果您想使用已创建的凭据保护在服务器上创建的其他域或子域,只需复制子域 Apache 路径上的 .htaccess 文件并确保 www-data 具有读取权限。
在 Apache Web Direcory 密码保护的帮助下,Zentyal Weberver 可以通过一些额外的安全层来伪造,以暴露在您的域上发布的敏感信息,但请注意,此方法仅保护目录,而不是传输文件和密码浏览器明文显示,因此请尝试使用 HTTPS 协议来保护用户凭据不被拦截。