phpldapadmin安装
标准安装
安装phpldapadmin
安装phpldapadmin会同时安装php5.4以及httpd2.4.6
yum安装的phpldapadmin汉化文件在 /usr/share/phpldapadmin/locale/zh_CN/LC_MESSAGES
目录下
yum -y install phpldapadmin
查看安装
phpldapadmin
$ rpm -qa | grep phpldapadmin
phpldapadmin-1.2.5-1.el7.noarch
php
$ rpm -qa | grep php
php-ldap-5.4.16-48.el7.x86_64
php-5.4.16-48.el7.x86_64
php-cli-5.4.16-48.el7.x86_64
php-common-5.4.16-48.el7.x86_64
httpd
$ rpm -qa | grep httpd
httpd-tools-2.4.6-99.el7.centos.1.x86_64
lighttpd-1.4.54-1.el7.x86_64
httpd-2.4.6-99.el7.centos.1.x86_64
配置phpldapadmin
编辑 /etc/httpd/conf.d/phpldapadmin.conf
允许从远程访问
# 备份文件
cp /etc/httpd/conf.d/phpldapadmin.conf{,.old}
# 重新编辑文件
cat > /etc/httpd/conf.d/phpldapadmin.conf << EOF
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs
<Directory /usr/share/phpldapadmin/htdocs>
Order Deny,Allow
Allow from all
</Directory>
EOF
编辑 /etc/httpd/conf/httpd.conf
# 注释如下内容
<Directory />
AllowOverride none
Require all denied
</Directory>
# 新增如下内容
<Directory />
Options Indexes FollowSymLinks
AllowOverride None
</Directory>
注释内容,新增内容,一条命令搞定
-
/\<Directory \/>/,/\<\/Directory\>/
:匹配从<Directory />
到</Directory>
这块内容 -
s/^/#/
:在这块内容的每一行开头加#
,实现注释 -
/<\/Directory>/a\
:在匹配</Directory>
行的后面追加内容 -
\n
是换行符(用于格式美观)
sed -i.bak '/<Directory \/>/,/<\/Directory>/ {
s/^/#/
/<\/Directory>/a\
\n# 新增目录权限配置\n<Directory />\n Options Indexes FollowSymLinks\n AllowOverride None\n</Directory>
}' /etc/httpd/conf/httpd.conf
编辑 /etc/phpldapadmin/config.php
配置使用dn登陆
修改
$servers->setValue('login','attr','uid');
修改为
$servers->setValue('login','attr','dn');
一条命令搞定
sed -i.bak "s/\$servers->setValue('login','attr','uid');/\$servers->setValue('login','attr','dn');/" /etc/phpldapadmin/config.php
重启httpd
systemctl restart httpd
访问phpldapadmin
浏览器访问 IP/phpldapadmin
访问首页面
点击登录
之前搭建openldap服务端中设置的用户名为 cn=admin,dc=ops,dc=com
密码为 admin
解决 phpldapadmin管理页面提示 This base cannot be created with PLA
问题
phpldapadmin登陆成功后会报错 This base cannot be created with PLA
解决方法
在 /etc/openldap
目录下新建一个 base.ldif
文件,为初始化根节点做准备工作,这里需要 修改dn一行为自己的信息
cat > /etc/openldap/base.ldif << EOF
dn: dc=ops,dc=com
o: ldap
objectclass: dcObject
objectclass: organization
EOF
执行命令,会提示输入密码,这里输入搭建openldap时设置的管理员密码
$ ldapadd -f /etc/openldap/base.ldif -x -D cn=admin,dc=ops,dc=com -W
Enter LDAP Password:
adding new entry "dc=ops,dc=com"
执行成功后重新登陆 phpldapadmin,可以看到之前的报错已经没有了
关闭匿名访问
ldap默认是允许匿名访问的
编辑 /etc/phpldapadmin/config.php
# 关闭匿名访问
修改
// $servers->setValue('login','anon_bind',true);
修改为
$servers->setValue('login','anon_bind',false);
# 设置只有管理员能登陆
新增
$servers->setValue('login','allowed_dns',array('cn=admin,dc=ops,dc=com'));
一条命令搞定
sed -i.bak "/\/\/ \$servers->setValue('login','anon_bind',true);/ {
s|// ||; # 去掉行首注释
s|true|false|; # 将 true 改为 false
a\\
\$servers->setValue('login','allowed_dns',array('cn=admin,dc=ops,dc=com'));
}" /etc/phpldapadmin/config.php
无需重启任何服务,配置完成后匿名登陆按钮就取消了
解决模版移除属性问题
有这些警告的原因如下
-
缺失 schema
sambaGroupMapping
,sambaSAMAccount
→ 这些属于 Samba 的 schema(如samba.schema
)courierMailAlias
,courierMailAccount
→ 这些属于 Courier Mail 的 schemamozillaOrgPerson
,c
,uidNumber
,gidNumber
,homeDirectory
→ 来自多种通用 schema,如nis.schema
、inetorgperson.schema
等
-
phpldapadmin 默认模板中预置了对这些 objectClass/attribute 的支持,但你当前 OpenLDAP 实例中并未加载这些对应的 schema 文件
解决方法是移除相关的文件
cd /usr/share/phpldapadmin/templates/
mkdir bak
mv samba* bak/
mv courierMailA* bak/
mv mozillaOrgPerson.xml bak/
移除相关文件警告就没有了
docker安装
osixia/phpldapadmin
启动容器
osixia docker镜像 这个项目已经不维护了,但是还能使用,最新版本的镜像(0.9.0)中phpldapadmin的版本是1.2.5
- docker
- docker compose
如果ldap服务启动的端口不是389,则需要修改环境变量 PHPLDAPADMIN_LDAP_HOSTS
为如下格式
PHPLDAPADMIN_LDAP_HOSTS="#PYTHON2BASH:[{'10.0.0.99':[{'server':[{'port':3389}]}]}]"
docker run \
-d \
-p 8081:80 \
-v phpldapadmin:/container/service/phpldapadmin/assets/config \
--name phpldapadmin \
--hostname phpldapadmin \
-e PHPLDAPADMIN_HTTPS=false \
-e PHPLDAPADMIN_LDAP_HOSTS=10.0.0.102 \
--restart=always \
--detach \
osixia/phpldapadmin:0.9.0
如果ldap服务启动的端口不是389,则需要修改环境变量 PHPLDAPADMIN_LDAP_HOSTS
为如下格式,并且必须为字典写法
environment:
PHPLDAPADMIN_LDAP_HOSTS: "#PYTHON2BASH:[{'10.0.0.102':[{'server':[{'port':3389}]}]}]"
不可以为列表写法
environment:
- PHPLDAPADMIN_LDAP_HOSTS="#PYTHON2BASH:[{'10.0.0.102':[{'server':[{'port':3389}]}]}]"
否则在 config.php
中渲染的内容如下,是错误的
$servers->setValue('server','name','"#PYTHON2BASH:[{'10.0.0.102':[{'server':[{'port':3389}]}]}]"');
$servers->setValue('server','host','"#PYTHON2BASH:[{'10.0.0.102':[{'server':[{'port':3389}]}]}]"');
正确的旋绕效果如下
$servers->setValue('server','host','10.0.0.102');
$servers->setValue('server','name','10.0.0.102');
$servers->setValue('server','port','3389');
cat > docker-compose.yaml << EOF
services:
phpldapadmin:
image: osixia/phpldapadmin:0.9.0
container_name: phpldapadmin
hostname: phpldapadmin
ports:
- "8081:80"
environment:
PHPLDAPADMIN_HTTPS: "false"
PHPLDAPADMIN_LDAP_HOSTS: "10.0.0.102"
volumes:
- phpldapadmin:/container/service/phpldapadmin/assets/config
restart: always
volumes:
phpldapadmin:
EOF
浏览器访问
IP:端口
登录后