尝试debian-9.13.0-amd64下apache和proftpd用openldap整合按组认证笔记之五:apache配置openldap组认证、h5ai、关闭PHP解析
感觉proftpd对openldap的支持已经有点过时了,2013年以后就再没更新了
https://github.com/proftpd/mod_ldap
居然还必须用posixGroup/gidNumber/memberUid的组合,配置为openldap组认证的文章在网上也特别难找。
而apache对openldap的支持要好的多,也是最简单的,相关文章一搜一大把,于是把这篇笔记放在前面
主要参考文章(下一篇proftpd配置openldap组认证也是参考这个法国网站的另一篇文章)
1、http://bouthors.fr/wiki/doku.php?id=en:linux:serveur_web:auth
这篇文章是apache 2.2的,在apache 2.4 上会有一些配置方法小变动
一、激活apache的mod_authnz_ldap模块,完成后需要重启apache2
root@mydebian210:~# a2enmod ldap authnz_ldap
Enabling module ldap.
Considering dependency ldap for authnz_ldap:
Module ldap already enabled
Enabling module authnz_ldap.
To activate the new configuration, you need to run:systemctl restart apache2
root@mydebian210:~# systemctl restart apache2
从终端输出可以看出stretch中的apache 2.4缺省已可用mod_ldap模块,实际激活的mod_authnz_ldap模块才是用于认证的
apache 2.4中的mod_ldap模块并不是用于认证的(虽然和proftpd中用于认证的模块mod_ldap名字完全一样)
https://httpd.apache.org/docs/2.4/mod/mod_ldap.html
https://httpd.apache.org/docs/2.4/mod/mod_authnz_ldap.html
二、配置主目录允许用目录中的.htaccess覆盖主配置文件中认证方面的设置
nano /etc/apache2/apache2.conf
#<Directory /var/www/>
# Options Indexes FollowSymLinks
# AllowOverride None
# Require all granted
#</Directory><Directory /var/www/>Options Indexes FollowSymLinksAllowOverride AuthConfigRequire all granted
</Directory>
重启apache
# apachectl configtest
Syntax OK
# systemctl restart apache2
三、配置.htaccess文件,把index.html改名以免影响autoindex,开始测试
以后的测试都不会用到testgroup,而是以testgroup2为模板,因为testgroup的基类中没有加入posixGroup,
将来是无法与proftpd的openldap组认识进行整合的
# mv /var/www/html/index.html /var/www/html/default.html
# mkdir -p /var/www/html/doc_private
# cd /var/www/html/doc_private
# nano .htaccess
配置.htaccess内容抄的参考文章一
AuthName "Please Input Your Password"
AuthType Basic
AuthBasicProvider ldap
AuthLDAPURL ldap://localhost/dc=mydebian210,dc=mydomain,dc=net?uid
AuthLDAPBindDN "cn=admin,dc=mydebian210,dc=mydomain,dc=net"
AuthLDAPBindPassword "secret_password"
AuthzLDAPAuthoritative on#OK Require ldap-user testuser
#Satisfy anyRequire ldap-group cn=testgroup2,ou=web_ftp_groups,dc=mydebian210,dc=mydomain,dc=net
测试访问http://10.16.97.210目录中只显示default.html,没有看到doc_private目录,
测试访问http://10.16.97.210/doc_private/,报 500 Internal Server Error错误
查看/var/log/apache2/error.log最后几行,其中有出错信息如下
[Tue Oct 20 21:08:34.283390 2020] [core:alert] [pid 1521] [client 10.16.97.100:62005] /var/www/html/doc_private/.htaccess: Invalid command 'AuthzLDAPAuthoritative', perhaps misspelled or defined by a module not included in the server configuration
说明问题出在AuthzLDAPAuthoritative配置上,这个配置应该是决定LDAP认证出错时是否尝试其他模块认证用的
在网上搜了一下,原来apache 2.4已经改用AuthLDAPBindAuthoritative了
https://serverfault.com/questions/485871/invalid-command-authzldapauthoritative
修改.htaccess
AuthName "Please Input Your Password"
AuthType Basic
AuthBasicProvider ldap
AuthLDAPURL ldap://localhost/dc=mydebian210,dc=mydomain,dc=net?uid
AuthLDAPBindDN "cn=admin,dc=mydebian210,dc=mydomain,dc=net"
AuthLDAPBindPassword "secret_password"#only in apache 2.2
#AuthzLDAPAuthoritative on#only in apache 2.4
AuthLDAPBindAuthoritative on#OK Require ldap-user testuser
#Satisfy any
Require ldap-group cn=testgroup2,ou=web_ftp_groups,dc=mydebian210,dc=mydomain,dc=net
此时无需重启apache2(我感觉用.htaccess好处一是修改后不用重启apache2,二是修改所在目录名后仍然有效
坏处是影响性能,nginx中就因为性能原因不支持.htacces)
再次测试访问http://10.16.97.210目录中只显示default.html,还是没有看到doc_private目录,
测试访问http://10.16.97.210/doc_private/,正常弹出认证窗口,输入前几篇文章中已配置好的
用户名:testuser 密码:ysk,进入到doc_private目录下,主要目标初步达成。
四、ShowForbidden和FancyIndexing
上面测试时发现有.htaccess保护的目录必须知道URL才能进入,
autoindex自动隐藏了目录入口,这种缺省行为不太符合实际需求,经过尝试,发现解决的关键是IndexOptions ShowForbidden
在/etc/apache2/apache2.conf中配置主目录允许这个特征,同时加上了FancyIndexing让界面更美观实用一点(虽然还是很难看)
Options中加入 +MultiViews -ExecCGI,结果apachectl configtest报错,
Either all Options must start with + or -, or no Option may.
好像Options中只要有一项有"+"或"-",则必须都有,更正后的设置如下
#<Directory /var/www/>
# Options Indexes FollowSymLinks
# AllowOverride None
# Require all granted
#</Directory><Directory /var/www/>Options +Indexes +FollowSymLinks +MultiViews -ExecCGIAllowOverride AuthConfigIndexOptions ShowForbidden IgnoreCase FancyIndexing FoldersFirst NameWidth=* DescriptionWidth=*Require all granted
</Directory>
重启apache
# apachectl configtest
Syntax OK
# systemctl restart apache2
再次测试访问http://10.16.97.210目录中可以显示了default.html和doc_private目录了,
如果没有关闭浏览器,仍然直接就可以进入doc_private目录,这是apache认证的特点,不能注销
退出浏览器再重新打开,访问http://10.16.97.210,进入doc_private又会要求认证,主要目标达成。
五、用户组有多个时如何配置
(一)先增加一个用户testuser2(方法与前几篇一样)
root@mydebian210:~# cat > ~/add_user2_default_unique.ldif << EOF
> dn: uid=testuser2,ou=web_ftp_users,dc=mydebian210,dc=mydomain,dc=net
> cn: testuser2
> givenName: testuser2
> sn: testuser2
> uid: testuser2
> objectClass: inetOrgPerson
> objectClass: top
> userPassword: {MD5}lYxrA/e4dMIMkc4u57OpUA==
> EOF
root@mydebian210:~# ldapadd -x -D cn=admin,dc=mydebian210,dc=mydomain,dc=net -w "secret_password" -f ~/add_user2_default_unique.ldif
adding new entry "uid=testuser2,ou=web_ftp_users,dc=mydebian210,dc=mydomain,dc=net"
将用户testuser2加入已经存在的testgroup2组中(这里与前几篇不一样,前几篇是建组的同时加入用户)
root@mydebian210:~# cat > ~/add_user_to_group_default_unique.ldif << EOF
> dn: cn=testgroup2,ou=web_ftp_groups,dc=mydebian210,dc=mydomain,dc=net
> changetype: modify
> add: uniqueMember
> uniqueMember: uid=testuser2,ou=web_ftp_users,dc=mydebian210,dc=mydomain,dc=net
> EOF
root@mydebian210:~# ldapmodify -D cn=admin,dc=mydebian210,dc=mydomain,dc=net -w "secret_password" -f ~/add_user_to_group_default_unique.ldif
modifying entry "cn=testgroup2,ou=web_ftp_groups,dc=mydebian210,dc=mydomain,dc=net"
(二)再按前几篇一样的方法新建一个用户testuser3,新建一个testgroup3的同时加入testuser3用户
root@mydebian210:~# cat > ~/add_user3_default_unique.ldif << EOF
> dn: uid=testuser3,ou=web_ftp_users,dc=mydebian210,dc=mydomain,dc=net
> cn: testuser3
> givenName: testuser3
> sn: testuser3
> uid: testuser3
> objectClass: inetOrgPerson
> objectClass: top
> userPassword: {MD5}lYxrA/e4dMIMkc4u57OpUA==
> EOF
root@mydebian210:~# ldapadd -x -D cn=admin,dc=mydebian210,dc=mydomain,dc=net -w "secret_password" -f ~/add_user3_default_unique.ldif
adding new entry "uid=testuser3,ou=web_ftp_users,dc=mydebian210,dc=mydomain,dc=net"
root@mydebian210:~# cat > ~/add_group3_default_unique.ldif << EOF
> dn: cn=testgroup3,ou=web_ftp_groups,dc=mydebian210,dc=mydomain,dc=net
> objectClass: groupOfUniqueNames
> cn: testgroup3
> gidNumber: 1003
> description: testgroup3
> uniqueMember: uid=testuser3,ou=web_ftp_users,dc=mydebian210,dc=mydomain,dc=net
> EOF
root@mydebian210:~# ldapadd -x -D cn=admin,dc=mydebian210,dc=mydomain,dc=net -w "secret_password" -f ~/add_group3_default_unique.ldif
adding new entry "cn=testgroup3,ou=web_ftp_groups,dc=mydebian210,dc=mydomain,dc=net"
(三)修改.htaccess,将两个组的认证配置行用<RequireAny></RequireAny>包含起来,就可以达到目的了,
<RequireAny></RequireAny>中每一条是逻辑“或”的关系,有一条符合就视同通过,其他逻辑关系见
https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html
修改后的.htaccess如下
AuthName "Please Input Your Password"
AuthType Basic
AuthBasicProvider ldap
AuthLDAPURL ldap://localhost/dc=mydebian210,dc=mydomain,dc=net?uid
AuthLDAPBindDN "cn=admin,dc=mydebian210,dc=mydomain,dc=net"
AuthLDAPBindPassword "secret_password"#only in apache 2.2
#AuthzLDAPAuthoritative on#only in apache 2.4
AuthLDAPBindAuthoritative on#OK Require ldap-user testuser
#Satisfy any<RequireAny>
Require ldap-group cn=testgroup2,ou=web_ftp_groups,dc=mydebian210,dc=mydomain,dc=net
Require ldap-group cn=testgroup3,ou=web_ftp_groups,dc=mydebian210,dc=mydomain,dc=net
</RequireAny>
经测试testuser2,testuser3都可以认证通过,说明配置有效,所有目标达成
六、其他话题,如果没有安装PHP或apache与proftpd的数据目录完全分开、下面的内容不是必须的
(一)h5ai
既然安装了PHP,就干脆用h5ai的现代界面替换掉autoindex的古董界面,
选h5ai的最主要原因是它自身并不提供认证,仍然依赖apache自身的认证功能,正好与我的目标契合
h5ai的使用网上文章很多,配置的讲解也很详细,这里只记录下最基本的安装与配置
https://larsjung.de/h5ai/
https://release.larsjung.de/h5ai/h5ai-0.29.2.zip
解压到/var/www/html/_h5ai并设置权限
root@mydebian210:~# cd /var/www/html
root@mydebian210:/var/www/html# unzip ~/h5ai-0.29.2.zip
root@mydebian210:/var/www/html# chown -R www-data:www-data _h5ai/
浏览器访问http://10.16.97.210/_h5ai/public/index.php,出错
查看/var/log/apache2/error.log最后几行,其中有出错信息,经过注释掉/var/www/html/_h5ai/.htaccess中相关行,记录报错的各种类型
[Sun Oct 25 22:02:30.873798 2020] [core:alert] [pid 1749] [client 10.16.97.100:50293] /var/www/html/_h5ai/.htaccess: FileETag not allowed here
[Sun Oct 25 22:04:26.051967 2020] [core:alert] [pid 1751] [client 10.16.97.100:50502] /var/www/html/_h5ai/.htaccess: AddDefaultCharset not allowed here
[Sun Oct 25 22:05:09.072176 2020] [core:alert] [pid 1752] [client 10.16.97.100:50501] /var/www/html/_h5ai/.htaccess: AddCharset not allowed here
[Sun Oct 25 22:06:28.001725 2020] [core:alert] [pid 1749] [client 10.16.97.100:50674] /var/www/html/_h5ai/.htaccess: AddType not allowed here
[Sun Oct 25 22:07:07.538132 2020] [core:alert] [pid 1755] [client 10.16.97.100:50673] /var/www/html/_h5ai/.htaccess: AddOutputFilterByType not allowed here
[Sun Oct 25 22:08:29.577753 2020] [core:alert] [pid 1751] [client 10.16.97.100:50883] /var/www/html/_h5ai/.htaccess: AddEncoding not allowed here
[Sun Oct 25 22:08:36.523953 2020] [core:alert] [pid 1751] [client 10.16.97.100:50883] /var/www/html/_h5ai/.htaccess: Options not allowed here
注释掉这么多行也不是办法。经过尝试,发现解决的关键是 AllowOverride FileInfo,可以解决除Optioins以外所有报错
Options比较特殊因为参数中有ExecCGI,我并不希望.htaccess覆盖它,最终解决方法是将h5ai的.htaccess中Options部分注释掉
#<IfModule mod_autoindex.c>
# Options -Indexes
#</IfModule>
在/etc/apache2/apache2.conf中配置中新建/var/www/html/_h5ai目录配置允许AllowOverride FileInfo,加入上面注释掉的部分
<Directory /var/www/html/_h5ai/>Options +Indexes +FollowSymLinks +MultiViews -ExecCGIAllowOverride AuthConfig Indexes FileInfoIndexOptions ShowForbidden IgnoreCase FancyIndexing FoldersFirst NameWidth=* DescriptionWidth=*<IfModule mod_autoindex.c>Options -Indexes</IfModule>Require all granted
</Directory>
重启apache
# apachectl configtest
Syntax OK
# systemctl restart apache2
浏览器访问http://10.16.97.210/_h5ai/public/index.php,正常,当前口令为空,可以直接登录,
界面是对运行环境进行测试的结果,如果有以下内容,是必须要修改解决的
Public Cache directory no
Web server has write accessPrivate Cache directory no
Web server has write access
这一般是_h5ai目录还是归属于root用户导致的,需要改为www-data用户。chown -R www-data:www-data /var/www/html/_h5ai/
出现以下提示不是必须解决的,要打开这个特性需 apt install php7.0-gd
Image thumbs no
PHP GD extension with JPEG support available
另一些操作系统层面的软件需求都不是必须的,这些花哨功能的代价是服务器的性能消耗,有的已支持的可以在配置文件中关闭
尤其是将目录打包成压缩文件再下载的功能,假设目录里面有几十G的GHO文件,用户直接下载文件没问题,
用户非要在上级目录选打包成压缩文件再下载怎么对付?这种花哨功能肯定是不能对所有用户都开放的
按h5ai项目主页提供的方法将/_h5ai/public/index.php加入DirectoryIndex行末:nano /etc/apache2/mods-available/dir.conf
<IfModule mod_dir.c>DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm /_h5ai/public/index.php
</IfModule>
重启apache
# apachectl configtest
Syntax OK
# systemctl restart apache2
浏览器访问http://10.16.97.210界面正常,后面的工作是定制/var/www/html/_h5ai/private/conf/options.json中的各种参数,
打开这个文件就会发现它引用了互联网字体网站的资源,要在内网用必须修改,否则每次失败尝试都会拖慢网页响应速度
(二)只允许特定目下进行PHP解析
由于我的目标还包括apache与proftpd的数据区一致,同时因为phpldapadmin的原因安装了PHP
这就面临一个重要问题就是要防止FTP用户上传PHP文件,用web调用执行
在网上搜索到下面文章
https://stackoverflow.com/questions/18932756/disable-all-cgi-php-perl-for-a-directory-using-htaccess
得到的关键知识就是可以用以下参数禁止某个目录下的任何PHP解析,这个目录下的PHP文件只被当成普通文本文件
php_flag engine off
不过要注意的是有的文章指出这个参数只能作用于mod_php,与suPHP、php_fpm之间是冲突的,
另外一点是在.htaccess中设置php_flag engine off并不像其他设置一样可以立即生效,还是必须重启apache2
根据我的实际目标决定全局禁用PHP解析,只对phpldapadmin、self-service-password、_h5ai所在的三个目录打开
在/etc/apache2/apache2.conf中配置成下面这样就可以了
<Directory /var/www/>Options +Indexes +FollowSymLinks +MultiViews -ExecCGIAllowOverride AuthConfigIndexOptions ShowForbidden IgnoreCase FancyIndexing FoldersFirst NameWidth=* DescriptionWidth=*php_flag engine offRequire all granted
</Directory><Directory /var/www/html/_h5ai/>Options +Indexes +FollowSymLinks +MultiViews -ExecCGIAllowOverride AuthConfig Indexes FileInfoIndexOptions ShowForbidden IgnoreCase FancyIndexing FoldersFirst NameWidth=* DescriptionWidth=*<IfModule mod_autoindex.c>Options -Indexes</IfModule>php_flag engine onRequire all granted
</Directory>
在/var/www/html/下写一个phpinfo();为内容的PHP文件,访问时只会当成文本文件了, 安全性增加了一点点。
尝试debian-9.13.0-amd64下apache和proftpd用openldap整合按组认证笔记之五:apache配置openldap组认证、h5ai、关闭PHP解析相关推荐
- Win10+VS2017+Ceres-Solver-1.13.0配置
一.工作准备 VS 2017 Cmake Ceres-solover最新版以及早期版本 gflags glog Eigen 注:下载后的包如下图所示,解压缩所有包至合适位置,本文以"D:\P ...
- 官宣|Apache Flink 1.13.0 正式发布,流处理应用更加简单高效!
简介:Flink 1.13.0 版本让流处理应用的使用像普通应用一样简单和自然,并且让用户可以更好地理解流作业的性能. 翻译 | 高赟 Review | 朱翥.马国维 GitHub 地址 https ...
- 【Flink】Apache Flink 1.13.0 正式发布,流处理应用更加简单高效
1.概述 转载:Apache Flink 1.13.0 正式发布,流处理应用更加简单高效 侵权可删,这里是做个笔记,防止找不到. Flink 1.13 发布了!Flink 1.13 包括了超过 200 ...
- Apache Flink 1.13.0 发布公告
Apache Flink 社区很高兴宣布 Flink 1.13.0 的发布!200 多个贡献者为这个新版本处理了 1000 多个问题. 该版本使我们迈出了一大步:将流处理应用程序变得与其他任何应用程序 ...
- Apache Flink 1.13.0 正式发布,流处理应用更加简单高效!
翻译 | 高赟 Review | 朱翥.马国维 Flink 1.13 发布了!Flink 1.13 包括了超过 200 名贡献者所提交的 1000 多项修复和优化. 这一版本中,Flink 的一个主要 ...
- mysql4.0.13下载_Windows2000下整合Mysql4.0.13与Tomcat
原由:在资料浩瀚的互联网中,却找不到一份最新的mysql4.0.13与Tomcat4.1.24的整合配置文档.在自己工作之余,总结了自己搭建jsP环境的实际经验并参照以前版本Mysql.Tomcat相 ...
- ubuntu16.04 在cuda9.0环境下编译安装opencv2.4.13.7
ubuntu16.04 在cuda9.0环境下编译安装opencv2.4.13.7 安装步骤: 1.安装cuda9.0:https://blog.csdn.net/zhuangwu116/articl ...
- 赛迪实验室 | “Apache IoTDB V0.13.0”时序数据库通过中国软件评测中心软件产品技术鉴定测试...
近日,"Apache IoTDB V0.13.0"时序数据库通过了中国软件评测中心软件产品技术鉴定测试.本次测试从功能性和性能效率等方面进行了软件产品技术鉴定测试,功能性从数据读写 ...
- windows下MX150显卡安装cuda11.3+cudnn8.4.1+torch1.12.0+torchvision0.13.0+torchaudio0.12.0
文章目录 1)安装Anaconda 2)查看显卡驱动支持的最高CUDA版本 3)查看pytorch官方推荐CUDA版本 4)下载CUDA并安装 5)下载cudnn安装 6)使用conda安装torch ...
最新文章
- 前Duolingo秦龙博士归国创业:情定K12个性化学习
- 腾讯胡珀:数字时代,每个人的安全都值得被守护
- 网络游戏的客户端同步问题 .
- 17 WM配置-策略-激活存储区搜索(Storage Section Search)
- [Linux命令]dd
- latex 导出的pdf生成书签 目录
- 一道和逆向和溢出有关的竞赛题分析
- 如何制作伪原创视频?呆头鹅批量视频剪辑软件一键处理10万个视频
- Soul持续发力社交渠道赴港上市,“Soul式社交”凭什么火出圈?
- dpdk pci驱动探测
- android 读写sd卡的权限设置
- leetcode 507 完美数
- itoa函数 和_itoa_s函数
- mindray心电监护仪使用说明_监护仪使用说明
- YOLOV3实现车牌检测
- 技术丨如何处理有依赖的消息
- 20172304 2018-2019-1 《程序设计与数据结构》课程总结
- day45--冒泡排序
- 外综服管理丨外贸综合服务平台解决方案
- Hadoop 3.0的新增功能– Apache Hadoop 3的增强功能
热门文章
- 浙江省2012年文理科第二批志愿投档分数线
- docker 集群中 nginx 配置 php 需要注意的地方
- DEDE列表页属性合集【集合篇】
- 解决Eclipse中文乱码问题
- 盈建科弹性板6计算_盈建科参数设置
- SiT9375:200fs超低抖动差分晶振,25-644.53125MHz,LVPECL/LVDS/HCSL
- python行转列_Python实现行转列?!超简单,赶快get起来
- 阿城的三王(棋王 树王 孩子王)
- MDT 评测 — OPPO Reno 标准版屏幕素质报告
- python处理二进制文件_python文件操作之二进制