目录
修改phpldapadmin的默认端口 https://www.ilanni.com/?p=14000
LINUX所有服务的启动脚本都存放在___目录中 /etc/init.d
问题:
linux上的LDAP服务,远程windows程序访问超时和拒绝 ping ip地址是通的,但是端口一直访问不了
所以使用telnet测试端口号是否可以访问 389为无加密端口,636为加密端口
telnet 20.23.13.249 389 发现连接不通
登上服务主机,使用netstat -anptu //查看当前所有tcp端口·
netstat命令各个参数说明如下:
-t : 指明显示TCP端口
-u : 指明显示UDP端口
-l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)
-p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。
-n : 不进行DNS轮询,显示IP(可以加速操作)
发现389端口是开启的
于是,使用telnet命令继续测试,发现端口号在1024以下的端口使用telnet一直连接不通,但是在1024以上的却可以
然后,想到通过改LDAP的默认端口389
如何修改LDAP默认端口呢?
CentOS通过yum默认安装的 openldap
在 slapd
服务启动后,默认 listen
的配置是ldap:///
ldapi:///
这两个参数,也就是会监听默认的 TCP:0.0.0.0:389 和一个IPC (Unix-domain socket)
;
查看 openldap
的官方手册,发现修改自定义的监听端口和指定bind
的IP地址的方法,都是通过命令行的方式在启动 slapd 进程的命令后面加 -h 参数来指定监听的地址和端口,比如:
/usr/sbin/slapd -h ldap:/// ldapi:///
但是我在CentOS
下用yum
安装的opldap
并不需要我们手动执行上面的命令来启动,而是由/etc/init.d/slapd
这个专门的服务控制脚本来进行启动和停止的;
一开始我想到的是直接修改/etc/init.d/slapd
这个启动脚本,将 -h
参数写死到start
函数中。但总觉得这有点不够科学,应该有更加合理的配置参数或选项可以让我自定义才对;
于是完整看了一遍/etc/init.d/slapd
的处理逻辑,发现它会从/etc/sysconfig/ldap
文件来读取SLAPD_URLS
这个变量的参数,并用来设置成启动时的-h
参数;
于是直接将/etc/sysconfig/ldap
中的SLAPD_URLS
变量取消注释,并修改成了我需要的如下这样:
SLAPD_URLS="ldap://0.0.0.0:489/"
重启slapd服务器,发现除了我新定义的 0.0.0.0:489 有在正常监听以外,原本默认的 389 也有在监听中,如下:
从slapd进程的指令可以发现,是把自定义SLAPD_URLS
的值附加在了原本的启动指令上,所以会将新的 port
和原本默认的 port
同时监听起来了;那么如何关闭和禁止监听 default
的 port
呢?
于是继续查看启动脚本,在start
函数中发现了如下配置启动参数的代码:
harg="$SLAPD_URLS"
if test x$SLAPD_LDAP = xyes ; then
harg="$harg ldap:///"
fi
if test x$SLAPD_LDAPS = xyes ; then
harg="$harg ldaps:///"
fi
if test x$SLAPD_LDAPI = xyes ; then
harg="$harg ldapi:///"
fi
所以在生成启动参数时,脚本会做三个判断,分别是检查SLAPD_LDAP
,SLAPD_LDAPS
,SLAPD_LDAPI
这三个选项是否为yes
如果是的话,就会在我们自己定义的 SLAPD_URLS
后面附加默认的监听参数,所以最后拼接出来的启动参数 -h
后面就会同时包含自定义的端口和系统默认的端口;
这三个系统默认的监听选项开关同样也是定义在 /etc/sysconfig/ldap或者/etc/sysconfig/slapd
配置文件中;将其默认的 yes
修改为no
,修改后如下:
SLAPD_LDAP=no //禁用默认的389
SLAPD_LDAPI=no //禁用默认的IPC(Unix-domain socket)
SLAPD_LDAPS=no //禁用默认的ldaps 636
SLAPD_URLS="ldap://0.0.0.0:489/"
之后再重启服务,终于按我的要求实现仅监听自定义的端口了;
总结
修改CentOS
yum
安装的 openldap
(slapd)
服务默认监听端口的方法如下:
- 将
/etc/sysconfig/ldap
文件中的SLAPD_LDAP
,SLAPD_LDAPI
,SLAPD_LDAPS
三个选项设置为no
- 在
/etc/sysconfig/ldap
文件中启用,或者是添加一行SLAPD_URLS=
的设置定义自己想要绑定监听的地址和端口 - 重启
slapd
服务
修改phpldapadmin的默认端口 https://www.ilanni.com/?p=14000
cat > /etc/phpldapadmin/config.php
$servers = new Datastore();
$servers->newServer(‘ldap_pla’);
$servers->setValue(‘server’,’name’,’Ilanni LDAP Server’);
$servers->setValue(‘appearance’,’password_hash’,”);
$servers->setValue(‘login’,’attr’,’dn’);
$servers->setValue(‘server’,’host’,’192.168.123.8′);
$servers->setValue(‘server’,’port’,389);
$servers->setValue(‘server’,’base’,array(‘dc=ilanni,dc=com’));
$servers->setValue(‘login’,’auth_type’,’session’);
$servers->setValue(‘server’,’tls’,false);
$servers->setValue(‘unique’,’attrs’,array(‘uid’,’sn’));
以上配置文件修改完毕后,现在我们来启动httpd。命令如下:
systemctl start httpd
systemctl enable httpd
systemctl status httpd
如何查看yum安装了那些软件
yum list installed
如何查看yum安装的软件在哪里?
先查出其对应的rpm包名。
rpm -qa|grep php-fpm
命令 rpm -ql php71-php-fpm-7.1.2-1.el6.remi.x86_64
/etc/logrotate.d/php71-php-fpm
/etc/opt/remi/php71/php-fpm.conf
/etc/opt/remi/php71/php-fpm.d
/etc/opt/remi/php71/php-fpm.d/www
LINUX所有服务的启动脚本都存放在___目录中 /etc/init.d
linux 将自己的服务添加到系统service服务
LDAP错误码
Ldap load error: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 525, vece]
其中红字部分的意思如下(这些错误码跟语言无关):
525 - 用户没有找到
52e - 证书不正确
530 - not permitted to logon at this time
532 - 密码期满
533 - 帐户不可用
701 - 账户期满
773 - 用户必须重设密码
LDAP: error code 32 - No Such Object https://blog.csdn.net/fireofjava/article/details/79344339
LDAP error Code 及解决方法 https://blog.csdn.net/techchan/article/details/5440775
LDAP的相关概念与objectClass介绍
一,部分LDAP专用名词的解释
Objectclass
LDAP对象类,是LDAP内置的数据模型。每种objectClass有自己的数据结构,比如我们有一种叫“电话薄”的objectClass,肯定会内置很多属性(attributes),如姓名(uid),身份证号(uidNumber),单位名称(gid),家庭地址(homeDirectory)等,同时,还有一种叫“同学录”的objectClass,具备“电话薄”里的一些attributes(如uid、homeDirectory),还会具有“电话薄”没有的attributes(如description等)。
Entry
entry可以被称为条目,一个entry就是一条记录,是LDAP中一个基本的存储单元;也可以被看作是一个DN和一组属性的集合。注意,一条entry可以包含多个objectClass,例如zhang3可以存在于“电话薄”中,也可以同时存在于“同学录”中。
DN
Distinguished Name,LDAP中entry的唯一辨别名,一条完整的DN写法:uid=zhang3,ou=People,dc=163,dc=com。LDAP中的entry只有DN是由LDAP Server来保证唯一的。
LDAP Search filter
使用filter对LDAP进行搜索。 Filter一般由 (attribute=value) 这样的单元组成,比如:(&(uid=ZHANGSAN)(objectclass=person)) 表示搜索用户中,uid为ZHANGSAN的LDAP Entry.再比如:(&(|(uid= ZHANGSAN)(uid=LISI))(objectclass=person)),表示搜索uid为ZHANGSAN, 或者LISI的用户;也可以使用*来表示任意一个值,比如(uid=ZHANG*SAN),搜索uid值以 ZHANG开头SAN结尾的Entry。更进一步,根据不同的LDAP属性匹配规则,可以有如下的Filter: (&(createtimestamp>=20050301000000)(createtimestamp<=20050302000000)),表示搜索创建时间在20050301000000和20050302000000之间的entry。
Filter中 “&” 表示“与”;“!”表示“非”;“|”表示“或”。根据不同的匹配规则,我们可以使用“=”,“~=”,“>=”以及“<=”,更多关于LDAP Filter读者可以参考LDAP相关协议。
Base DN
一条Base DN可以是“dc=163,dc=com”,也可以是“dc=People,dc=163,dc=com”。执行LDAP Search时一般要指定basedn,由于LDAP是树状数据结构,指定basedn后,搜索将从BaseDN开始,我们可以指定Search Scope为:只搜索basedn(base),basedn直接下级(one level),和basedn全部下级(sub tree level)。
二,objectClass介绍
LDAP中,一个条目(Entry)必须包含一个对象类(objectClass)属性,且需要赋予至少一个值。每一个值将用作一条LDAP条目进行数据存储的模板;模板中包含了一个条目必须被赋值的属性和可选的属性。
objectClass有着严格的等级之分,最顶层是top和alias。例如,organizationalPerson这个objectClass就隶属于person,而person又隶属于top。
objectClass可分为以下3类:
结构型(Structural):如account、inetOrgPerson、person和organizationUnit;
辅助型(Auxiliary):如extensibeObject;
抽象型(Abstract):如top,抽象型的objectClass不能直接使用。
每种objectClass有自己的数据结构,比如我们有一种叫“电话薄”的objectClass,肯定会内置很多属性(attributes),如姓名(uid),身份证号(uidNumber),单位名称(gid),家庭地址(homeDirectory)等,这些属性(attributes)中,有些是必填的,例如,account就要求userid是必填项,而inetOrgPerson则要求cn(common name,常用名称)和sn(sure name,真实名称)是必填项。
accout内置的attributes有:userid、description、host、localityName、organizationName、organizationalUnitName、seeAlso;
inetOrgPerson内置的attributes有cn、sn、description、seeAlso、telephoneNumber、userPassword、destinationIndicator、facsimileTelephoneNumber、internationaliSDNNumber、l、ou、physicalDeliveryOfficeName、postOfficeBox、postalAddress、postalCode、preferredDeliveryMethod、registeredAddress、st、street、telephoneNumber、teletexTerminalIdentifier、telexNumber、title、x121Address、audio、usinessCategory、carLicense、departmentNumber、isplayName、employeeNumber、employeeType、givenName、homePhone、homePostalAddress、initials、jpegPhoto、labeledURI、mail、manager、mobile、o、pager、photo、preferredLanguage、roomNumber、secretary、uid、userCertificate等;
由上可见,accout仅仅预置了几个必要且实用的属性(完成登陆验证肯定是够了),而inetOrgPerson内置了非常之多的属性,例如电话号码、手机号码、街道地址、邮箱号码,邮箱地址,房间号码,头像,经理,雇员号码等等。
因此,在配置LDAP时,如果仅仅是基于验证登陆的目的,建议将objectClass类型设置为accout,而如果希望打造一个大而全的员工信息宝库,建议将objectClass设置为inetOrgPerson。
当然,对于一个Entry来说,仅仅有accout或者inetOrgPerson是不够的,在安装配置LDAP时,本文介绍了使用migrationtools工具,将Linux系统用户转化为ldif格式的文件,进而导入到LDAP中。在这个过程里,导出的user,会同时具备accout、posixAccount、shadowAccount、top这4个objectClass,而导出的group,则会同时具备和posixGroup、top两个objectClass。
上面已经写出,account的必要属性是userid,而
posixAccount的必要属性是cn、gidNumber、homeDirectory、uid、uidNumber;
shadowAccount的必要属性是uid,可选属性有shadowExpire、shadowInactive、shadowMax、shadowMin、userPassword等;
top必要属性是objectClass(可见,top和其它objectClass是继承的关系)。
========================================
2016.02.03补充:今天在Ubuntu14.04系统上,使用migrationtools工具Linux系统用户转化为ldif格式的文件时,发现导出的user仅仅具备accout、posixAccount、top这3个objectClass(已经最终测试过,可以完成正常登陆功能),而根据Ubuntu官方的OpenLDAP配置guide,建立新增的用户具备inetOrgPerson、posixAccount、shadowAccount这3个objectClass。看来,在配置OpenLDAP时,需要注意的地方还是很多。
来源:CSDN
作者:挑战不可能,努力
链接:https://blog.csdn.net/qq_35240226/article/details/100043899